ROS 2のシミュレータでRaspicatを動かそう!
概要
Dockerを使用し、Raspicatのシミュレータを起動、シミュレータ上でSLAM・ ナビゲーションを行う方法を説明します。 予めノートPCのセットアップを完了してからこちらに進んでください。
実機のRaspicatを動かす前に シミュレータで遊んで、ROS 2のSLAMやNavigationの感覚を身につけることで、 事故が少なくなったり、作業効率が上がったりする効果があります。(根拠なし)
シミュレータのセットアップ
- 使用するパッケージ
CIT-Autonomous-Robot-Lab/raspicat-sim-docker
Dockerのインストール(済んでいる人は飛ばしてください)
自分のPCにNvidia製のGPUが搭載されている場合は
GPUありの方を実行してください。
sudo apt install docker.io
sudo gpasswd -a $USER docker
sudo apt install nvidia-container-runtime
curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list | sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list
sudo apt update
sudo apt install nvidia-container-runtime
service docker restart
sudo reboot
Docker Imageの作成
GUIを使用するためにXサーバへのアクセス許可
コンテナの立ち上げ
docker run --rm -it \
-u $(id -u):$(id -g) \
--gpus all \
--privileged \
--net=host \
--ipc=host \
--env="DISPLAY=$DISPLAY" \
--mount type=bind,source=/dev,target=/dev \
--mount type=bind,source=/home/$USER/.ssh,target=/home/$USER/.ssh \
--mount type=bind,source=/home/$USER/.gitconfig,target=/home/$USER/.gitconfig \
--mount type=bind,source=/usr/share/zoneinfo/Asia/Tokyo,target=/etc/localtime \
--name raspicat-sim \
raspicat-sim:humble
docker run --rm -it \
-u $(id -u):$(id -g) \
--privileged \
--net=host \
--ipc=host \
--env="DISPLAY=$DISPLAY" \
--mount type=bind,source=/dev,target=/dev \
--mount type=bind,source=/home/$USER/.ssh,target=/home/$USER/.ssh \
--mount type=bind,source=/home/$USER/.gitconfig,target=/home/$USER/.gitconfig \
--mount type=bind,source=/usr/share/zoneinfo/Asia/Tokyo,target=/etc/localtime \
--name raspicat-sim \
raspicat-sim:humble
ターミナルの追加
別のターミナルを開き以下を実行
シミュレータでROS 2のナビゲーションを学ぶ
まずは単純にシミュレータのロボットをコントローラを使用して
動かしてみましょう!
速度指令値を与えることで、ロボットはその速度通りに動きます。
コマンドは、それぞれ別のターミナルで実行します。 ターミナルの追加を参照してください。
Raspicatをシミュレータで動かすだけ
SLAM(slam-toolbox)
ロボットが動かせるようになったら マッピングを行います。 マッピングは、 ロボットが自律移動を行うために必要なデータを記した環境地図を作成すること です。 今回を含む多くの場合で、障害物の配置(LiDARの点群のデータ)を記録します。
- マップができたらターミナルを追加し以下のコマンドで地図を保存
- 保存した地図を確認してみましょう!(きれいな地図ができたかな?)
マッピングして、手に入れた地図を使用して
ロボットの自律移動をやってみましょう!
Navigation(Nav 2)
ロボットが動かなくなったときは2行目を繰り返し実行
ros2 launch raspicat_gazebo raspicat_with_iscas_museum.launch.py
ros2 service call /motor_power std_srvs/SetBool '{data: true}'
ros2 launch raspicat_navigation raspicat_nav2.launch.py map:=$HOME/map.yaml use_sim_time:=true
B3への課題
- 指定された経路通りにロボットを走行させましょう!
Gazeboを録画したものを、slackに貼り付けてください
- ロボットの動かし方がわかったら、マッピングをしましょう!
保存した地図であるmap.pgmをslackに貼り付けてください - 作成した地図を使用して、ロボットのナビゲーションを行いましょう!
1と同様に指定された経路通りにロボットを走行させましょう!
GazeboとRVizの両方を同時に録画したものをslackに貼り付けてください