やること
DockerでROS2_humbleを起動して、Unityとデータ通信するところの自分用のメモです。
後半のMoveit2のチュートリアル実行までいろいろと大変でした。
変なところがあったらすみません。
作業環境
- Mac M1(apple silicon)
- Unity (バージョン 2022.3.8f1)
- ROS2 humble
方法
STEP:1 DockerでROS2を開く
まず、ROS用のポート番号10000とワークスペースのマウント付きでDockerを開きます。
(以下はApple silicon用です。インテルPCの場合などは行末の-arm64を削除して実行するとうまくいくかもしれません。)
docker run -v ~/ros2_ws:/home/ubuntu/colcon_ws:cached -p 6080:80 -p 10000:10000 --shm-size=1024m tiryoh/ros2-desktop-vnc:humble-arm64
ROS2_humbleのDockerイメージを開きます。
同時にMacのディレクトリ「/Users/[ユーザー名]/」の中にros2_wsのディレクトリがマウントされます。
そのディレクトリにはDockerの中からもMacのデスクトップからもアクセスできて超便利です。
必要に応じてリネームする。
docker rename 古いコンテナ名 新しいコンテナ名
STEP:2 ROS2のエンドポイントを立ち上げる
ブラウザで
http://127.0.0.1:6080/
を開き、Ubuntuのデスクトップに入る。
ROS2用のROS-TCP-Endpointをインストールする。
cd ~/colcon_ws/src
git clone -b ROS2v0.7.0 https://github.com/Unity-Technologies/ROS-TCP-Endpoint
cd ~/colcon_ws/
colcon build
source ~/colcon_ws/install/setup.bash
echo "source ~/colcon_ws/install/setup.bash" >> ~/.bashrc
DockerとMacを繋ぐエンドポイントを立ち上げます。
ros2 run ros_tcp_endpoint default_server_endpoint --ros-args -p ROS_IP:=0.0.0.0
STEP:3 UnityのROS2を立ち上げる
MacでUnityを開く。バージョンは2022.3.8f1。
M1Mac対応なので物理演算がなめらか快適。
メニューの「Window」→「Package Manager」を開き、左上の「+」ボタンから「Add Package from git URL...」を選択。
https://github.com/Unity-Technologies/ROS-TCP-Connector?path=/com.unity.robotics.ros-tcp-connector#v0.7.0
を入力する。
Unityのメニューに「Robotics」が現れるので、プルダウンから「ROS Settings」を選択する。
チェックボックスをROS2に、ROS portを10000にする。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F565043%2F882d5dd9-06a2-6589-a04e-488d49312723.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=62f1efcd94dc13e78f4c42ea5b83a312)
同様の手順で、Visualizationsを導入する。
「Add Package from git URL...」で、
https://github.com/Unity-Technologies/ROS-TCP-Connector.git?path=/com.unity.robotics.visualizations#v0.7.0
を入力。
Unityの画面下にあるProjectから「Packages」→「Unity Robotics Visualizations」の中の「DefaultVisualizationSuite」を見つけてヒエラルキーウィンドウにドロップ。
STEP:4 UnityとDocekrROS2間の通信を確立する
急にはしょります。
DockerのROS2でパブリッシュ、Unityのスクリプトでサブスクライブするコードなどを使えば通信が成立するはずです。
スクリプトは記の最後にある本などにあります。
STEP:5 Moviit2を導入する
Moveit2を導入します。以下を参考に、
sudo apt install ros-humble-moveit
とします。
次に、以下を参考にTutorialを進めます。
が、自分の場合そのままではうまく行かなかったので、
Dockerのメモリが少ない場合には設定で増やしておきます。
Cpus:4
Memory:6GB
Swap:2GB
VirtualDiskLimit:24GB
にしました。もっと少なくても大丈夫とは思います。
その上で、ビルドのところは、
colcon build --mixin release --cmake-clean-cache --parallel-workers 1
として、前回のインストール失敗のキャッシュをクリアにしつつメモリの使用を抑えたりしました。
Macに扇風機を当てるなどで排熱することでなんとかビルドは最後まで通ります。
ビルド時間はかなり長時間になりました。(1時間ぐらい?)
STEP:6 Moviitのtutorialを実行する
を参考に、
ros2 launch moveit2_tutorials demo.launch.py rviz_config:=panda_moveit_config_demo_empty.rviz
とします。
RVizの立ち上げまでは確認できますので、先ほどのtutorial記事に沿ってすすめると、pandaが立ち上がります。
これでチュートリアルができる...はず!
参考
『UnityではじめるROS 人工知能 ロボットプログラミング 実践入門』布留川英一著