赞
踩
测试日期: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.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
修改设置后可以正常生成固件。
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" ] } } }
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
micro_ros移植到STM32F405RG ,micro_ros STM32裸机
micro_ros移植到STM32F405RG,STM32CubeMX+STM32CubeIDE开发环境+freertos
使用 docker镜像生成Cortex-M4静态库官方参考地址:
https://github.com/micro-ROS/micro_ros_stm32cubemx_utils
步骤6可以可到M4的静态库
按照步骤文档步骤成功率非常低,主要是网络原因,应该是要解决docker内部的科学上网问题才能成功。
可能出现的报错如下:
[ros2run]: process exited with failure 7
参考创客制造的文档,使用他们的镜像可以完成静态库生成。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。