ROSのチュートリアルをdockerで実行する
ROSのチュートリアルをdockerで実行する
1. dockerで環境構築
- Docker version 19.03.1
docker pull ros:melodic
docker run -it --rm ros:melodic
2. work spaceの作成
- 参考
ja/catkin/Tutorials/create_a_workspace - ROS Wiki
mkdir -p catkin_ws/src cd catkin_ws/src/ catkin_init_workspace cd .. catkin_make source devel/setup.bash
echo $ROS_PACKAGE_PATH >> /catkin_ws/src:/opt/ros/melodic/share
3. ROS packageの作成
- 参考
ROS/Tutorials/CreatingPackage - ROS Wiki
cd /catkin_ws/src/ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp cd .. catkin_make source devel/setup.bash
roscd beginner_tutorials mkdir scripts cd scripts # install curl apt update apt install curl # download taker.py curl -L -O https://raw.github.com/ros/ros_tutorials/kinetic-devel/rospy_tutorials/001_talker_listener/talker.py chmod +x talker.py # download listener.py curl -L -O https://raw.github.com/ros/ros_tutorials/kinetic-devel/rospy_tutorials/001_talker_listener/listener.py chmod +x listener.py roscd source setup.bash
4. コンテナーをイメージ化
# ctrl+p ctrl+qで抜ける # cotainer IDを確認する docker container ls # 作成したcontainerをcommitする docker commit <ID> ros/tutorial # コミット済みcontainerを停止する docker stop <ID>
5. docker networkの作成
- 参考
docker network create rosnet
6. 実行
各ターミナルごとにコマンド実行する
docker run -it --rm \ --net=rosnet \ --name master \ ros/tutorial \ roscore
docker run -it --rm \ --net=rosnet \ --env ROS_HOSTNAME=talker \ --env ROS_MASTER_URI=http://master:11311 \ --name talker \ ros/tutorial \ /bin/bash -c "source /catkin_ws/devel/setup.bash; rosrun beginner_tutorials talker.py"
docker run -it --rm \ --net=rosnet \ --env ROS_HOSTNAME=listener \ --env ROS_MASTER_URI=http://master:11311 \ --name listener \ ros/tutorial \ /bin/bash -c "source /catkin_ws/devel/setup.bash; rosrun beginner_tutorials listener.py"
7. docker-composeによる一括立ち上げ
- 参考
同一PC内での立ち上げであればdocker-composeが楽。
docker-composeのインストール
- 参考
Docker Compose のインストール — Docker-docs-ja 17.06.Beta ドキュメント
# rootで実行 sudo -i curl -L https://github.com/docker/compose/releases/download/1.6.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose exit # 確認 docker-compose --version > docker-compose version 1.6.2, build 4d72027
docker-compose.ymlの作成
mkdir ros-tutorial cd ros-tutorial sudo gedit docker-compose.yml
- docker-compose.yml
version: '2' services: master: image: ros/tutorial container_name: master command: - roscore talker: image: ros/tutorial container_name: talker environment: - "ROS_HOSTNAME=talker" - "ROS_MASTER_URI=http://master:11311" command: /bin/bash -c "source /catkin_ws/devel/setup.bash; rosrun beginner_tutorials talker.py" listener: image: ros/tutorial container_name: listener environment: - "ROS_HOSTNAME=listener" - "ROS_MASTER_URI=http://master:11311" command: /bin/bash -c "source /catkin_ws/devel/setup.bash; rosrun beginner_tutorials listener.py"
実行
# 実行 docker-compose up -d # 確認 docker-compose logs listener # 停止とコンテナの削除 docker-compose down
以上。