ここを参考にインストールを進めると、最後のColconのビルドで失敗する。
github.com
エラーメッセージを検索すると、Foxyではビルドできないらしい。
githubmemory.com
Dashingを入れ直すことに。
$ mkdir -p ~/ros2_dashing/src $ cd ~/ros2_dashing $ wget https://raw.githubusercontent.com/ros2/ros2/dashing/ros2.repos $ vcs import src < ros2.repos $ sudo rosdep init $ rosdep update $ rosdep install --from-paths src --ignore-src --rosdistro dashing -y --skip-keys "console_bridge fastcdr fastrtps libopensplice67 libopensplice69 rti-connext-dds-5.3.1 urdfdom_headers" $ cd ~/ros2_dashing/ $ colcon build --symlink-install
Ros2 Androidのインストール
mkdir -p $HOME/ros2_android_ws/src cd $HOME/ros2_android_ws curl https://raw.githubusercontent.com/ros2-java/ros2_java/dashing/ros2_java_android.repos | vcs import src
~/.bashrc
export PYTHON3_EXEC="$( which python3 )" export PYTHON3_LIBRARY="$( ${PYTHON3_EXEC} -c 'import os.path; from distutils import sysconfig; print(os.path.realpath(os.path.join(sysconfig.get_config_var("LIBPL"), sysconfig.get_config_var("LDLIBRARY"))))' )" export PYTHON3_INCLUDE_DIR="$( ${PYTHON3_EXEC} -c 'from distutils import sysconfig; print(sysconfig.get_config_var("INCLUDEPY"))' )" export ANDROID_ABI=armeabi-v7a export ANDROID_NATIVE_API_LEVEL=android-21 export ANDROID_TOOLCHAIN_NAME=arm-linux-androideabi-clang
colcon build \ --packages-ignore cyclonedds rcl_logging_log4cxx rosidl_generator_py \ --packages-up-to rcljava \ --cmake-args \ -DPYTHON_EXECUTABLE=${PYTHON3_EXEC} \ -DPYTHON_LIBRARY=${PYTHON3_LIBRARY} \ -DPYTHON_INCLUDE_DIR=${PYTHON3_INCLUDE_DIR} \ -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake \ -DANDROID_FUNCTION_LEVEL_LINKING=OFF \ -DANDROID_NATIVE_API_LEVEL=${ANDROID_NATIVE_API_LEVEL} \ -DANDROID_TOOLCHAIN_NAME=${ANDROID_TOOLCHAIN_NAME} \ -DANDROID_STL=c++_shared \ -DANDROID_ABI=${ANDROID_ABI} \ -DANDROID_NDK=${ANDROID_NDK} \ -DTHIRDPARTY=ON \ -DCOMPILE_EXAMPLES=OFF \ -DCMAKE_FIND_ROOT_PATH="${PWD}/install"
インストールはできたけどサンプルアプリが動かない。
以下のレポジトリを試したらROS2でAndroidが動いた。
上記の環境のインストールは必要あったのか??
github.com
Youtubeでのチュートリアル
www.youtube.com
追記:上記のROS_2_ANDROIDはAndroid上でROS2を動かしておらず、ホストPC上のUDPサーバ(ROS2へのブローカーサーバとして機能する)にPOSTしているだけだった。
これでも動くならいいんだけど、一度通信が途絶えると再接続できないなど、実践で使えるレベルではなかった。やはりROS2をネイティブでAndroidで動かしたい。
ROS2のサンプルがどうしてもできなかった。
原因は、サンプルが依存しているamentのGradleプラグインが古く(2017 Novで最終更新が止まっている)、DashingのColconで動かないこと。
github.com
しょうがないのでAndroidではROS1を使い、ESP32ではROS2を使うことにした。ros1bridgeで両者を中継する。