LoginSignup
4
2

More than 5 years have passed since last update.

naoqi仮想マシンを利用してROSをクロスコンパイルする

Posted at

皆様,こんにちは
以前このような記事を投稿していた者です.
なんとかあの方法で動かそうと頑張ってみたのですが・・・
自分の環境は汚くなるし32bitのライブラリにリンクさせたりがあまりにも手間がすごくてついに心が折れてしまいました・・・
そこでついにnaoqiの仮想マシンを用いてROSをビルドする方法を試してみました.
これでWindowsマシンでも同じ手順で開発できますね!!
naoqiの仮想マシンはnaoqi SDKの配布場所と同じところで配布されています.
VirtualBox向けのイメージが配布されていますのでダウンロードし,VirtualBoxにインポートしてください.
基本的な考え方はこの情報を参考にしました.

依存ライブラリのビルド

僕がインストールしたライブラリの一覧は以下の通りです.
バージョン等は先ほどの情報を参考にしていただければと思います.
expat-2.1.0 apache-log4cxx-0.10.0 tinyxml apr-1.5.2 lz4-r131 urdfdom apr-util-1.5.4 netifaces-0.10.4 bzip2-1.0.6 urdfdom_headers poco-1.6.1 urdfdom_headers-0.3.0 yaml-cpp-release-0.3.0 console_bridge zlib-1.2.11 curl-7.43.0 sip-4.18.1
参照した情報ではインストールディレクトリは/home/nao/ros_toolchain_installになっていますが,僕は/home/nao/ros_naoqi_ws/ros_toolchain_installで設定しました.

ROS関係のモジュールのビルド

まずはrosのソースコードのダウンロードから始めましょうros_naoqi_ws内部で以下の処理を実行してください.

sudo pip install -U catkin_pkg rosdep rosinstall_generator wstool rosinstall empy
rosinstall_generator nao_robot --rosdistro indigo --deps > nao_ros_indigo.rosinstall
wstool init src nao_ros_indigo.rosinstall -j8
cd src
rm -rf diagnostics/self_test diagnostics/test_diagnostic_aggregator

以下のコマンドでROS関連のモジュールをビルドします.

src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release -DCATKIN_ENABLE_TESTING=OFF -DCMAKE_INSTALL_PREFIX=/home/nao/ros_naoqi_ws/ros_toolchain_install -j4

ビルド結果の転送

とりあえず/home/nao/ros_naoqi_ws以下のファイルをすべて転送しました.

scp -r /home/nao/ros/naoqi_ws nao@(ROBOT_IP):/home/nao/

ROBOT_IPの部分にはロボットのIPアドレスが代入されます.

NAO内部での環境変数の設定

.bashrcに以下の内容を追記

/home/nao/.bashrc
source /home/nao/ros_naoqi_ws/devel_isolated/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 ROS_HOSTNAME=localhost

上記の手順で環境変数を設定したらいよいよroscoreを走らせます.

roscoreを走らせてみた

Screenshot from 2017-07-14 20_33_58.png
やったぜ!!roscoreが走った!!
次回は今回ビルドしたnaoqi_driver等のモジュールを利用してnaoをコントロールするのにチャレンジしてみたいと思います.

ビルドの際に頻発するエラー

僕の屍を超えてくれるロボカッパー(いればいいなあ・・)のために僕が作った環境で頻発したエラーを残しておきます.

boost関係のエラー

<<内容>>

error: 'boost::noncopyable_::noncopyable::~noncopyable()' declared with non-public access cannot be defaulted in the class body

<<原因>>
C++11系の実装になっているがnaoqiの仮想マシンではどうもコンパイルできない模様
<<解決策>>
該当するソースコードに以下のdefine文を追加
こちらの情報を参考にしました.

#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS

ros/ros.hとかに追加しておくとほぼすべてのモジュールで有効になりそうな気がするので楽でいいかもしれません.

C++11に関するエラー

<<内容>>

cc1plus: error: unrecognized command line option "-std=c++11"

<<原因>>
naoqiの仮想マシンにインストールされているコンパイラではC++をコンパイルする際にstd=c++11オプションを使えないようです.
<<解決策>>
該当する箇所ではstd=c++0xかstd=gnu++0xあたりを使用するとよさそうです.
このオプションはCMAKE_CXX_FLAGS変数で設定できます.

ライブラリパスに関するエラー

<<内容>>
ほとんど大丈夫なのですが,ごくまれにあるライブラリが見つからないというエラーが発生
<<原因>>
正常にライブラリのインストールができていない,あるいはパスをうまく通せていない
<<解決策>>
ライブラリの再インストールを試してみてそれでもだめなら手動でパスを設定しました.
CMAKE_TOOLCHAIN_FILE等を使用して自分で設定ファイルを書きました.
簡易な例を下に記しておきます.

additional_library.cmake
set(LIBRARY_NAME_INCLUDE_DIR /path/to/include/dir)
set(LIBRARY_NAME_LIBRARY /path/to/library)

LIBRARY_NAMEにはライブラリの名称が入ります.
さらに,完全に手動で変数を設定したいので該当するライブラリのfind_package文をコメントアウトします.
ビルドする際には以下のオプションを追加してください

-DCMAKE_TOOLCHAIN_FILE=/path/to/additional_library.cmake

4
2
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
4
2