一、WSL2-Ubuntu20.04环境生成mcro_ros 静态库
测试日期:2023年11月26日
ros2版本:Galactic
生成环境:wsl2 -Ubuntu20.04
官方参考链接:点击
相关仓库地址;
#micro_ros_setup工具仓库地址:
https://github.com/micro-ROS/micro_ros_setup.git
下面是参考官方文档的具体过程
1、安装micro_ros_setup 工具
source /opt/ros/$ROS_DISTRO/setup.bash
mkdir uros_ws && cd uros_ws
git clone -b iron https://github.com/micro-ROS/micro_ros_setup.git src/micro_ros_setup
rosdep update && rosdep install --from-paths src --ignore-src -y
colcon build
source install/local_setup.bash
这一步不用国内镜像速度很慢,成功率也很低,改镜像可以参考下面这篇博文
https://blog.csdn.net/weixin_44999343/article/details/121083488
当然使用rosdepc更快捷方便,但是新的ROS2版本可能会有问题。
2生成固件
2.1、不使用git加速生成固件
ros2 run micro_ros_setup create_firmware_ws.sh generate_lib
这一步需要重github下载大量的源码,不使用加速镜像速度很慢,失败率也很高。失败后下次生成会提示firmware已经存在,要删除掉这个文件夹,这时候可以追踪到对应的sh脚本文件注释掉文件夹检查和mkdir相关的命令,注意git失败后空文件要删除掉,否则会被跳过,重复命令直到成功。
如果执行命令后立即发生错误:[ros2run]: process exited with failure 7,需要更改Windown主机的host文件,例如增加下面内容
#注意IP地址可能会变化
199.232.28.133 raw.githubusercontent.com
2.2、使用git加速生成固件
和前面2.1一样执行
ros2 run micro_ros_setup create_firmware_ws.sh generate_lib
不过在此之前先修改git的全局设置替换url中的github.com ,参考自知乎的这篇文章,下面贴出用到的部分
# 方法二:配置git自动替换
$ git config --global url."https://gh.api.99988866.xyz/https://github.com".insteadOf https://github.com
# 测试
$ git clone https://github.com/kubernetes/kubernetes.git
# 查看git配置信息
$ git config --global --list
# 取消设置
$ git config --global --unset url.https://gh.api.99988866.xyz/https://github.com.insteadof
修改设置后可以正常生成固件。
3、创建toolchain.cmake和colcon.meta
touch my_custom_toolchain.cmake
touch my_custom_colcon.meta
toolchain.cmake用于配置编译工具,colcon.meta用于配置micro_ros库,官方给出了Cortex-M3的示例,下面是在官方的基础上修改用于Cortex-M4的内容,
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 arm-none-eabi-gcc)
set(CMAKE_CXX_COMPILER arm-none-eabi-g++)
set(CMAKE_C_COMPILER_WORKS 1 CACHE INTERNAL "")
set(CMAKE_CXX_COMPILER_WORKS 1 CACHE INTERNAL "")
# SET HERE YOUR BUILDING FLAGS
set(FLAGS "-O2 -ffunction-sections -fdata-sections -fno-exceptions -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -nostdlib -mthumb --param max-inline-insns-single=500 -DF_CPU=84000000L -D'RCUTILS_LOG_MIN_SEVERITY=RCUTILS_LOG_MIN_SEVERITY_NONE'" CACHE STRING "" FORCE)
#-mcpu=cortex-m3 改成 -mcpu=cortex-m4
# 加入 mfpu=fpv4-sp-d16 -mfloat-abi=hard 支持硬件浮点编译
# -DF_CPU=84000000L 说明 -D 选项 添加宏定义,相当于在全局增加了 #define F_CPU 84000000L 用不到可以去掉。
set(CMAKE_C_FLAGS_INIT "-std=c11 ${FLAGS} -DCLOCK_MONOTONIC=0 -D'__attribute__(x)='" CACHE STRING "" FORCE)
set(CMAKE_CXX_FLAGS_INIT "-std=c++11 ${FLAGS} -fno-rtti -DCLOCK_MONOTONIC=0 -D'__attribute__(x)='" CACHE STRING "" FORCE)
set(__BIG_ENDIAN__ 0)
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=ON",
"-DRCUTILS_NO_THREAD_SUPPORT=ON",
"-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=10",
"-DRMW_UXRCE_MAX_SUBSCRIPTIONS=5",
"-DRMW_UXRCE_MAX_SERVICES=1",
"-DRMW_UXRCE_MAX_CLIENTS=1",
"-DRMW_UXRCE_MAX_HISTORY=4",
"-DRMW_UXRCE_TRANSPORT=custom"
]
}
}
}
4、生成静态库
ros2 run micro_ros_setup build_firmware.sh $(pwd)/my_custom_toolchain.cmake $(pwd)/my_custom_colcon.meta
执行上面的命令后在下面的目录得到库文件和头文件。
firmware/build/libmicroros.a and you will have all the required headers for your application in firmware/build/include
编译好的mirco_ros M4 M3 静态库下载地址
https://download.csdn.net/download/dialufei/88576718
5、使用参考
micro_ros移植到STM32F405RG ,micro_ros STM32裸机
micro_ros移植到STM32F405RG,STM32CubeMX+STM32CubeIDE开发环境+freertos
二、使用 docker镜像生成mirco_ros静态库
使用 docker镜像生成Cortex-M4静态库官方参考地址:
https://github.com/micro-ROS/micro_ros_stm32cubemx_utils
步骤6可以可到M4的静态库
按照步骤文档步骤成功率非常低,主要是网络原因,应该是要解决docker内部的科学上网问题才能成功。
可能出现的报错如下:
[ros2run]: process exited with failure 7
参考创客制造的文档,使用他们的镜像可以完成静态库生成。