LoginSignup
3
4

More than 1 year has passed since last update.

Docker上にROS1,ROS2の共存環境を作成&ROS2(.db3)からROS1(.bag)へのbagファイル変換

Last updated at Posted at 2022-04-05

環境

  • Ubuntu20.04 LTS
    (Dockerを使うので環境は選ばないはずです)

経緯

ROS2の.db3をROS1のbagに変換するため、ros1_bridgetを用いてROS1とROS2を同時に動かしたい。既存の環境に他方のROSを追加してもいいが、環境が壊れるのが怖い。そこで、Docker上でROS1、ROS2の共存環境を作ることに。

Dockerのインストール

以下のサイトのステップ2までをやりましょう。

Docker上に、Ubuntu18.04 & ROS1のコンテナを用意

コマンドで以下を入力します(--name rosの"ros"のところは任意に名前を付けられます)

docker run --name ros -p 6080:80 --shm-size=512m tiryoh/ros-desktop-vnc:melodic

ブラウザで以下にアクセスします
http://127.0.0.1:6080/
ここからはVNCで操作することになります。
以下のVNCに入った後、メニューからコマンドを立ち上げて下記を忘れずに行いましょう。

$ sudo apt update
$ sudo apt install gedit
$ sudo apt install iputils-ping net-tools tcpdump traceroute

止めるときは(rosの部分は--nameで指定した任意の名前)

docker stop ros

また立ち上げるときは

docker start ros

(参考サイト)
参考1
参考2

ROS2をインストール

前ステップで構築されたUbuntu18.04 & ROS1の環境にROS2を追加します。
下記サイトのUbuntu 18.04にROS2 Dashingをインストールから進めましょう。
(ROS1のcatkin_wsを作ってない場合は作っても良いです)
VNC上のコマンドに打っていけばいいです。
動作テストもやってみると良いです。既にここで共存環境が出来上がっています。

テストまで行ったら、~/.bashrcに記載のsetup.bashをコメントアウトしておきましょう。ROS1,ROS2をつかうときはその都度コマンドに各々のsetup.bashを打ち込みましょう

# source /opt/ros/melodic/setup.bash
# source /opt/ros/dashing/setup.bash

ros2bagをインストール

どうもros2 bag コマンドが使えないので、個別にインストール。

$ sudo apt-get install ros-dashing-ros2bag \
ros-dashing-rosbag2-converter-default-plugins \
ros-dashing-rosbag2-storage-default-plugins

参照サイト↓

metadata.yamlとdb.3が入ったフォルダを指定してあげれば

$ ros2 bag play [folder_path]

動きます。

Docker コンテナをイメージ化 [任意] (ローカルのコマンドで行う)

ここまでで、ROS1,ROS2共存環境が整ったので、一旦コンテナをイメージ化しても良いです。
筆者はここから何回も詰まってdocker startできなくなったので、この時点でのイメージ化はおすすめです。
上記サイトでUbuntu&ROS1のコンテナをそのまま構築した際には、コンテナ名はrosになっていると思います。
わからなければ、$ docker ps -aをローカルのコマンドに打てばNAMESに示されています。

$ docker commit [コンテナ名] [任意のimage名]
$ docker images

〜imageの保存はどのような場合に役立つのか〜
※例えば、環境整えている間にエラーが出ると、次docker startしたときに、強制的にExitedになってしまう。

$ docker ps -a
CONTAINER ID   IMAGE                            COMMAND                  CREATED          STATUS                      PORTS     NAMES
**********   tiryoh/ros-desktop-vnc:melodic   "/startup.sh"            2 hours ago      Exited (1) 9 seconds ago              ros

※もし、ERRORが出てコンテナが立ち上がらなくなったときはいつでも途中で保存したimagesから再開できる。

$ docker rm [ID]
$ docker run --name [任意のコンテナ名] -p 6080:80 --shm-size=512m [任意のimage名]:latest

python venv インストール&使用

ROS環境では直でpythonバージョンを変えるとERRORが起きて、コンテナが再びstartできなくなります。
そのため、venvを使って仮想環境で動かすようにしましょう。(例pyhton 3.9の場合)
初めは一度だけ下記を実行しましょう。

$ sudo apt install -y software-properties-common
$ sudo add-apt-repository ppa:deadsnakes/ppa

次に、特定のバージョンのpythonのvenvをインストールします。

$ sudo apt install -y python3.9-venv

(例)実行時は以下のようにして、pythonの仮想環境を構築します。

$ cd [対象ディレクトリ]
$ python3.9 -m venv [任意ネーム]
$ . [任意ネーム]/bin/activate

ROS2の.db3からROS1の.bagへ変換

ROS2(.db3)からROS1(.bag)へのbagの変換を行うために,以下のオープンソースをcloneします.
そして,python3.9の仮想環境に入ってビルドします.

$ git clone https://gitlab.com/MapIV/rosbags.git
$ cd rosbags
$ python3.9 -m venv venv
$ . venv/bin/activate
(venv)$ pip install -r requirements-dev.txt
(venv)$ pip install -e .
(venv)$ pytest
(venv)$ sphinx-build -a docs public

筆者はpytestやbuildのコマンドでエラーが出ても問題なかったです。
変換の際は,python3.9の仮想環境に入ってから行うようにして下さい.

$ cd rosbags
$ python3.9 -m venv venv
$ . venv/bin/activate
(venv)$ rosbags-convert-2to1 [ROS2 BAG pass]
3
4
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
3
4