ROS2与ESP32 的通信实验

主题:ROS2与ESP32 的通信实验


前言

本文介绍了基于Ubuntu22.04 LTS系统上的ROS2 Humble(发布维护时间2022.5–2027.5)与ESP32-wroom-32的通信实验


`

一、ROS2节点的基本概念

Nodes:节点,一个节点即为一个可执行文件,节点之间通过ROS这个系统进行通信。
Messages:消息,消息是一种ROS数据类型,用于主题的订阅或发布。
Topics:主题,节点可以发布消息到主题,也可以订阅某些主题以接收这些主题的消息。
Master:节点管理器,ROS名称服务。(在ROS2中取消了Master节点)
rosout: ROS中相当于stdout/stderr。
roscore: 主机+ rosout + 参数服务器。
rospy = python 客户端库
roscpp = c++ 客户端库

本文利用ros2中的topic主题进行通讯、控制

二、Ubuntu的准备

1.Ubuntu上安装ardunio

看了许多教程,并且亲身实测
如果再终端直接输入命令安装,会导致打不开arduino,闪退

sudo apt install arduino  #错误做法

正确的安装方法如下,摘自Linux公社分享

 wget https://downloads.arduino.cc/arduino-1.8.12-linux64.tar.xz
 tar -xvf arduino-1.8.12-linux64.tar.xz
 cd arduino-1.8.12/
 sudo ./install.sh

2.ESP32开发板数据添加

1、在File 中 的Prefereces 中添加 ESP32 开发板网站

https://dl.espressif.com/dl/package_esp32_index.json

在这里插入图片描述
在这里插入图片描述
2、通过Tools/Manage Libraries 中 搜索esp32,下载并完成安装。

3、通过Sketch/include Libraries/Library Manager 中 搜索ros2arduino库并完成安装

4、测试 led灯 代码参考博主zhangrelayROS2与Arduino发布订阅

#include <ros2arduino.h>
 
 
#define XRCEDDS_PORT  Serial
#define PUBLISH_FREQUENCY 1 //hz
#define       LED_BUILTIN  2
void publishString(std_msgs::String* msg, void* arg)
{
  (void)(arg);
 
  static int cnt = 0;
  sprintf(msg->data, "Hello ROS2 From Arduino %d", cnt++);
}
 
class StringPub : public ros2::Node
{
public:
  StringPub()
  : Node("ros2arduino_pub_node")
  {
    ros2::Publisher<std_msgs::String>* publisher_ = this->createPublisher<std_msgs::String>("ros2_chatter");
    this->createWallFreq(PUBLISH_FREQUENCY, (ros2::CallbackFunc)publishString, nullptr, publisher_);
  }
};
 
void subscribeLed(std_msgs::Bool* msg, void* arg)
{
  (void)(arg);
 
  digitalWrite(LED_BUILTIN, msg->data);
}
 
class LedSub : public ros2::Node
{
public:
  LedSub()
  : Node("ros2arduino_sub_node")
  {
    this->createSubscriber<std_msgs::Bool>("ros2_led", (ros2::CallbackFunc)subscribeLed, nullptr);
  }
};
 
 
void setup() 
{
  XRCEDDS_PORT.begin(115200);
  while (!XRCEDDS_PORT); 
 
  ros2::init(&XRCEDDS_PORT);
  pinMode(LED_BUILTIN, OUTPUT);
}
 
void loop() 
{
  static StringPub StringNode;
  static LedSub LedNode;
  ros2::spin(&StringNode);
  ros2::spin(&LedNode);
  
}

上传过程中可能出现的错误
1、esp32 自带的wifi库 与arduino 的wifi 库发生冲突

路径下/arduino-1.8.12/libraries/WIFI 如果不需要,可以直接移动到回收站

2 Unbuntu :exec: “python”: executable file not found in $PATH
通过以下指令修复 esp32

sudo apt install python-is-python3

3.安装 Micro-XRCE-DDS

 git clone https://github.com/eProsima/Micro-XRCE-DDS-Agent.git
 cd Micro-XRCE-DDS-Agent && git checkout v1.1.0
 mkdir build && cd build
 cmake ..
 make
 sudo make install
 sudo ldconfig /usr/local/lib/

终端下进行连接

MicroXRCEAgent serial --dev /dev/ttyUSB0 -b 115200

连接后arduino不能连接到开发板,ttyUSB0 还是 ttyACM0取决与Ubuntu与开发板的连接方式

4、开始测试

终端输入 : MicroXRCEAgent serial --dev /dev/ttyUSB0 -b 115200
在这里插入图片描述
然后 按下开发板上的 EN 按钮
在这里插入图片描述
此时 开发板已经在ubuntu上创建topic
在另一个终端输入 : ros2 topic list 可查看
在这里插入图片描述
最后,再新建一个终端 输入:

ros2 topic pub /ros2_led std_msgs/msg/Bool “{data: 0}” #关闭led
ros2 topic pub /ros2_led std_msgs/msg/Bool “{data: 1}” #开启led

在这里插入图片描述
观察esp32 指示灯 看到蓝色灯亮起,成功测试通信成功


总结

提示:这里对文章进行总结:

以上就是我两天踩坑的总结,从安装ROS2、arduino以及串口调试。由于本人是新人博主,文章中说明不清楚的地方见谅。
在这里插入图片描述

  • 8
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
ROS(机器人操作系统)是一个用于开发机器人软件的框架,而STM32是一款常见的嵌入式微控制器。它们可以进行通信以实现机器人系统的控制和数据传输。 要实现ROS与STM32的通信,通常有两种方式:串口通信ROS网络通信。 一种常见的方式是通过串口连接ROS主机和STM32。ROS主机可以使用基于Linux系统的计算机,如Ubuntu等。使用ROS提供的串口通信库,可以在ROS主机上编写节点程序,通过串口与STM32进行数据交换。在ROS主机上,可以将STM32作为一个外设设备接入ROS系统,通过串口读取STM32发送的数据,并将ROS主机的控制指令发送给STM32。 另一种方式是通过ROS网络通信。在STM32上运行一个ROS节点,该节点通过TCP/IP协议与ROS主机上的其他ROS节点进行通信ROS节点可以通过STM32上的网卡或Wi-Fi模块连接到ROS主机所在的局域网。在ROS主机上,可以使用ROS提供的网络通信库与STM32节点进行通信,发送控制指令或接收传感器数据。 不论是串口通信还是网络通信ROS与STM32的通信都需要定义消息格式。可以根据具体的需求,定义自己的ROS消息类型,包括控制指令、传感器数据等。在ROS主机上,可以使用ROS消息库来解析和处理这些消息。 总之,通过串口通信ROS网络通信,可以实现ROS与STM32的通信,实现机器人系统的控制和数据传输。这种通信方式可以用于各种机器人应用,如无人车、机器人臂等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值