#プログラミング ROS2< 環境構築 >
はじめに
ROS(Robot Operating System)はある程度使えるようになった.あとは,経験を積んでいく中で洗練できると思う.その経験についての記録は,気まぐれに投稿することとする.続いては,ROS2も扱えるようになりたいということで,ROS2(バージョンアップしたROS)を難なく扱えるようになることが目的である.その第1弾として,「環境構築」を扱う.
環境
仮想環境
ソフト | VMware Workstation 15 |
実装RAM | 2 GB |
OS | Ubuntu 64 ビット |
isoファイル | ubuntu-20.04.3-desktop-amd64.iso |
コンピュータ
デバイス | MSI |
プロセッサ | Intel(R) Core(TM) i5-7300HQ CPU @ 2.50GHz 2.50GHz |
実装RAM | 8.00 GB (7.89 GB 使用可能) |
OS | Windows (Windows 10 Home, バージョン:21H1) |
ROS2
Distribution | foxy |
ROS2の環境構築
環境構築のための準備
環境構築については,上田隆一氏の講義「ロボットシステム学講義:ロボットシステム学第11回(ROS2)」を参考にさせていただいた.
以下のgithubにROS2をインストールするための手順をシェルスクリプトにまとめてくれている.このおかげで非常に楽に環境構築できる.
シェルスクリプトの中身を以下に示しておく.
#!/bin/bash -e
[ "${ROS_VERSION}" = "1" ] && echo ROS1 is set. Please comment out the lines of source for ROS1 on .bashrc and restart a terminal. && exit 1
[ "${ROS_VERSION}" = "2" ] && echo ROS2 is set. Please comment out the lines of source for ROS2 on .bashrc and restart a terminal. && exit 1
sudo apt-get install curl gnupg2
#curl http://repo.ros2.org/repos.key |
#sudo apt-key add -
UBUNTU_VER=$(lsb_release -sc)
ROS_VER=dashing
[ "$UBUNTU_VER" = "focal" ] && ROS_VER=foxy
echo "deb [arch=amd64,arm64] http://packages.ros.org/ros2/ubuntu ${UBUNTU_VER} main" |
sudo tee /etc/apt/sources.list.d/ros2-latest.list
sudo apt-get update
sudo apt-get install ros-${ROS_VER}-desktop python3-colcon-common-extensions python3-rosdep python3-argcomplete
sudo rm -f /etc/ros/rosdep/sources.list.d/20-default.list
sudo rosdep init
sudo rosdep fix-permissions
echo "source /opt/ros/${ROS_VER}/setup.bash" >> ~/.bashrc
rosdep update
echo '***INSTRUCTION*****************'
echo '* do the following command *'
echo '* $ source ~/.bashrc *'
echo '*******************************'
シェルスクリプト実行
先ほど示したシェルスクリプトを実行すればよいかなと思ったが,そのままだとエラーが出てくる.
シェルスクリプトの中身をよく見てみると,まず3行目[ "${ROS_VERSION}" = "1" ] &...の部分はコメントアウトしてもよさそうだ.また,6,7行目がコメントアウトされているが,レポジトリにアクセスする際に必要な部分となるため,コメントアウトを外しておく.編集した結果を以下に示す.
#!/bin/bash -e
#[ "${ROS_VERSION}" = "1" ] && echo ROS1 is set. Please comment out the lines of source for ROS1 on .bashrc and restart a terminal. && exit 1
[ "${ROS_VERSION}" = "2" ] && echo ROS2 is set. Please comment out the lines of source for ROS2 on .bashrc and restart a terminal. && exit 1
sudo apt-get install curl gnupg2
curl http://repo.ros2.org/repos.key |
sudo apt-key add -
UBUNTU_VER=$(lsb_release -sc)
ROS_VER=dashing
[ "$UBUNTU_VER" = "focal" ] && ROS_VER=foxy
echo "deb [arch=amd64,arm64] http://packages.ros.org/ros2/ubuntu ${UBUNTU_VER} main" |
sudo tee /etc/apt/sources.list.d/ros2-latest.list
sudo apt-get update
sudo apt-get install ros-${ROS_VER}-desktop python3-colcon-common-extensions python3-rosdep python3-argcomplete
sudo rm -f /etc/ros/rosdep/sources.list.d/20-default.list
sudo rosdep init
sudo rosdep fix-permissions
echo "source /opt/ros/${ROS_VER}/setup.bash" >> ~/.bashrc
rosdep update
echo '***INSTRUCTION*****************'
echo '* do the following command *'
echo '* $ source ~/.bashrc *'
echo '*******************************'
これで,実行準備が整った.
あとは,以下のコマンドで実行して,待つだけでROS2の環境が構築できる.
./setup.bash
ROS2環境の確認
インストールできたか
パスを通す(先ほどのシェルスクリプト内ですでにbashrcファイルにros2のパスを通すコマンドが書き込まれている; 下から8行目)
source ~/.bashrc
ROS2が使える状態か確認:ROS2ではros2が基本コマンドとしてあるため,ros2と入力するだけ
ros2
usage: ros2 [-h] Call `ros2 <command> -h` for more detailed usage. ...
ros2 is an extensible command-line tool for ROS 2.
(以下略)
このように出力されていれば,問題ない.
ここまでで,環境の確認までできた.最後に実際に動くかの確認として,サンプルコードを動かす.
サンプルコードの実行
ROS2にもサンプルプログラムが用意されている.ここでは,PublisherとSubscriberのサンプルプログラムを実行してみる.
実行コマンド
rosrunではなくros2 runになっている.
ros2 run demo_nodes_py talker
ros2 run demo_nodes_py listener
実行結果
左:terminal_1(talker) 右:terminal_2(listener)
topicの確認
rostopicもros2 topicになっている.
ros2 topic list
/chatter
/parameter_events
/rosout
ros2 topic infoでは配信・購読の数を確認できる.
ros2 topic info /chatter
Type: std_msgs/msg/String
Publisher count: 1
Subscription count: 1
ここでは,共通のトピックとして/chatter
がある.このchatterに配信しているのがPublisherであり,それを購読しているのがSubscriberである.また,ROSとは異なり,roscore(マスター)の立ち上げが不要であることにも注目しておきたい.ただ,ros2 topic infoでどのノードが配信者で購読者であるかが分からなくなってしまっている.もしかすると,何かオプションをつけると以前のrostopic infoのときのように見えるのかもしれないが,いまのところ分からない.
感想
いよいよROS2も勉強し始めた.今回はその導入として環境構築ができた.ROSのときで培った概念などはそのまま受け継がれているため,そこまで分かりにくいという部分はいまのところなさそうである.またpythonは私のメインのプログラミング言語であるため,pythonde記述されたpythonファイルに関しても特に抵抗はない.ただ,ROSを割と勉強してきているため,まだまだ慣れはしていない.どちらも使えるようにできればと思う.ROS2についてもまだまだ知らないことも多いと思うため,ここから詰めていく.
参考
- ロボットシステム学講義:ロボットシステム学第11回(ROS2) 上田隆一 氏
- ros2_setup_script
- ロボットプログラミングROS2入門 玉川大学 岡田浩之 著,科学情報出版株式会社