Pepperなど多数のロボットが採用しているRobot Operating System(ROS)を、Ubuntu14.04LTSにインストールしてみた。ROSとは、ロボットのソフトウェア開発のためのフレームワークであり、ハードウェアの抽象化、デバイスの低レベル制御、共通に用いられる機能のライブラリ、プロセス間のメッセージパッシングおよびパッケージ管理など、基本的なオペレーティングシステムのサービスを提供する。
Ubuntu向けにビルドされたROSのパッケージが、Ubuntuレポジトリにより提供されているため、下記のページやyoutbeの動画に従い簡単にインストールすることができる。
http://wiki.ros.org/ja/indigo/Installation/Ubuntu
https://www.youtube.com/watch?v=9IJDmd0DGe0&list=PLDC89965A56E6A8D6&index=1
まず、下記のコマンドを実行し、ROS用のUbuntuレポジトリを構築する。
> sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu trusty main" > /etc/apt/sources.list.d/ros-latest.list' > ls /etc/apt/sources.list.d cuda-7-0-local.list ros-latest.list
公式外のUbuntuリポジトリを利用するので、承認するための鍵をダウンロードし、ローカルキーチェーンに取り込む。
> wget http://packages.ros.org/ros.key -O - | sudo apt-key add - > sudo apt-get update
次に、ROS、rqt、rviz、ロボットの一般的なライブラリ、2D/3Dシミュレータ、ナビゲーション、および2D/3D認識など、全てのROSのデスクトップ環境が含まれたパッケージをインストールする。ROSの本体は、/opt/ros/indigoにインストールされる。
> sudo apt-get install ros-indigo-desktop-full > ls /opt/ros/indigo _setup_util.py env.sh include setup.bash setup.zsh bin etc lib setup.sh share
次に、ROSパッケージを利用する際に必要となるシステム依存を自動的に取得してくれるrosdepの初期化を行う。
> sudo rosdep init > rosdep update
次に、シェルの起動時に、ROSの環境変数を設定するスクリプトを実行するように、.bashrcを設定する。
> echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
次に、.bashrcを読み込み環境変数を設定し、設定された環境変数の内容を確認する。
> source ~/.bashrc > export | grep ROS declare -x PWD="/home/hachiya/Works/ROS" declare -x ROSLISP_PACKAGE_DIRECTORIES="" declare -x ROS_DISTRO="indigo" declare -x ROS_ETC_DIR="/opt/ros/indigo/etc/ros" declare -x ROS_MASTER_URI="http://localhost:11311" declare -x ROS_PACKAGE_PATH="/opt/ros/indigo/share:/opt/ros/indigo/stacks" declare -x ROS_ROOT="/opt/ros/indigo/share/ros"
最後に、ROSパッケージをインストールする際に利用するrosinstallをインストールする。
> sudo apt-get install python-rosinstall
これで、ROSのインストールは完了した。
次は、ROSのチュートリアルに従って進めていけば、ROSを使いこなせるようになると言いたいところだが、ROSのファイルシステムや、パッケージの作り方など基礎的なことばかりで、使いかたのイメージをつかみにくい。そこで、下記のturtlesimパッケージを用いて、とりあえず移動ロボットのシュミレーションを操作してみた。
http://wiki.ros.org/turtlesim
http://wiki.ros.org/ROS/Tutorials/UnderstandingTopics
まず、ノード全体を統括し,ノードを実行する前にあらかじめ起動しておく必要があるroscoreを起動する。
> roscore
そして、rospackを用いてturtlesimパッケージがインストールされていることを確認する。
> rospack find turtlesim /opt/ros/indigo/share/turtlesim
次に、別々のシェルでrosrunを用いてturtlesim_nodeと、turtle_teleop_keyを起動する。
> rosrun turtlesim turtlesim_node [ INFO] [1438394727.357450628]: Starting turtlesim with node name /turtlesim [ INFO] [1438394727.361221277]: Spawning turtle [turtle1] at x=[5.544445], y=[5.544445], theta=[0.000000]
> rosrun turtlesim turtle_teleop_key
Reading from keyboard
---------------------------
Use arrow keys to move the turtle.
次のようなウィンドウが起動し、テンキーで亀を動かすことができる。
次に、これら2つのノードturtlesim_nodeとturtle_teleop_keyとがどのようなやりとりをしているかを、可視化してみる。
まず、rqt_graphとういツールを用いる。
> rosrun rqt_graph rqt_graph
この図のように、turtle_teleop_keyノードから/turtle1/cmd_velというtopicが送信(publish)され、
turtlesim_nodeが受信(subscribe)して、亀のアイコンを移動させているのがわかる。
しかし、これだけでは、/turtle1/cmd_velというtopic上をどのようなデータが送られているのかがわからない。
その情報を可視化するには、rostopicというツールを用いる。「rostopic echo /turtle1/cmd_vel」で、
topicの「/turtle1/cmd_vel」上のデータを可視化することができる。
具体的には、「rostopic echo /turtle1/cmd_vel」を新しいシェル上で実行し、turtle_teleop_keyノードを実行している
シェル上でテンキーの操作に応じて、下記のように、速度、角速度に関するtopicのデータが表示される。
> rostopic echo /turtle1/cmd_vel linear: x: 2.0 y: 0.0 z: 0.0 angular: x: 0.0 y: 0.0 z: 0.0 --- linear: x: 0.0 y: 0.0 z: 0.0 angular: x: 0.0 y: 0.0 z: -2.0 ---