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非常棒,有空再更新!

 


猜你喜欢

转载自blog.csdn.net/ZhangRelay/article/details/109409535