利用micro_ros实现esp32与ros2的通讯
参考:https://github.com/micro-ROS/micro_ros_arduino
https://blog.csdn.net/ZhangRelay/article/details/101394537
-
micro_ros可以理解为一个运行在嵌入式平台的轻量级ros,其好处是建立了一套上位机平台(主要运行ubuntu+ros)与下位机平台(MCU)的通讯机制,包括串口、UDP、wifi等,省去了我们编写通讯协议的烦恼。
-
这套通讯机制最大的好处是可以将下位机平台(MCU)当作ros中的一个Node,实现topic的发布、订阅,以及service、action等等。可以说是无缝兼容ros。
-
个人粗浅的理解,ros最大的方便就是提供了一个基于Node的分布式通讯机制。
本文所用安装环境:
- 上位机:旭日x3派 (ros2 foxy+ubuntu 20.04)
- 下位机:M5stack Atom Lite(esp32 core)
0. micro_ros与micro_ros_arduino的安装
参考我之前写的一篇记录https://zhuanlan.zhihu.com/p/540924221
特别注意:
- 2GB内存的旭日x3派开启swap,否则micro_ros_agent的build过程容易内存不足;
- 网络环境务必能够通畅无阻的访问github,否则大概率失败!
1. 下位机配置
1.1 arduino支持包安装
我这里使用的下位机是M5stack Atom Lite,其核心是esp32,但我用arduino框架进行开发。
理论上,所有支持arduino开发的嵌入式平台应该都可以。
注意:务必安装自己嵌入式平台对应的arduino支持包。
正确安装M5stack支持包后,在开发板管理中应该出现M5 stack相关的信息。
1.2 下位机代码
#include <micro_ros_arduino.h>
#include <stdio.h>
#include <rcl/rcl.h>
#include <rcl/error_handling.h>
#include <rclc/rclc.h>
#include <rclc/executor.h>
#include <geometry_msgs/msg/twist.h> //changed!
rcl_publisher_t publisher;
geometry_msgs__msg__Twist msg; //changed!-->modify msg type <twist__struct.h>
rclc_executor_t executor;
rclc_support_t support;
rcl_allocator_t allocator;
rcl_node_t node;
rcl_timer_t timer;
#define LED_PIN 27 //changed!-->Modify M5 stack Atom Lite LED pin
#define RCCHECK(fn) {
rcl_ret_t temp_rc = fn; if((temp_rc != RCL_RET_OK)){
error_loop();}}<