ROS2与Arduino调试有成熟方案,一年多前写过一篇博文详细记录,现在相关物联网单片机课程(ESP32)已经开发和测试完成,将之前的再回顾一遍吧(本文不含ROS1)。
-
ROS2与Arduino发布订阅(2019-09)
>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非常棒,有空再更新!
来源:oschina
链接:https://my.oschina.net/u/4277371/blog/4700824