当前位置:   article > 正文

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

micro ros

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

下面是参考官方文档的具体过程
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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

这一步不用国内镜像速度很慢,成功率也很低,改镜像可以参考下面这篇博文

https://blog.csdn.net/weixin_44999343/article/details/121083488
  • 1

当然使用rosdepc更快捷方便,但是新的ROS2版本可能会有问题。

2生成固件

2.1、不使用git加速生成固件

ros2 run micro_ros_setup create_firmware_ws.sh generate_lib
  • 1

这一步需要重github下载大量的源码,不使用加速镜像速度很慢,失败率也很高。失败后下次生成会提示firmware已经存在,要删除掉这个文件夹,这时候可以追踪到对应的sh脚本文件注释掉文件夹检查和mkdir相关的命令,注意git失败后空文件要删除掉,否则会被跳过,重复命令直到成功。

如果执行命令后立即发生错误:[ros2run]: process exited with failure 7,需要更改Windown主机的host文件,例如增加下面内容

#注意IP地址可能会变化
199.232.28.133 raw.githubusercontent.com
  • 1
  • 2

2.2、使用git加速生成固件
和前面2.1一样执行

ros2 run micro_ros_setup create_firmware_ws.sh generate_lib
  • 1

不过在此之前先修改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 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

修改设置后可以正常生成固件。

3、创建toolchain.cmake和colcon.meta

touch my_custom_toolchain.cmake
touch my_custom_colcon.meta
  • 1
  • 2

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

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"
            ]
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53

4、生成静态库

ros2 run micro_ros_setup build_firmware.sh $(pwd)/my_custom_toolchain.cmake $(pwd)/my_custom_colcon.meta
  • 1

执行上面的命令后在下面的目录得到库文件和头文件。

firmware/build/libmicroros.a and you will have all the required headers for your application in firmware/build/include
  • 1

编译好的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
  • 1

步骤6可以可到M4的静态库
在这里插入图片描述

按照步骤文档步骤成功率非常低,主要是网络原因,应该是要解决docker内部的科学上网问题才能成功。
可能出现的报错如下:

[ros2run]: process exited with failure 7
  • 1

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/661261
推荐阅读
相关标签
  

闽ICP备14008679号