MacでROS noeticをつかう！

# 動作環境
Mac OS sonoma 14.4.1

# 概要
今回はmacOSでROSのnoeticを使おうという試みをしたので，その備忘録として書いておこうと思う．macOSでUbuntuをつかうところから始まり，ROSを入れてturtlebot3のシミュレーションをrvizで行えるようになるまでを書いている．

# Dockerの導入
まずはdockerをダウンロードする．

https://docs.docker.jp/desktop/install/mac-install.html

このサイトの手順に従ってインストールを進めていく．

[Intel Mac用] https://desktop.docker.com/mac/main/amd64/Docker.dmg
[Sillicon Mac用] https://desktop.docker.com/mac/main/arm64/Docker.dmg

dockerをインストールできたら，アイコンをクリックして開いておく．（開いておかないとこの後コンテナをつくったり開いたりができない）

# ROS+GUI環境の入ったコンテナを持ってくる

https://github.com/Tiryoh/docker_ros-desktop-vnc

この方がROSをGUI環境で使えるdocker imageを提供しているのでこちらを使わせていただく．
ちなみにROS2版もある．

https://github.com/Tiryoh/docker_ros2-desktop-vnc

コマンドラインをたちあげて，
```
$ docker run -p 6080:80 --name 名前 --shm-size=512m tiryoh/ros-desktop-vnc:noetic
```
と入力する．"名前"の部分は好きな名前にしていい．この部分がコンテナ名になる．
次に，Webブラウザで　
http://127.0.0.1:6080
にアクセスする．するとUbuntuがブラウザ上に立ち上がる．
これは今Docker上にコンテナを立ててそのコンテナにVNCでアクセスしている．

これでROS noetic環境の入ったUbuntuが立ち上がったはずだ．
閉じるときはMacのターミナルに，
```
$ exit
$ docker stop 名前
```
と入力する．("名前"の部分はさっき決めたコンテナ名)

一度コンテナを作ったら，次にまた同じコンテナを開くときはMacのターミナルに
```
$ docker start 名前
$ docker exec -it 名前 /bin/bash
```
と打てば立ち上がる．("名前"の部分はさっき決めたコンテナ名)
その状態でまた127.0.0.1:6080にアクセスすれば開く．
もしUbuntuがブラウザの全面に表示されない場合は，左端の小さい三角をクリックするとメニューが開くので，歯車のアイコンをクリックしてScaling ModeのところのLocal Scalingを選択して立ち上げ直すとブラウザ前面に表示されるはずだ．

![01D9A224-2159-4A4C-9973-C9A2D57327DE_1_201_a.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476721/5773a652-58a0-b94a-035b-40ec29954c1f.jpeg)


# roscoreを動かしてみる

Ubuntu上でターミナルを開く．一番左下のつばめ？のようなマークをクリックするとメニューが開くので，System Tools > LXTerminalでターミナルが開く．

![E95CDBC9-BF65-4DD5-8EB7-5F89C3A3FAE9_1_201_a.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476721/918a74a9-f4bc-ff6f-88d2-383736a8f711.jpeg)

Ubuntuのターミナルに，
```
$ roscore
```
と打ち，新しく別にターミナルを開く．タブで開いてもウィンドウで開いてもいい．
タブで開く場合は control+shift+T
ウィンドウで開く場合は control+shift+N

新しく開いたターミナルに，
```
$ rosrun turtlesim turtlesim_node
```
と打つと，青背景に小さな亀が1匹出てくると思う．
また新しくターミナルを開いて，
```
$ rosrun turtlesim turtle_teleop_key
```
と入力してみる．ターミナルの入力画面上でキーボードの矢印キーを押してみると亀が動くようになる．ここまではできるはずだ．
一通り楽しみ終わったらroscore以外のターミナルをcontrol+Cで終了しておく

:::note info
### コピペの方法
#### Mac→Ubuntuへのコピペ
左端の小さい三角>バインダーアイコン>Clipboard
ここにペーストしたい内容を貼り付けて，ターミナルでcontrol+shift+Vするとペーストできる．

#### Ubuntu→Macへのコピペ
control+shift+Cして，
左端の小さい三角>バインダーアイコン>Clipboard
ここにコピーした内容があるので，そこからコピペする．
:::

# Turtlebot3のシミュレーションを動かす

ここからが問題である．roscoreとは別にターミナルを立ち上げて，
```
$ roslaunch turtlebot3_fake turtlebot3_fake.launch
```
と入力しても

```
RLException: [turtlebot3_fake.launch] is neither a launch file in package [turtlebot3_fake] nor is [turtlebot3_fake] a launch file name
The traceback for the exception was written to the log file
```
とエラーが出て動かないのである．そこで，turtlebot3の公式ドキュメントを見た．

https://emanual.robotis.com/docs/en/platform/turtlebot3/quick-start/

このサイトの手順通りにturtlebot3パッケージをインストールしていくとうまく行った．

まず，ROSをインストールする．
```
$ sudo apt update
$ sudo apt upgrade
$ wget https://raw.githubusercontent.com/ROBOTIS-GIT/robotis_tools/master/install_ros_noetic.sh
$ chmod 755 ./install_ros_noetic.sh 
$ bash ./install_ros_noetic.sh
```

次に，依存するROSパッケージをインストールする．
```
$ sudo apt-get install ros-noetic-joy ros-noetic-teleop-twist-joy \
  ros-noetic-teleop-twist-keyboard ros-noetic-laser-proc \
  ros-noetic-rgbd-launch ros-noetic-rosserial-arduino \
  ros-noetic-rosserial-python ros-noetic-rosserial-client \
  ros-noetic-rosserial-msgs ros-noetic-amcl ros-noetic-map-server \
  ros-noetic-move-base ros-noetic-urdf ros-noetic-xacro \
  ros-noetic-compressed-image-transport ros-noetic-rqt* ros-noetic-rviz \
  ros-noetic-gmapping ros-noetic-navigation ros-noetic-interactive-markers
```

次に，turtlebot3のパッケージをインストールする．
```
$ sudo apt install ros-noetic-dynamixel-sdk
$ sudo apt install ros-noetic-turtlebot3-msgs
$ sudo apt install ros-noetic-turtlebot3
```

最後に，.bashrcの最後に
```
export TURTLEBOT3_MODEL=burger
```
と記入しておけばOK．

これでもう一度roscoreが動いている状態で
```
$ roslaunch turtlebot3_fake turtlebot3_fake.launch
```
と入力してみると，rvizが開いてturtlebot3のシミュレーションが動くはずだ．

新しくターミナルを開いて，
```
$ roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
```
と入力し，ターミナルの入力画面上で，WASDで操作してみると，turtlebot3が動いてくれる．

# 感想
下手に色々調べていろんなサイト見漁るよりまず先に公式ドキュメントを見ろということを学んだ．NKTだった．

## 参考文献
https://qiita.com/yasuoka_dev/items/073f7e8c7dba75993323

https://memoteki.net/archives/2955

https://emanual.robotis.com/docs/en/platform/turtlebot3/quick-start/

### 追記
UTMというアプリケーションを使ったらUSBパススルーもできた．USBカメラやコントローラーを使いたいならUTMの方がいいかも．

https://mac.getutm.app/