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 で開発する環境を整えることができました!#59120;
環境は、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 で開発する環境を整えることができました!#59120;
ロボットプログラミングROS2の実装・実践 -実用ロボットの開発- (設計技術シリーズ96)
- 作者: 内木場 文男
- 出版社/メーカー: 科学情報出版株式会社
- 発売日: 2021/07/21
- メディア: 単行本
ROS2の基礎とJetBotの制御: ROS2 Foxyを使ったプログラミング
- 作者: 大西和則
- 出版社/メーカー:
- 発売日: 2021/06/19
- メディア: Kindle版