esp32和ros2基础篇草稿-micro-ros-
【摘要】
博客中两两三三记录了一些使用micro-ros建立esp32与ros2之间通信的一些调试记录。
也参考了如下的内容:
1 zhuanlan.zhihu.com/p/5425632522 blog.csdn.net/qq_62096941/article/details/125638469
除了如下博文中提及的工具:
mic...
博客中两两三三记录了一些使用micro-ros建立esp32与ros2之间通信的一些调试记录。
也参考了如下的内容:
-
1 zhuanlan.zhihu.com/p/542563252
-
2 blog.csdn.net/qq_62096941/article/details/125638469
除了如下博文中提及的工具:
micro-ros arduino esp32 ros2 笔记
还需要:
Micro-XRCE-DDS-Agent
主要参考如下:
arduino配置好后,支持ros1,ros2多种模式通信。
- micro-ros(ros2 dashing foxy humble)
- ros2arduino(ros2 dashing foxy humble)
- rosserial(ros1 kinetic melodic noetic)
这些都测试过,也都非常稳定,如果不用arduino。
参考如下这篇:
micro-ROS之esp32与ros2资料(freertos)_zhangrelay的博客-CSDN博客
使用arduino esp32 micro-ros发布一个主题的代码如下:
-
#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 <std_msgs/msg/int32.h>
-
-
#if !defined(ESP32) && !defined(TARGET_PORTENTA_H7_M7) && !defined(ARDUINO_NANO_RP2040_CONNECT)
-
#error This example is only avaible for Arduino Portenta, Arduino Nano RP2040 Connect and ESP32 Dev module
-
#endif
-
-
rcl_publisher_t publisher;
-
std_msgs__msg__Int32 msg;
-
rclc_support_t support;
-
rcl_allocator_t allocator;
-
rcl_node_t node;
-
-
#define LED_PIN 13
-
-
#define RCCHECK(fn) { rcl_ret_t temp_rc = fn; if((temp_rc != RCL_RET_OK)){error_loop();}}
-
#define RCSOFTCHECK(fn) { rcl_ret_t temp_rc = fn; if((temp_rc != RCL_RET_OK)){}}
-
-
-
void error_loop(){
-
while(1){
-
digitalWrite(LED_PIN, !digitalRead(LED_PIN));
-
delay(100);
-
}
-
}
-
-
void timer_callback(rcl_timer_t * timer, int64_t last_call_time)
-
{
-
RCLC_UNUSED(last_call_time);
-
if (timer != NULL) {
-
RCSOFTCHECK(rcl_publish(&publisher, &msg, NULL));
-
msg.data++;
-
}
-
}
-
-
void setup() {
-
set_microros_wifi_transports("***", "***", "***", 8888);
-
-
pinMode(LED_PIN, OUTPUT);
-
digitalWrite(LED_PIN, HIGH);
-
-
delay(2000);
-
-
allocator = rcl_get_default_allocator();
-
-
//create init_options
-
RCCHECK(rclc_support_init(&support, 0, NULL, &allocator));
-
-
// create node
-
RCCHECK(rclc_node_init_default(&node, "micro_ros_arduino_wifi_node", "", &support));
-
-
// create publisher
-
RCCHECK(rclc_publisher_init_best_effort(
-
&publisher,
-
&node,
-
ROSIDL_GET_MSG_TYPE_SUPPORT(std_msgs, msg, Int32),
-
"topic_name"));
-
-
msg.data = 0;
-
}
-
-
void loop() {
-
RCSOFTCHECK(rcl_publish(&publisher, &msg, NULL));
-
msg.data++;
-
}
其中:
set_microros_wifi_transports("***", "***", "***", 8888);
分别为wifi名,wifi密码,agent地址,agent端口。
测试效果稳定。
需要启动agent。
测试共稳定接受22585890个数据,未出现任何异常:
文章来源: zhangrelay.blog.csdn.net,作者:zhangrelay,版权归原作者所有,如需转载,请联系作者。
原文链接:zhangrelay.blog.csdn.net/article/details/126126969
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)