Kinaconの技術ブログ

Ubuntuはじめました。

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の作成

  • 参考

qiita.com


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による一括立ち上げ

  • 参考

ros | Docker Documentation


同一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

以上。