【分享】STM32上运行ROS2(MicroROS)
-
- 用PIO新建工程,开发板选择 stm32f407zg 或其他STM32开发板
- 开发框架使用Arduino
- 添加 lib_deps 依赖
完成配置如下:
[env:black_f407zg] platform = ststm32 board = black_f407zg framework = arduino upload_protocol = cmsis-dap lib_deps = https://gitee.com/ohhuo/micro_ros_platformio.git
主函数代码:
#include <Arduino.h> #include <micro_ros_platformio.h> #include <rcl/rcl.h> #include <rclc/rclc.h> #include <rclc/executor.h> rclc_executor_t executor; rclc_support_t support; rcl_allocator_t allocator; rcl_node_t node; void setup() { Serial.begin(115200); // 设置通过串口进行MicroROS通信 set_microros_serial_transports(Serial); // 延时时一段时间,等待设置完成 delay(2000); // 初始化内存分配器 allocator = rcl_get_default_allocator(); // 创建初始化选项 rclc_support_init(&support, 0, NULL, &allocator); // 创建节点 hello_microros rclc_node_init_default(&node, "hello_microros_stm32", "", &support); // 创建执行器 rclc_executor_init(&executor, &support.context, 1, &allocator); } void loop() { delay(100); // 循环处理数据 rclc_executor_spin_some(&executor, RCL_MS_TO_NS(100)); }
编译下载即可。
测试 结果如下 :
sudo docker run -it --rm -v /dev:/dev -v /dev/shm:/dev/shm --privileged --net=host microros/micro-ros-agent:$ROS_DISTRO serial --dev /dev/ttyUSB0 -v6 [sudo] fishros 的密码: [1698816645.808775] info | TermiosAgentLinux.cpp | init | running... | fd: 3 [1698816645.808882] info | Root.cpp | set_verbose_level | logger setup | verbose_level: 6 0000: 81 00 00 00 04 01 0B 00 00 00 58 52 43 45 01 00 01 0F 00 [1698816650.428791] debug | SerialAgentLinux.cpp | recv_message | [==>> SER <<==] | client_key: 0x7E54E1E4, len: 52, data: 0000: 81 80 00 00 01 07 2C 00 00 0A 00 01 01 03 00 00 1D 00 00 00 00 01 F9 23 15 00 00 00 68 65 6C 6C 0020: 6F 5F 6D 69 63 72 6F 72 6F 73 5F 73 74 6D 33 32 00 00 00 00 [1698816650.440143] info | ProxyClient.cpp | create_participant | participant created | client_key: 0x7E54E1E4, participant_id: 0x000(1) [1698816650.440353] debug | SerialAgentLinux.cpp | send_message | [** <<SER>> **] | client_key: 0x7E54E1E4, len: 14, data: 0000: 81 80 00 00 05 01 06 00 00 0A 00 01 00 00 [1698816650.440376] debug | SerialAgentLinux.cpp | send_message | [** <<SER>> **] | client_key: 0x7E54E1E4, len: 13, data: 0000: 81 00 00 00 0A 01 05 00 01 00 00 00 80 [1698816650.446161] debug | SerialAgentLinux.cpp | recv_message | [==>> SER <<==] | client_key: 0x7E54E1E4, len: 13, data: 0000: 81 00 00 00 0A 01 05 00 01 00 00 00 80 $ ros2 node list /hello_microros_stm32
有很多同学可能会问,用Arduino 开发STM32,是不是就不能使用比较核心的 STM32 API了,不是这样的,stm32的arduino库是基于 HAL库的二次封装,比如你可以在 main.cpp 中包含 #include <stm32f4xx_hal_gpio.h> 然后使 HAL_GPIO_Init(); 带来 pinMode(); 设置,当然有更简单的方法可以使用,为什么要舍近求远呢。
-
@小鱼
您知道这怎么解决吗 -
@2784278078 换成micros仓库官方地址:https://github.com/micro-ROS/micro_ros_platformio
-
-
@greatxin1121 您好,请问您解决这个问题了么?