0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

melodicでもopencv-pythonが使いたい(docker)

Last updated at Posted at 2022-08-18

はじめに

現在、研究室からお借りしているPCがubuntu18.04でros-melodicを入れています。
ros melodicはpython2系で動いています。

そんな折、どうしてもrosとOpenCV-pythonが使いたくなりました。
OpenCVの最新はもちろんpython3系です。
さっさとubuntu20.04なりにアップグレードしてしまえばいいのですが、どうにかして今の環境で動かしたい。
という事で、dockerにros-noeticを立ててopencvを使い、ローカルな環境のros-melodicと通信しました事についてのまとめ記事です。

補足

  • OpenCVをビルドしてpython2系でも使えるそうですが、なんか上手くいきませんでした。
  • ros-melodicでもpython3は動きますが、色々面倒そうなので使っていません。

構成

  • ubuntu18.04
    • ros-melodic
    • docker
      • ros-noetic
      • opencv-python

やり方

docker側

まずはdockerのros-noeticで、mypkgというパッケージのmypkg.pyノードを動かす環境を作ります。
mypkg.pyでopencv-pythonをインポートする事を想定しています。

以下に示すDockerfileとdocker-compose.ymlを、このツリーのように配置してください。

mypkg/
├── CMakeLists.txt
├── Dockerfile
├── docker-compose.yml
├── package.xml
├── script
│   └── mypkg.py
└── src

配置が出来たら、ターミナルから以下を打ちましょう。

$ docker compose up -d
$ docker exec -it ros-noetic bash

ros-noeticが起動したら、catkin_makeをして、bashを打てばパッケージが動かせます。

Dockerfile

# osrfが提供するrosイメージ(タグがnoetic-desktop-full)をベースとしてダウンロード
FROM osrf/ros:noetic-desktop-full

# Docker実行してシェルに入ったときの初期ディレクトリ(ワークディレクトリ)の設定
WORKDIR /root/

# ROSのセットアップシェルスクリプトを.bashrcファイルに追記
RUN echo "source /opt/ros/noetic/setup.sh" >> .bashrc
RUN echo "source /root/catkin_ws/devel/setup.bash" >> .bashrc

# OpenCVのインストール
RUN apt-get update
RUN apt-get install -y python3-pip
RUN python3 -m pip install opencv-python
RUN apt-get install -y ros-noetic-cv-bridge

ENTRYPOINT [ "bash" ]

docker-compose.yml

# versionはdocker composeのversionに合わせる
version: '3.8'

services:
  ros:
    container_name: ros-noetic
    # ttyを入れないとすぐに終了する
    tty: true
    build:
      dockerfile: Dockerfile
      context: .
    network_mode: "host"
    volumes:
      - type: bind
        source: .
        target: /root/catkin_ws/src/mypkg
    # environment:
    #  ROS_MASTER_URI: http://172.17.0.1:11311
    #  ROS_IP: 172.17.0.1
    #  ROS_HOSTNAME: 172.17.0.1

ローカル側

ローカルのros-melodicを、dockerのros-noeticと通信します。
環境変数を変更するだけです。
dockerのnetworkにhostが設定されていたら大丈夫(変更)

昔やっていたこと

ターミナルで

export ROS_MASTER_URI=http://172.17.0.1:11311
export ROS_IP=172.17.0.1
export ROS_HOSTNAME=172.17.0.1

以上で完了です。
同じ環境変数がdockerのros-noeticにも設定されています。
あとはどちらでroscoreをしても、お互いに接続可能です。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?