ROS Getting started
Ubuntu のバージョンによって作るべき環境が異なるので注意:
本家で確認する
Install
(2017-03-22時点の情報)
準備
- /etc/lsb-releaseでUbuntuのバージョンを確認
- Ubuntu 15.10 & 16.04 では ROS Kinetic Kame を配布
(今の白井のマシンのOS) 15.04 では Jade
- 巷に出回っているROS関連本では 14.04を扱う、そこは Indigo Igloo
レポジトリの構成
Ubuntuでは apt-get によってモジュールを追加・更新できる。
しかしデフォルトでは ros の情報がないため、以下の作業によって
apt-getによりros を組み込めるようにする
以下は 15.04 として作業してみる
- sources.lst の更新:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
- キーの設定
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
- インストール作業
# おなじみ、情報更新
sudo apt-get update
# Desktop-full のインストール: rqt, rviz, 2D/3Dシミュレータ・認識、ナビゲーションなど(注意:Jadeは Gazebo 5を使用)
sudo apt-get install ros-jade-desktop-full
# Desktopのインストール: ROS, rqt, rviz, robotのライブラリ
# 実際には上記で実施されているはず
sudo apt-get install ros-jade-desktop
# ROSベースのインストール(GUIツールはまだない)
# これも実際にはインストール済みのはず
sudo apt-get install ros-jade-ros-base
# 個別にパッケージをインストール
# sudo apt-get install ros-jade-PACKAGE
# と言われてもどんなものがあるか分からないので、まず
# sudo apt-cache search ros-jade-* を実行
# たくさん出てくるので試しに turtlesim をインストールしてみる
sudo apt-get install ros-jade-turtlesim
# なんとこれもインストールされていた
# 本家ページに従い、以下を試す
sudo apt-get install ros-jade-slam-gmapping
- インストールされているパッケージの確認
apt-cache search ros-jade
1178個確認された
rosdepの初期化
ROSを使用するには rosdep の初期化が必要。これにより使いたい
コードをコンパイルしたりコード実行ができるようになる
sudo rosdep init
# rosdep update を実行せよ、というメッセージが出る
rosdep update
# 追加されたモジュールなどが表示される
環境設定
ROSの環境変数を記憶(.bashrcに書き込む)し、以後、自動的に設定するようになる
、かつ今の環境においても登録する
echo "source /opt/ros/jade/setup.bash" >> ~/.bashrc
source ~/.bashrc
rosinstallを始める
rosinstall によってROSパッケージからコマンドでダウンロードできるようになる
(そのためによく使うコマンド)
sudo apt-get install python-rosinstall python-rosdep
パッケージについて
汎用性のある基本機能をノード(node)といい、有用なノードの組み合わせが
パッケージ(package)
パッケージの生成、修正など
- rospack : パッケージの情報の取得、パッケージを検索
例:
$ rospack find turtlesim
- roscreate-pkg : 新しくパッケージを生成
- rosmake : パッケージのコンパイル
- rosdep : パッケージのシステム依存関係のインストール
- rxdeps : パッケージの依存関係をグラフとして表示
パッケージ間の移動など
Linuxのコマンドに類似
- roscd : cd と同様
- rosed : ファイルの編集
- roscp : cp と同様
- rosd : パッケージのディレクトリをリスト
- rosls : ls と同様
ROSの情報
注意: 自分が使っているPythonのバージョンを確認する。
Python 2でないと不具合を起こすし、ライブラリの登録もされていなかったりする。
% python -V
# 確認、必要なら以下を実行
% export PATH=/usr/bin:$PATH
# /usr/bin/python を使う(virtualenvを使えば本当は良いのだが)
- 日本語によるチュートリアル
- ROSファイルシステム
- ROS
パッケージ :
マニフェスト(package.xml)、メッセージ・データ型(msg)、
サービス・データ型(srv)、ソース(src)、ローンチ(launch)ファイルなどから構成
- ROSのノード:
通信モジュール間のピアツーピアネットワークで関連付け
- ROS トピック:
この配布・購読により非同期型データ通信が提供される
-
メッセージとサービス
- Python
による配信者と購読者の書き方の例
- Python
によるサービスとクライアントの書き方の例
- 基本的なROSノードの使い方: (ROSの機能を使う)
% roscore & # ROSマスターを起動: 絶対に必要
# ただし既に起動している場合は以下の警告がでるがこれは無視して良い
roscore cannot run as another roscore/master is already running.
% rosnode list -a # 現在アクティブなノードの表示(必要なし)
次にノードを起動するが、rosrunを使う方法と roslaunchを使う方法の2とおり
% rosrun パッケージ名 実行ファイル名 (パラメタ)
もしくは
% roslaunch パッケージ名 ローンチファイル名
- 亀シミュレータを動す: 紹介記事や本によれば「3つのターミナル」
が必要と書いてあったりするが、以下のように一つで足りる
(Linux/Unixを知らない人むけに書かれたため?)
# ROSマスターの起動
roscore &
# turtlesimノードの実行
rosrun turtlesim turtlesim_node &
# 亀の操作: キーで亀を動かす
rosrun turtlesim turtle_teleop_key
なお、停止するには、Ctrl-C (コントロールキーをおしながらc)を押す。
roscore と turtlesim も停止させるには、
kill %1 %2 とすればよい
-
小倉崇(2015)「ROSではじめるロボットプログラミング」工学社と
サンプルプログラム
- 出村氏@金沢工科大学の講義
:例えば KOBUKIを動かす
トラブルとその解消法
- catkinワークスペースを作る:
% mkdir ~/ros/src
% cd ~/ros/src
% catkin_init_workspace
% cd ~/ros
% catkin_make
(中途略)
-- Using Python nosetests: /opt/anaconda3/bin/nosetests
ImportError: "from catkin_pkg.package import parse_package"
failed: No module named 'catkin_pkg'
Make sure that you have installed "catkin_pkg", it is up to
date and on the PYTHONPATH.
CMake Error at
/opt/ros/jade/share/catkin/cmake/safe_execute_process.cmake:11 (message):
しかし catkin_pkg はある:
% dpkg -L python-catkin-pkg
(中略)
/usr/lib/python2.7
/usr/lib/python2.7/dist-packages
/usr/lib/python2.7/dist-packages/catkin_pkg-0.3.1.egg-info
(以後略)
解決策:
ros
のQ/Aに従い、pipから catkin_pkgなどを削除し、apt-getし直す
しかし相変わらずエラー...
本当の解決策: $PYTHONPATHの値が (env | grep PYTHONPATHで確認)
/opt/ros/jade/lib/python2.7/dist-packagesとなっており、
一方 apt-get installでインストールされたcatkin_pkgは
(locate catkin_pkgで確認)
/usr/lib/python2.7/dist-packages/にあるので、場所が違うため。
そこで、ln -s /usr/lib/python2.7/dist-packages/catkin_* $PYTHONPATH
とした
- 環境変数が保存されない
解決策: ~/.bashrcにsource /opt/ros/jade/setup.bash
を書き込む(注意:それぞれのshellとROSのバージョンに合わせること)
- Tutorialsが動かない
一番の原因は、最初から順番にやっていないこと、後は PYTHONPATHの値
(workspaceの下にある devel/lib/python2.7/dist-packages が入っているか?)
とROS_PACKAGE_PATH (workspaceが入っているか?)
の値が適切に設定されていないことが考えられる。
また、 CMakeLists.txt と package.xml の値の修正も必要(msgやsrvの
設定)がある。これでもわからない場合は、answers.ros.org/question
を検索すること
- 自分が作ったserviceが使えない
これはServiceを自作したときに遭遇した問題です。
import ros_start.srv import MyService
という文を含むPythonプログラムを書いたところ、
ImportError: No module named ros_start.srvというエラーになりました。
問題はPYTHONPATHの環境変数に、
/home/sirai/catkin_ws/devel/lib/python2.7/dist-packagesがセット
されていないことでした。catkin_make すればこの下にモジュールを作ってくれますが、
PATHがないことにはPythonも探せない、ということでした
(どこかでこの設定を見落としたのでしょうね)。
なお、現在のPYTHONPATH の値は次のようになっています:
/home/sirai/catkin_ws/devel/lib/python2.7/dist-packages:/opt/ros/kinetic/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages
追記: .bashrcにおいて
source /opt/ros/kinetic/setup.bash
とあるところを次のように書き換えれば上記の問題は解決していた(他の環境変数もセットしてくれるのでこちらのほうが良い):
source ~/katkin_ws/devel/setup.bash
参考