ROS2与Arduino串口和WiFi测试记录(Due和ESP32)

ROS2与Arduino调试有成熟方案,一年多前写过一篇博文详细记录,现在相关物联网单片机课程(ESP32)已经开发和测试完成,将之前的再回顾一遍吧(本文不含ROS1)。

>ESP32_wifi代码在文末<

2020年了,port也改成2020(默认为2018)测试一下:

现在官方已经更新了,但是安装和使用流程完全一致,参考官方教程即可(ros2arduino)。

串口!

Due英文发布

当然,完全可以支持中文的,如下所示:

只需修改下面代码对应位置即可:

开发板类型在右下角可以看到。

接着调试一下ESP32,发现一样OK,串口非常易用,效果很好的。

具体输出如下:

无线局域网!

那么来测试一下wifi吧,先调整一下代码,如下所示:

发现一样,直接成功没有遇到任何问题!

注意,一定要启动xrcedds哦,ESP32开发板IP地址如下:

目前,还不支持tcp,最好用udp,测试非常稳定。

publisher_wifi_udpesp32.ino

#include <ros2arduino.h>

#include <WiFi.h>
#include <WiFiUdp.h>

#define PUBLISH_FREQUENCY 2 //hz

const char* SSID="*********";
const char* SSID_PW="*********";

#define AGENT_IP   "172.20.10.3"
#define AGENT_PORT 2020 //AGENT port number

void publishString(std_msgs::String* msg, void* arg)
{
  (void)(arg);

  static int cnt = 0;
  sprintf(msg->data, "来一起学习ros2吧(ESP32WiFi测试) %d", cnt++);
}

class StringPub : public ros2::Node
{
public:
  StringPub()
  : Node("ros2arduino_pub_node")
  {
    ros2::Publisher<std_msgs::String>* publisher_ = this->createPublisher<std_msgs::String>("arduino_chatter");
    this->createWallFreq(PUBLISH_FREQUENCY, (ros2::CallbackFunc)publishString, nullptr, publisher_);
  }
};

WiFiUDP udp;

void setup() 
{
  Serial.begin(115200);
  WiFi.begin(SSID, SSID_PW);
  while(WiFi.status() != WL_CONNECTED)
  {   
    Serial.print("\n正在连接 "); 
    Serial.println(SSID);
    delay(500);
  }
  Serial.print("已经准备好,使用 ");
  Serial.print(WiFi.localIP());
  Serial.println(" 连接ROS2");
  ros2::init(&udp, AGENT_IP, AGENT_PORT);
}

void loop() 
{
  static StringPub StringNode;

  ros2::spin(&StringNode);
}

如果觉得这代码太LOW,没关系,还有下面配置模式,使用micro-ros2非常棒,有空再更新!

 


 

ROSArduino之间进行串口通信可以使用以下步骤: 1.在Arduino上安装ROS串口通信库,例如rosserial库。 2.编写Arduino代码,将其上传到Arduino板上,该代码应该包含ros.h头文件和串口初始化函数。 3.在ROS上创建一个节点,使用rosserial库与Arduino进行通信。 4.在ROS节点中使用发布者和订阅者来发送和接收数据。 下面是一个简单的例子,演示如何在ROS中使用rosserial库与Arduino进行通信: 1.安装rosserial库 在Arduino IDE中,选择"Sketch -> Include Library -> Manage Libraries",然后搜索"rosserial"并安装。 2.编写Arduino代码 以下是一个简单的示例代码,该代码将读取来自ROS的整数,并将其写入到串口: ``` #include <ros.h> #include <std_msgs/Int32.h> ros::NodeHandle nh; void messageReceived(const std_msgs::Int32& msg) { int value = msg.data; Serial.println(value); } ros::Subscriber<std_msgs::Int32> sub("topic_name", messageReceived); void setup() { nh.initNode(); nh.subscribe(sub); Serial.begin(9600); } void loop() { nh.spinOnce(); } ``` 3.创建ROS节点 在终端中,输入以下命令来创建ROS节点: ``` rosrun rosserial_python serial_node.py /dev/ttyUSB0 ``` 其中,/dev/ttyUSB0应该是Arduino连接到计算机上的串口设备名称。 4.使用ROS发布者和订阅者 在ROS节点中,使用以下代码来发布数据: ``` ros::NodeHandle nh; ros::Publisher pub = nh.advertise<std_msgs::Int32>("topic_name", 10); std_msgs::Int32 msg; msg.data = 42; pub.publish(msg); ``` 使用以下代码来订阅数据: ``` ros::NodeHandle nh; ros::Subscriber<std_msgs::Int32> sub = nh.subscribe("topic_name", 10, messageReceived); void messageReceived(const std_msgs::Int32& msg) { int value = msg.data; ROS_INFO("Received value: %d", value); } ``` 注意:在使用rosserial库进行通信时,需要确保Arduino板上的程序正常运行,并且串口设备名称正确。
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangrelay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值