【備忘録】 micro-ROS の micro_ros_agent と micro-ROS static library の作り方 [ロボット]
micro-ROS の micro_ros_agent と micro-ROS の static library を作ってみたので、その手順を忘れないように記録として残しておきます。基本的には、次のサイトの手順通りです。
環境は、Ubuntu 22.04 LTS で ROS2 のバージョンは humble です。
Teensy with Arduino
Creating custom static micro-ROS library
■ micro_ros_setup の設定
micro_ros_agent と micro-ROS static library をビルドするための micro_ros_setup の環境を設定します。
■ micro_ros_agent のビルド
micro_ros_agent のビルド環境をダウンロードし、ビルドします。
私の環境では、次のエラー出てビルドが失敗してしまいました。
これは次のファイルの47行目と139行目を次のように変更したらビルドが通りました。
$HOME/microros_ws/src/uros/micro-ROS-Agent/micro_ros_agent/src/agent/graph_manager/graph_typesupport.cpp
micro_ros_agent は次のコマンドで起動することができます。
■ micro-ROS static library の環境準備
micro-ROS static library の開発環境をダウンロードします。
ビルドするための設定ファイルを2つ作成します。
それぞれのファイルの設定例を示します。今回はSPRESENSEを前提とした設定ファイルです。
my_custom_colcon.meta
my_custom_toolchain.cmake
$TOOLCHAIN_PREFIX は、".bashrc"の中で定義されています。
.bashrc
micro-ROS static library をビルドします。
ビルドに成功すると、次の場所に static library と必要な include ファイルが生成されます。
firmware/build/libmicroros.a
firmware/include
これでひととおり micro-ROS で開発する環境を整えることができました!
環境は、Ubuntu 22.04 LTS で ROS2 のバージョンは humble です。
Teensy with Arduino
Creating custom static micro-ROS library
■ micro_ros_setup の設定
micro_ros_agent と micro-ROS static library をビルドするための micro_ros_setup の環境を設定します。
# Source the ROS 2 installation source /opt/ros/$ROS_DISTRO/setup.bash # Create a workspace and download the micro-ROS tools mkdir microros_ws cd microros_ws git clone -b $ROS_DISTRO https://github.com/micro-ROS/micro_ros_setup.git src/micro_ros_setup # Update dependencies using rosdep sudo apt update && rosdep update rosdep install --from-paths src --ignore-src -y # Install pip if you need sudo apt-get install python3-pip # Build micro-ROS tools and source them colcon build source install/local_setup.bash
■ micro_ros_agent のビルド
micro_ros_agent のビルド環境をダウンロードし、ビルドします。
# Download micro-ROS agent packages ros2 run micro_ros_setup create_agent_ws.sh # Build micro_ros_agent ros2 run micro_ros_setup build_agent.sh source install/local_setup.bash
私の環境では、次のエラー出てビルドが失敗してしまいました。
$HOME/microros_ws/src/uros/micro-ROS-Agent/micro_ros_agent/src/agent/graph_manager/graph_typesupport.cpp:47:54: error: cannot bind non-const lvalue reference of type ‘bool&’ to a value of type ‘char’ 47 | m_typeSize = 4 + callbacks_->max_serialized_size(full_bounded); | ^~~~~~~~~~~~ $HOME/microros_ws/src/uros/micro-ROS-Agent/micro_ros_agent/src/agent/graph_manager/graph_typesupport.cpp:139:54: error: cannot bind non-const lvalue reference of type ‘bool&’ to a value of type ‘char’ 139 | m_typeSize = 4 + callbacks_->max_serialized_size(full_bounded); |
これは次のファイルの47行目と139行目を次のように変更したらビルドが通りました。
$HOME/microros_ws/src/uros/micro-ROS-Agent/micro_ros_agent/src/agent/graph_manager/graph_typesupport.cpp
46 // char full_bounded; 47 bool full_bounded; .... 139 // char full_bounded; 140 bool full_bounded; ....
micro_ros_agent は次のコマンドで起動することができます。
# run micro_ros_agent by a serial communication ros2 run micro_ros_agent micro_ros_agent serial --dev /dev/ttyUSB0
■ micro-ROS static library の環境準備
micro-ROS static library の開発環境をダウンロードします。
# Download micro-ROS firmware packages ros2 run micro_ros_setup create_firmware_ws.sh generate_lib
ビルドするための設定ファイルを2つ作成します。
touch my_custom_toolchain.cmake touch my_custom_colcon.meta
それぞれのファイルの設定例を示します。今回はSPRESENSEを前提とした設定ファイルです。
my_custom_colcon.meta
{ "names": { "tracetools": { "cmake-args": [ "-DTRACETOOLS_DISABLED=ON", "-DTRACETOOLS_STATUS_CHECKING_TOOL=OFF" ] }, "rosidl_typesupport": { "cmake-args": [ "-DROSIDL_TYPESUPPORT_SINGLE_TYPESUPPORT=ON" ] }, "rcl": { "cmake-args": [ "-DBUILD_TESTING=OFF", "-DRCL_COMMAND_LINE_ENABLED=OFF", "-DRCL_LOGGING_ENABLED=OFF" ] }, "rcutils": { "cmake-args": [ "-DENABLE_TESTING=OFF", "-DRCUTILS_NO_FILESYSTEM=OFF", "-DRCUTILS_NO_THREAD_SUPPORT=OFF", "-DRCUTILS_NO_64_ATOMIC=ON", "-DRCUTILS_AVOID_DYNAMIC_ALLOCATION=ON" ] }, "microxrcedds_client": { "cmake-args": [ "-DUCLIENT_PIC=OFF", "-DUCLIENT_PROFILE_UDP=OFF", "-DUCLIENT_PROFILE_TCP=OFF", "-DUCLIENT_PROFILE_DISCOVERY=OFF", "-DUCLIENT_PROFILE_SERIAL=OFF", "-UCLIENT_PROFILE_STREAM_FRAMING=ON", "-DUCLIENT_PROFILE_CUSTOM_TRANSPORT=ON" ] }, "rmw_microxrcedds": { "cmake-args": [ "-DRMW_UXRCE_MAX_NODES=1", "-DRMW_UXRCE_MAX_PUBLISHERS=5", "-DRMW_UXRCE_MAX_SUBSCRIPTIONS=5", "-DRMW_UXRCE_MAX_SERVICES=1", "-DRMW_UXRCE_MAX_CLIENTS=1", "-DRMW_UXRCE_MAX_HISTORY=4", "-DRMW_UXRCE_TRANSPORT=custom" ] } } }
my_custom_toolchain.cmake
set(CMAKE_SYSTEM_NAME Generic) set(CMAKE_CROSSCOMPILING 1) set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) # SET HERE THE PATH TO YOUR C99 AND C++ COMPILERS set(CMAKE_C_COMPILER $ENV{TOOLCHAIN_PREFIX}gcc) set(CMAKE_CXX_COMPILER $ENV{TOOLCHAIN_PREFIX}g++) set(NUTTX_INCLUDE_DIR "$ENV{HOME}/.arduino15/packages/SPRESENSE/tools\ /spresense-sdk/3.0.1/spresense/release/nuttx/include") set(ARDUINO_INCLUDE_DIR "$ENV{HOME}/.arduino15/packages/SPRESENSE/hardware/\ spresense/3.0.1/cores/spresense") set(CMAKE_C_COMPILER_WORKS 1 CACHE INTERNAL "") set(CMAKE_CXX_COMPILER_WORKS 1 CACHE INTERNAL "") # SET HERE YOUR BUILDING FLAGS set(FLAGS "-c -fno-builtin -mabi=aapcs -Wall -fno-strict-aliasing -Os \ -fno-strength-reduce -fomit-frame-pointer -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 \ -mfloat-abi=hard -mthumb -nostdlib -pipe -ggdb -gdwarf-3 -ffunction-sections \ -fdata-sections -DCONFIG_WCHAR_BUILTIN -DCONFIG_HAVE_DOUBLE -D__NuttX__ \ -D'RCUTILS_LOG_MIN_SEVERITY=RCUTILS_LOG_MIN_SEVERITY_NONE\ '" CACHE STRING "" FORCE) set(CMAKE_C_FLAGS_INIT "-w -MMD -std=gnu11 ${FLAGS} -DCLOCK_MONOTONIC=0 \ -D'__attribute__(x)='" CACHE STRING "" FORCE) set(CMAKE_CXX_FLAGS_INIT "-w -MMD -std=gnu++11 ${FLAGS} -fno-exceptions \ -fno-rtti -fpermissive -DCLOCK_MONOTONIC=0 \ -D'__attribute__(x)='" CACHE STRING "" FORCE) include_directories(BEFORE SYSTEM ${NUTTX_INCLUDE_DIR} ${ARDUINO_CINLUDE_DIR}) set(__BIG_ENDIAN__ 0)
$TOOLCHAIN_PREFIX は、".bashrc"の中で定義されています。
.bashrc
export TOOLCHAIN_PREFIX='$HOME/.arduino15/packages/ SPRESENSE/tools/gcc-arm-none-eabi/9.2.1/linux/bin/arm-none-eabi-'
micro-ROS static library をビルドします。
# Build micro-ROS static library ros2 run micro_ros_setup build_firmware.sh $(pwd)/my_custom_toolchain.cmake $(pwd)/my_custom_colcon.meta
ビルドに成功すると、次の場所に static library と必要な include ファイルが生成されます。
firmware/build/libmicroros.a
firmware/include
これでひととおり micro-ROS で開発する環境を整えることができました!
ロボットプログラミングROS2の実装・実践 -実用ロボットの開発- (設計技術シリーズ96)
- 作者: 内木場 文男
- 出版社/メーカー: 科学情報出版株式会社
- 発売日: 2021/07/21
- メディア: 単行本
ROS2の基礎とJetBotの制御: ROS2 Foxyを使ったプログラミング
- 作者: 大西和則
- 出版社/メーカー:
- 発売日: 2021/06/19
- メディア: Kindle版