这个repo可以帮助大家使用Github Actions来自动化编译microROS库。不再需要在本地搭建Docker编译环境!
更新: 目前CI已修改为从Github Actions的artifact处下载构建产物了!无需release权限了
repo
├── Core
├── Drivers
├── micro_ros_stm32cubemx_utils
└── Middlewares
其中,Core, Drivers, 和 Middlewares 都是由 CubeMX 自动化生成的。而 micro_ros_stm32cubemx_utils 则是microROS的核心库,我们之后编译的静态库就是基于这个的。
但是,克隆下来的仓库是根据我的需求配置的,不符合你的需求,需要按照下面的步骤修改哦~
由于 microROS 代码是区分 ROS2 的版本的,因此需要根据你的需求选择不同的版本。
仓库地址为:https://github.com/micro-ROS/micro_ros_stm32cubemx_utils
注意不要直接克隆,下载压缩包就可以了!
用你下载下来的版本替换本仓库中的 micro_ros_stm32cubemx_utils 文件夹。注意要保持文件夹名字相同!
这里需要根据你的芯片型号来修改 .ioc 文件。在修改和重新生成代码的过程中,需要注意一下几点:
microROS 需要使用 FreeRTOS 作为中间件,因此需要修改 .ioc 文件,将 FreeRTOS 中间件添加到 项目中。
microROS 需要大于 10kb 的Stack Size,因此需要修改 FreeRTOS 中的 Stack Size。
具体配置选项在 FreeRTOS -> Tasks and Queues 中,双击 defaultTask 进行修改。
- 初始化USART并启用其DMA请求功能。
- 创建并配置两个DMA通道,一个用于Tx(传输),一个用于Rx(接收)。
- 对于每个DMA通道,将优先级设置为非常高(DMA_PRIORITY_VERY_HIGH)。
- 对于Rx通道,将其配置为循环模式(DMA_CIRCULAR)。
- 开启串口的
UARTx global interrupt
在 Makefile 中找到 build the application 部分,在上方插入以下内容:
#######################################
# micro-ROS addons
#######################################
LDFLAGS += micro_ros_stm32cubemx_utils/microros_static_library/libmicroros/libmicroros.a
C_INCLUDES += -Imicro_ros_stm32cubemx_utils/microros_static_library/libmicroros/microros_include
# Add micro-ROS utils
C_SOURCES += micro_ros_stm32cubemx_utils/extra_sources/custom_memory_manager.c
C_SOURCES += micro_ros_stm32cubemx_utils/extra_sources/microros_allocators.c
C_SOURCES += micro_ros_stm32cubemx_utils/extra_sources/microros_time.c
# Set here the custom transport implementation
C_SOURCES += micro_ros_stm32cubemx_utils/extra_sources/microros_transports/dma_transport.c
print_cflags:
@echo $(CFLAGS)注意,@echo $(CFLAGS) 前面的是tab而不是空格,如果复制下来是空格,请手动修改为tab。
默认的编译脚本是需要人机交互的,我们将其去掉以实现自动编译。
打开 micro_ros_stm32cubemx_utils\microros_static_library\library_generation\library_generation.sh 文件,按照如下方式修改:
将:
if [ $RET_CODE = "0" ]; then
echo "Found CFLAGS:"
echo "-------------"
echo $RET_CFLAGS
echo "-------------"
read -p "Do you want to continue with them? (y/n)" -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]
then
echo "Continuing..."
else
echo "Aborting"
exit 0;
fi
else
echo "Please read README.md to update your Makefile"
exit 1;
fi修改为:
if [ $RET_CODE = "0" ]; then
echo "Found CFLAGS:"
echo "-------------"
echo $RET_CFLAGS
echo "-------------"
# read -p "Do you want to continue with them? (y/n)" -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]
then
echo "Continuing..."
else
echo "Aborting";
# exit 0;
fi
else
echo "Please read README.md to update your Makefile"
exit 1;
fi修改前后差异如下:
更新: 目前CI已修改为从Github Actions的artifact处下载构建产物了!无需release权限了
下面的内容不用看了~
Github 默认是不允许在Actions中读写仓库的,我们需要先配置一下权限,让它可以上传Release。










