LoginSignup
1
1

More than 3 years have passed since last update.

ROSのCvBridgeをPython3で使う

Posted at

はじめに

ROSで画像をMessageとしてPub/Subしたい場合は,CvBridgeを使うのが一般的だと思います.
しかし,Python3からCvBridgeを使おうとするとエラーになります.
前回,ROSノードをPython3で動かす方法を紹介しました)

CvBridge自体はPython2用にインストールされていて,Python3でROSノードを動かすとPython3でCvBridgeを動かすことになるので,エラーになります.
そこでCvBridgeをPython3用にビルドするのですが,ネットの記事だとエラーになったので,解決策を備忘録的に残します.

環境構築

Pythonはビルドイン・仮想環境どちらでも問題ないです.
(どちらかというと仮想環境向けです)

$ mkdir -p ~/cvbridge_build_ws/src
$ cd ~/cvbridge_build_ws/src
$ git clone -b melodic https://github.com/ros-perception/vision_opencv.git
$ cd vision_opencv
$ git checkout 578af4d6c7846876b3fc64512b1cc92a54894483
$ cd ../..
$ source /opt/ros/melodic/setup.bash
$ catkin config \
    -DCMAKE_BUILD_TYPE=Release \
    -DSETUPTOOLS_DEB_LAYOUT=OFF\
    -DPYTHON_EXECUTABLE={Pythonのパス} \
    -DPYTHON_LIBRARY={Pythonのlibパス} \
    -DPYTHON_INCLUDE_DIR={Pythonのincludeパス}
$ catkin config --install
$ catkin build cv_bridge
$ source install/setup.bash --extend

ex)
$ catkin config \
    -DCMAKE_BUILD_TYPE=Release \
    -DSETUPTOOLS_DEB_LAYOUT=OFF\
    -DPYTHON_EXECUTABLE=~/.anyenv/envs/pyenv/versions/3.9.1/bin/python \
    -DPYTHON_LIBRARY=~/.anyenv/envs/pyenv/versions/3.9.1/lib/libpython.3.9.so \
    -DPYTHON_INCLUDE_DIR=~/.anyenv/envs/pyenv/versions/3.9.1/include/python3.9

Checkoutしてバージョンを戻していますが,最新でも問題ないと思います.

開発の際の注意点

元々入っているPython2のCvBridgeを削除しない場合,
PYTHONPATHの順番に注意しないとビルドしたCvBridgeが使われません.

ROS本体の順番が先だとPython2のCvBrdigeが使われます.

この順番だとダメ(root直下にワークスペースを作ってるので以下のようになっているので,順番だけ見てください)
$ echo $PYTHONPATH
/opt/ros/melodic/lib/python2.7/dist-packages:/cvbridge_build_ws/install/lib/python3.9/site-packages

解決策としては,以下.

  1. PYTHONPATHの先頭に明示的に追加する
  2. sourceの順番を変える

1.PYTHONPATHの先頭に明示的に追加する

こちらは2回記述されてすっきりしないのと,site-packagesまで記載しないといけないので面倒です.

$ export PYTHONPATH=~/cvbridge_build_ws/install/lib/python3.9/site-packages/$PYTHONPATH

2.sourceの順番を変える

ROS(関連)のsetup.shの中を見ると,自身のPYTHONPATHをPYTHONPATHの先頭に追加しています.
なので,ROS本体のsetup.bash(sh)より後にCvBridgeのsetup.bash(sh)を実行すれば解決します.

Dockerfileで環境を作っている場合は,
bashrcに記載するかentrypointで順番をコントロールすれば面倒はないかと思います.

まとめ

CvBridgeをPython3から使う方法を紹介しました.
ご参考になれば幸いです.

1
1
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
1
1