Raspberry PiへROS (Robot Operating System)のインストールと実行
興味があったのでROSを学習してみよう、ということでインストールと動作の実行を行って見たいと思います。
※最初にRaspberry Pi3(Raspbian)へのインストールを行おうとしましたが、なぜか途中でうまくいかなくなったためRaspberry Pi2にて正式対応のUbuntuへインストール。
以下の記事と書籍を参考にしました。
ラズパイで動くロボット「GoPiGo」をつかって遠隔見守りロボットを作ろう(1) 開発準備編 (1/6):CodeZine(コードジン)
ROSではじめるロボットプログラミング―フリーのロボット用「フレームワーク」 (I・O BOOKS)
wicd-cursesのインストール
※Ubuntu14.04 LTSはMicroSDに転送済み
$ sudo apt-get update $ sudo apt-get wicd-curses $ sudo reboot $ sudo wicd-curses
すんなり起動ができず、いったんapt-get dist-upgradeをなど試しているうちに起動しました。
公式サイトに従ってROS Indigoのインストール
$ sudo update-locale LANG=C LANGUAGE=C LC_ALL=C LC_MESSAGES=POSIX $ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu trusty main" > /etc/apt/sources.list.d/ros-latest.list' $ sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net --recv-key 0xB01FA116 $ sudo apt-get update $ sudo apt-get install ros-indigo-ros-base -y
rosdepのインストールと初期化
$ sudo apt-get install python-rosdep $ sudo rosdep init $ rosdep update
ROSの環境変数をシステムに反映/rosinstallのインストール
$ echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc $ source ~/.bashrc $ sudo apt-get install python-rosinstall
ここまでも良くわからない失敗などを繰り返し、なんとかインストール完了。
Hello worldを実行
import rospy rospy.init_node('hello_world_node') rospy.loginfo('hello world') rospy.spin()
実行
$ python hellow_world.py
ファイルがありませんとエラー発生。
ROSの起動
ここでもう1つターミナルを立ち上げる。
$ roscore ... logging to /home/ubuntu/.ros/log/71ba861e-f35d-11e6-b4a0-0022cffb11db/roslaunch-ubuntu-1318.log Checking log directory for disk usage. This may take awhile. ~中略~ setting /run_id to 71ba861e-f35d-11e6-b4a0-0022cffb11db process[rosout-1]: started with pid [1343] started core service [/rosout]
きちんと起動されました。
ROSワークスペースの作成
$ mkdir -p ~/catkin_ws/src $ cd ~/catkin_ws/src/ $ catkin_init_workspace $ catkin_make CMake Error: your CXX compiler: "CMAKE_CXX_COMPILER-NOTFOUND" was not found. Please set CMAKE_CXX_COMPILER to a valid compiler path or name.
catkin_makeでエラー発生。
g++ をインストール
$ sudo apt-get install g++
再度実行
$ catkin_make #### Running command: "make -j4 -l4" in "/home/ubuntu/catkin_ws/build"
きちんとビルドされました。
その他の実行は以下(長くなってきたため...)
$ source ~/catkin_ws/devel/setup.bash $ vim ~/.bashrc #source /opt/ros/indigo/setup.bash source ~/catkin_ws/devel/setup.bash $ echo $ROS_PACKAGE_PATH /home/ubuntu/catkin_ws/src:/opt/ros/indigo/share:/opt/ros/indigo/stacks $ cd ~/catkin_ws/src $ catkin_create_pkg ros_start rospy roscpp std_msgs $ cd ~/catkin_ws $ catkin_make $ source ~/catkin_ws/devel/setup.bash $ roscd ros_start $ cd ~/catkin_ws/src/ros_start $ mkdir scripts $ cd scripts
Pubkisherの作成
Subscriberの作成
パーミッションを変更
$ chmod 755 talker.py listener.py
ここでさらにもう1つターミナルを立ち上げて(計3つ)実行
$ roscore $ rosrun ros_start talker.py $ rosrun ros_start listener.py
以下のようにポーリングっぽいループ処理が走りました!
[INFO] [WallTime: 1487159069.768171] I heard hello. world 1487159069.77 [INFO] [WallTime: 1487159069.868088] I heard hello. world 1487159069.87 [INFO] [WallTime: 1487159069.968091] I heard hello. world 1487159069.97 [INFO] [WallTime: 1487159070.068077] I heard hello. world 1487159070.07 [INFO] [WallTime: 1487159070.168078] I heard hello. world 1487159070.17 [INFO] [WallTime: 1487159070.268178] I heard hello. world 1487159070.27
.....という形で一応、動作できたっぽいです。ココに到達するまですんなりうまくいかないところもあり、試行錯誤したのでとりあえずホッとしました。