こんにちは、僕はロボカップSPLリーグにおいてROSベースのロボカップ用ソフトウェアを開発しています。
普段はWifiを経由して分散制御系を作っているのですが、SPLリーグにおいてはロボットに搭載されている計算機以外を使用することは禁止されています。
そこで今回はROSをnao向けにクロスコンパイルし、roscoreをnaoの内部で動作させる手順に関して簡単にまとめたいと思います。
この記事では環境構築からビルドまでをまとめます。
クロスコンパイル
ROSをnao向けにクロスコンパイルする方法はROSのWikiにまとめられています。
http://wiki.ros.org/action/show/nao/Tutorials/Installation?action=show&redirect=nao%2FInstallation
僕は特にこのページを参考にしました。
http://wiki.ros.org/nao/Installation/compileWithToolchain
naoqi-sdkのダウンロード
まずはc++用のnaoのsdkをダウンロードします。
1.ソフトバンクロボティクスのアカウントを作成、ログインしcommunityのページを開いた上でResourcesの中からSoftwareを選択
2.C++ naoqi-sdkの項目を見つけたらview-archivesをクリック
3.Cross Toolchain 2.1.0 Linux 32をダウンロード
依存ライブラリのダウンロード
参考ページによると
http://robotpkg.openrobots.org/packages/bsd/OpenNao-2.1.0.19-i386/All/console-bridge-0.2.7.tgz
http://robotpkg.openrobots.org/packages/bsd/OpenNao-2.1.0.19-i386/All/log4cxx-0.10.0~doc.tgz
http://robotpkg.openrobots.org/packages/bsd/OpenNao-2.1.0.19-i386/All/lz4-121r1.tgz
でダウンロードできるとあるのですが、少しだけリンクが変わってしまっているようです。
現在のはこちらからダウンロードできます。
http://robotpkg.openrobots.org/packages/bsd/OpenNao-2.1.0.19-i386/pub/console-bridge-0.2.7.tgz
http://robotpkg.openrobots.org/packages/bsd/OpenNao-2.1.0.19-i386/pub/log4cxx-0.10.0~doc.tgz
http://robotpkg.openrobots.org/packages/bsd/OpenNao-2.1.0.19-i386/pub/lz4-121r1.tgz
ワークスペースの作成
ワークスペースを作成します、頑張ればcatkin_wsでもできないことは無いような気はしますが今回はとりあえず作って見ました。
cd
mkdir ros_naoqi_ws
cd ros_naoqi_ws
cp ~/Downloads/linux32-atom-pub.zip .
unzip linux32-atom-pub.zip
mkdir deps
cd deps
cp ~/Downloads/console-bridge-0.2.7.tgz .
cp ~/Downloads/log4cxx-0.10.0~doc.tgz .
cp ~/Downloads/lz4-121r1.tgz .
ビルド
touch Makefile
エディタでMakefileを開き以下の内容を書き込み
#naoqi-sdkのパスを記述
export SDK_PATH=/home/nao/ros_naoqi_ws/linux32-atom-pub
make:
src/catkin/bin/catkin_make_isolated --merge -DCMAKE_CXX_FLAGS=-wall --cmake-args -DCMAKE_TOOLCHAIN_FILE=$(SDK_PATH)/cross-config.cmake
init:
##依存ライブラリを展開
tar -xvf deps/console-bridge-0.2.7.tgz -C $(SDK_PATH)/libnaoqi-sysroot/
tar -xvf deps/console-bridge-0.2.7.tgz -C $(SDK_PATH)/libnaoqi-sysroot/
tar -xvf deps/log4cxx-0.10.0~doc.tgz -C $(SDK_PATH)/libnaoqi-sysroot/
tar -xvf deps/lz4-121r1.tgz -C $(SDK_PATH)/libnaoqi-sysroot/
find $(SDK_PATH)/libnaoqi-sysroot/share/ -type f -print0 | xargs -0 sed -i 's,/opt/openrobots/,'"$(SDK_PATH)"'/libnaoqi-sysroot/,'
cp -fr $(SDK_PATH)/bzip2/* $(SDK_PATH)/libnaoqi-sysroot/
rm -fr $(SDK_PATH)/libnaoqi-sysroot/share/cmake/boost*
rm -fr $(SDK_PATH)/libnaoqi-sysroot/share/cmake/bzip2*
rm -fr $(SDK_PATH)/libnaoqi-sysroot/share/cmake/opencv*
cp -fr /usr/share/cmake-2.8/Modules/ $(SDK_PATH)/libnaoqi-sysroot/share/cmake/
sed -i 's,list(INSERT CMAKE_FIND_ROOT_PATH 0 "${_TC_DIR}"),list(INSERT CMAKE_FIND_ROOT_PATH 0 "${ALDE_CTC_CROSS}" "${ALDE_CTC_SYSROOT}" "${ALDE_CTC_ROOTDIR}/libnaoqi-sysroot"),' $(SDK_PATH)/cross-config.cmake
sed -i '$ d' $(SDK_PATH)/cross-config.cmake
echo set\(CMAKE_CXX_FLAGS \"$\{CMAKE_CXX_FLAGS\} -DOE_CROSS_BUILD -Wl,--allow-shlib-undefined\" CACHE STRING \"\" FORCE\) >> $(SDK_PATH)/cross-config.cmake
generate:
rosinstall_generator roscpp rospy roscore --rosdistro indigo --deps --upstream > nao_ros_indigo.rosinstall
download:
wstool init src nao_ros_indigo.rosinstall
clean:
rm -rf build_isolated
rm -rf devel_isolated
rm -rf src
make init
make generate
make download
make
以上の手順を実行するとビルドが始まります