ここを参考にインストールを進めると、最後の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で両者を中継する。