空飛ぶロボットのつくりかた

ロボットをつくるために必要な技術をまとめます。ロボットの未来についても考えたりします。

ROS x Dockerのお勉強

やりたいこと

ROSをDockerで動かしたい。

参考資料

Docker + ROS(kinetic)でチュートリアル - Qiita

https://hub.docker.com/r/_/ros/

docker - ROS Wiki

dockerでROSを試したい - Qiita

ROS-Docker-tutorial.md · GitHub

docs/ros at master · docker-library/docs · GitHub

Mac版DockerでROSを動かしてみたメモ - Qiita

ロボット向けアプリケーションをDockerコンテナで動かす - Qiita

第8回ROS勉強会へ行ってきました - memoメモ

Ubuntu16.04上でDocerを使いROSを動かす: たこ104のブログ

ros.youtalk.jp — ROS 2 + Dockerによるフォールトトレランス実践 (1)

参考動画

ROS Docker Demo - YouTube

Dockerfile

FROM ros:kinetic
# install ros tutorials packages
RUN apt-get update && apt-get install -y
RUN apt-get install -y ros-kinetic-ros-tutorials \
    ros-kinetic-common-tutorials \
    && rm -rf /var/lib/apt/lists/

Build

  • docker build --tag ros:ros-tutorials .

Tutorial

master, talker, listenerの3つを動作させ,talkerが発するメッセージをlistenerが聞く

  1. networkの作成

    • docker network create rosnet
  2. masterの起動

    • docker run -it --net rosnet --name master ros:ros-tutorials roscore
  3. talkerの起動

    • docker run -it --net rosnet --name talker --env ROS_HOSTNAME=talker --env ROS_MASTER_URI=http://master:11311 ros:ros-tutorials rosrun roscpp_tutorials talker
  4. listenerの起動

    • docker run -it --net rosnet --name listener --env ROS_HOSTNAME=listener --env ROS_MASTER_URI=http://master:11311 ros:ros-tutorials rosrun roscpp_tutorials listener

Docker Compose

Now that you have an appreciation for bootstrapping a distributed ROS example manually, lets try and automate it using docker-compose.

rosでいうlaunchファイル的なもの

docker-compose.yml

version: '2'
services:
  master:
    build: .
    container_name: master
    command:
      - roscore

  talker:
    build: .
    container_name: talker
    environment:
      - "ROS_HOSTNAME=talker"
      - "ROS_MASTER_URI=http://master:11311"
    command: rosrun roscpp_tutorials talker

  listener:
    build: .
    container_name: listener
    environment:
      - "ROS_HOSTNAME=listener"
      - "ROS_MASTER_URI=http://master:11311"
    command: rosrun roscpp_tutorials listener

docker build -> runを実行

  • 起動方法
    • docker-compose up

Docker composeの参考

docker-composeを使うと複数コンテナの管理が便利に - Qiita

ROS x Docker x GUI

docker/Tutorials/GUI - ROS Wiki

xhostコマンドの使い方

手順

  1. xhost +

  2. 以下コマンドを実行

docker run -it \
    --env="DISPLAY" \
    --env="QT_X11_NO_MITSHM=1" \
    --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
    osrf/ros:indigo-desktop-full \
    rqt
export containerId=$(docker ps -l -q)

ROS(kinetic) x Docker x GPU

docker/Tutorials/Hardware Acceleration - ROS Wiki

1: Dockerfileの準備

FROM osrf/ros:kinetic-desktop-full
# nvidia-docker hooks
LABEL com.nvidia.volumes.needed="nvidia_driver"
ENV PATH /usr/local/nvidia/bin:${PATH}
ENV LD_LIBRARY_PATH /usr/local/nvidia/lib:/usr/local/nvidia/lib64:${LD_LIBRARY_PATH}

2: build

docker build --tag ros:nvidia .

3: run

nvidia-docker run -it \
    --env="DISPLAY" \
    --env="QT_X11_NO_MITSHM=1" \
    --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
    ros:nvidia \
    bash -c "roscore & rosrun rviz rviz"

f:id:robonchu:20171217192721p:plain

うごけばおけぃ

Deep Learningフレームワークをいろいろ動かす

Dockerfile

以下を追記

RUN apt-get update
RUN apt-get install emacs
RUN apt-get install tmux
RUN apt-get install wget
RUN apt-get install -y python-pip
RUN pip install tensorflow-gpu keras
RUN pip install http://download.pytorch.org/whl/cu80/torch-0.3.0.post4-cp27-cp27mu-linux_x86_64.whl
RUN pip install torchvision

kerasを動かす

  1. docker cp cuda-8.0/ [コンテナID]:/usr/local/

  2. コンテナ内でPATHの設定

  3. wget https://raw.githubusercontent.com/fchollet/keras/master/examples/mnist_cnn.py

  4. python mnist_cnn.py

pytorchを動かす

  1. python pytorch_sample.py

線形回帰をといてみる

TODO

torch.nn — PyTorch master documentation

chainer

FROM nvidia/cuda:8.0-cudnn5-devel-ubuntu16.04

RUN apt-get update -y && \
    apt-get install -y --no-install-recommends \
    python-dev \
    python-setuptools \
    python-pip && \
    rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/*

RUN pip install --upgrade pip
RUN pip install cupy==1.0.3 chainer==2.1.0

# install packages
RUN apt-get update && apt-get install -y --no-install-recommends \
    dirmngr \
    gnupg2 \
    && rm -rf /var/lib/apt/lists/*

# setup keys
RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 421C365BD9FF1F717815A3895523BAEEB01FA116

# setup sources.list
RUN echo "deb http://packages.ros.org/ros/ubuntu xenial main" > /etc/apt/sources.list.d/ros-latest.list

# install bootstrap tools
RUN apt-get update && apt-get install --no-install-recommends -y \
    python-rosdep \
    python-rosinstall \
    python-vcstools \
    && rm -rf /var/lib/apt/lists/*

# setup environment
ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8

# bootstrap rosdep
RUN rosdep init \
    && rosdep update

# install ros packages
ENV ROS_DISTRO kinetic
RUN apt-get update && apt-get install -y \
    ros-kinetic-ros-core=1.3.1-0* \
    && rm -rf /var/lib/apt/lists/*

# install cv2
RUN apt-get update && apt-get install -y ros-kinetic-cv-bridge

# install editor and tools
RUN apt-get install emacs 
RUN apt-get install tmux 

# setup entrypoint
COPY ./ros_entrypoint.sh /

ENTRYPOINT ["/ros_entrypoint.sh"]
CMD ["bash"]

TODO

  1. TX2 x ROS上でpytorchを動かす