LoginSignup
3
3

More than 1 year has passed since last update.

ROS2の勉強 第1弾:環境構築

Last updated at Posted at 2022-01-26

#プログラミング 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をインストールするための手順をシェルスクリプトにまとめてくれている.このおかげで非常に楽に環境構築できる.

シェルスクリプトの中身を以下に示しておく.

ros2_setup_scripts
#!/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行目がコメントアウトされているが,レポジトリにアクセスする際に必要な部分となるため,コメントアウトを外しておく.編集した結果を以下に示す.

ros2_setup_scripts
#!/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になっている.

terminal_1(文字列を配信する)
ros2 run demo_nodes_py talker
terminal_2(配信されている文字列を受け取る)
ros2 run demo_nodes_py listener
実行結果

talker_listener.PNG
左:terminal_1(talker)       右:terminal_2(listener)

topicの確認

rostopicもros2 topicになっている.

topicの確認コマンド
ros2 topic list
topicの確認
/chatter
/parameter_events
/rosout

ros2 topic infoでは配信・購読の数を確認できる.

topicの情報確認コマンド
ros2 topic info /chatter
topicの情報確認
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入門 玉川大学 岡田浩之 著,科学情報出版株式会社
3
3
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
3