ROS
Robot
NAOqi
NAO

仮想マシンでビルドしたROSでnaoを動かす(pythonドライバー編)

More than 1 year has passed since last update.

こんにちは、前回はROSをクロスコンパイルし、rosocoreを走らせるところまで行きました。
今回は簡単に使えそうなpythonドライバーでnaoを動かして見たいと思います。
以下のようなスクリプトを書いて環境設定を自動化しました。

setup.bash
source /home/nao/ros_naoqi_ws/ros_toolchain_install/setup.bash
python /home/nao/ros_naoqi_ws/ros_toolchain_install/_setup_util.py
export PATH=$PATH:/home/nao/ros_naoqi_ws/bin
export NAO_IP=127.0.0.1
export ROSCORE_IP=127.0.0.1
export LD_LIBRARY_PATH=/home/nao/ros_naoqi_ws/external/poco-1.6.1/lib/Linux/i686:/home/nao/ros_naoqi_ws/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/home/nao/ros_naoqi_ws/external/lz4-r131/lib:$LD_LIBRARY_PATH

実際に動かしてみた

以下のコマンドでrosのnaoqiドライバーモジュールを起動します。

roslaunch nao_bringup nao_full_py.launch

Screenshot from 2017-07-18 14:31:03.png
おおおお!起動しました!
とりあえずどんなtopicがあるのか見てみます。

rostopic list

Screenshot from 2017-07-18 14:35:06.png

とりあえず/imuのトピックの情報でも見てみます

rostopic echo /imu

Screenshot from 2017-07-18 14:35:49.png
ちゃんと動いてるっぽいです!!
次回があればC++のドライバーでどうなるかも見てみたいですね、また他の関連モジュール(move_base等)に関してもクロスコンパイルを試みているので結果が出ればまた書き込みたいと思います。

今回わかった事、注意点

apt-getの偉大さ

rosの利点の一つにapt-getを使った簡単な環境構築があると思います。
apt-get一発でほしいパッケージを探せるシステムがあれば今回のような苦労はいりません・・・
naoqiはgentooベースなのですがemergeはnao実機では消されていて大変苦労しました。
apt-get作ってくれた方ありがとうございます。

naoのスペック不足の可能性(ネットワーク、演算性能等に関して)

今回はnaoqiのドライバーを実行してみたところsshでnaoを操作する事すら困難になるほど操作が重鈍になりました。
また、naoのCPUはZ530はであり1コアしかなくハイパースレッディングを使っていたとしてもプロセス、スレッドを多数立ち上げるROSのような仕組みとは相性が良くないのかもしれません。

naoの容量不足

前回ros等を走らせるために必要なファイルを転送したわけですが、ここで一度naoqi OSを入れた直後のnaoの中のパーティション構成を見てみましょう。
Screenshot from 2017-07-14 17:41:12.png
/dev/mmcblk0p1くらいしかある程度まとめて容量があるパーティションはありません。パスを通すのを面倒臭がってルート領域に何か入れるのはやめたほうが良さそうです。
また、今回作成したプログラムをすべて入れた状態でdf-Hしてみた結果は以下の通りです。
Screenshot from 2017-07-18 15:02:13.png
もう36%も使ってしまっています・・・・
今回はとりあえず全部転送してしまいましたが今後の事を考えればビルド結果だけ(というか必要なファイルだけ)転送するようにスクリプトを組み直す必要がありますね。

設計思想の不一致?

nao本体にはパッケージ管理ツールが含まれていない、pythonは動作するがC++は本体内部でコンパイルできない、内部ディスクの空き容量が非常に少ないなどnaoの内部で開発のしにくい環境になっているように感じます。
そしてnaoqi SDK自体が分散制御系をサポートしているところから考えてそもそも分散制御系を前提にしている節があると筆者は考えます。
そのためあまり多くの内部容量がなかったりコア数が少ない設計になっているのではと思います。
ROSは確かに素晴らしいシステムだと感じますがそれはあくまで十分なハードウェアリソース(処理速度、通信速度等)が確保できる状況での話であり、この方法はその意味ではあまりいい方法ではないのかもしれません。
しかし、SPLリーグではnaoの他に計算機を用いることは禁止されているため、今後も解決の道を模索したいと思います。