micro_ros 生成静态库总结,生成Cortex-M架构的静态库

一、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

参考创客制造的文档,使用他们的镜像可以完成静态库生成。
M4静态库生成参考

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值