首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
20 篇文章
1
ROS1&2机器人操作系统免安装在线自主学习平台简介和官方第三方教程列表
2
机器人操作系统二(ROS2)- 启程 Departure
3
机器人操作系统二(ROS2)- 修行 Taoism
4
机器人操作系统二(ROS2)- 仿真 Simulation
5
机器人操作系统二(ROS2)- 实践 Practice
6
ROS2与Arduino发布订阅
7
ROS2网络多机通信DDS和安全加密SROS(多机器人系统)
8
ROS2实时性案例分析之倒立摆系统使用(Inverted pendulum)
9
机器人实践课程镜像分享及使用说明(Arduino+ROS1+ROS2+Gazebo+SLAM+...)
10
使用机器人操作系统ROS 2和仿真软件Gazebo 9搭建机器人教程(一)
11
使用机器人操作系统ROS 2和仿真软件Gazebo 9命令遥控可视化教程(二)
12
使用机器人操作系统ROS 2和仿真软件Gazebo 9环境综合测试教程(三)
13
使用机器人操作系统ROS 2和仿真软件Gazebo 9目标跟踪实践(四)
14
使用机器人操作系统ROS 2和仿真软件Gazebo 9多机器人实践(五)
15
使用机器人操作系统ROS 2和仿真软件Gazebo 9激光传感器算法进阶(六)
16
使用机器人操作系统ROS 2和仿真软件Gazebo 9主题进阶实战(七)- mobot速度发布与里程计订阅
17
使用机器人操作系统ROS 2和仿真软件Gazebo 9服务进阶实战(八)- mobot行驶至目标位置
18
使用机器人操作系统ROS 2和仿真软件Gazebo 9行动进阶实战(九)- mobot区域巡逻
19
ROS 2 Foxy Fitzroy遇见Ubuntu 20.04
20
使用ROS2机器人操作系统进行多机器人编程技术实践(Multi-Robot Programming Via ROS2 )

ROS2与Arduino发布订阅

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

                 本文链接:[https://blog.csdn.net/ZhangRelay/article/details/101394537](https://blog.csdn.net/ZhangRelay/article/details/101394537) 

Arduino直接从库中安装ros2arduino:

ros2arduino

然后,就可以在示例中打开代码学习。

一个订阅发布代码如下:

#include <ros2arduino.h>


#define XRCEDDS_PORT  Serial
#define PUBLISH_FREQUENCY 1 //hz

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);
  
}

代码实现功能如下:

IDE

主题

Arduino发布消息到主题ros2_chatter,并订阅主题ros2_led。

使用如下命令控制LED灯:

点亮:ros2 topic pub /ros2_led std_msgs/msg/Bool "{data: 1}"

关闭:ros2 topic pub /ros2_led std_msgs/msg/Bool "{data: 0}"

思考题:如何实现LED闪烁?

LED闪烁(不修改代码)

如何修改代码实现?

  if(ledblink%2==1)
    digitalWrite(LED_BUILTIN, 1);
  else
    digitalWrite(LED_BUILTIN, 0);  
  
  ledblink++;

对YAML不熟悉参考:YAML语法规则

接收到主题消息如下:

pubsub

直接用串口工具看到信息如下:

串口工具

ROS1和Arduino的示例,通过代码移植完全适用与ROS2。

4年前(2015年12月)花费1周时间搭建的小车,同样可以用ROS2实现。

之前案例链接:基于ROS_Arduino室内移动机器人SLAM实验测试

基于ROS2_Arduino移动机器人cartographer(SLAM)小车,课程结束后发布。

ros2cartographer参考:https://github.com/ros2/cartographer

Arduino使用说明参考:https://www.arduino.cc/en/Guide/ArduinoDue

下面详细介绍一下如何使用ros2arduino:

必须安装ROS2,必须安装Micro-XRCE-DDS。

ROS2安装可以参考:

  1. (博客)https://cloud.tencent.com/developer/article/1446251
  2. (文档)https://cloud.tencent.com/developer/article/1509245

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/

eProsima Micro XRCE-DDS

完整具体的eProsima Micro XRCE-DDS使用文档参考:https://micro-xrce-dds.readthedocs.io/en/latest/index.html

这里如果网络不行,可能凉凉,推荐使用git代理。

git config --global http.proxy <address>:<port>

体验飞一般的感觉。

如果想了解Fast-RTPS,参考eProsima Fast RTPS文档:http://eprosima-fast-rtps.readthedocs.io/

如果想在ros1中使用arm版本的arduino:

1 第一个可行的解决方案。在Arduino Libraries目录中的ArduinoHardware.h版本中,将第75行更改为:

iostream = &Serial;

可行,但无法使用Arduino其他开发板(例如Leonardo)

2 在包含ROS库之前放置以下代码

#define USE_USBCON

可行,但是,必须在每次使用DUE的情况下都添加它,而这容易忘记。

3 将第73行修改为:

#if defined(USBCON) and !(defined(USE_USBCON)) and !(defined(_SAM3XA_))

需修改位置

解决所有以前的问题,但是,如果另一个使用SAM3X ...处理器的主板,会成为问题。

ros1与arduino

arduino完美支持ROS1和ROS2。

编译和使用也会遇到各种各样的小问题,都有成熟解决方案的,查找即可。

具体使用,ROS1略,ROS2。

  • Serial $ MicroXRCEAgent serial --dev /dev/ttyACM0 -b 115200
  • UDP $ MicroXRCEAgent udp -p 2018
  • TCP $ MicroXRCEAgent tcp -p 2018

ros2 arduino node topic


更多课程资料参考:机器人编程实践-ROS2基础与应用- https://blog.csdn.net/ZhangRelay/article/details/101351969


下一篇
举报
领券