如何在两个Arduino和Raspberry Pi上使用rosserial

Arduino的 的 是一款出色的开发板,可用于从各种传感器读取数据并控制机器人’直流电动机。 树莓派擅长在Linux上运行ROS。因此,我们可以从这两个系统中受益来构建智能机器人。最简单的方法是通过USB电缆连接这些板,并使它们通过ROS节点进行通信。

在本教程中,我’ll向您展示如何使用两个Arduino开发板作为Raspberry Pi计算机的扩展。在开始编写ROS节点之前,我必须 设置Pi以识别每个Arduino。当机器人’的体系结构很复杂。

Arduino的 的 板上只能运行一个ROS节点。而且由于我有两个Arduino,我将使用一个生成一个随机数,另一个使用它来控制连接到插针13的LED。

如何在两个Arduino和Raspberry Pi上使用rosserial

我将运行一个ROS节点,它将根据此流程图发送和接收数据

流程图说明

  • 用户将通过运行以下命令来启动所有ROS节点 。发射 文件。
  • 第一个Arduino开发板将运行一个随机数脚本并将数据发送到Raspberry Pi。
  • ROS 节点将从第一个Arduino板接收随机数。该节点将在Raspberry Pi上运行,并命令第二个Arduino板上的LED。
  • 第二块Arduino板将根据从Pi板上运行的ROS节点收到的命令来打开和关闭LED(引脚13)。

ROS 节点生成一个随机数

测试节点
第1步:打开Linux终端并输入命令:

罗斯科尔

步骤2:打开第二个Linux Terminal,然后键入以下命令:

罗斯 run 罗斯 serial_python serial_node.py / dev / ttyACM *

步骤3:要查看Arduino节点生成的随机数,请打开第三个终端,然后键入以下命令:

罗斯 topic回声/ 随机 _number

显示和计算LED的ROS节点’s stage

Python中的此ROS节点将在Raspberry Pi上运行。在开始编写Python代码之前,必须创建工作空间和包含该节点的包。您需要做的就是 文章 .

控制LED的ROS节点

编写启动文件

<launch>
<node pkg=”rosserial_python” type=”serial_node.py” name=”twoArduino_LED” output=”screen”>
<param name=”port” value=”/dev/ttyACM0″/>
<param name=”baud” value=”57600″/>
</node>
<node pkg=”rosserial_python” type=”serial_node.py” name=”twoArduinos_RandNo” output=”screen”>
<param name=”port” value=”/dev/ttyACM1″/>
<param name=”baud” value=”57600″/>
</node>
<node name=”random_number” pkg=”pi_and_arduino” type=”twoArduinos_Pi.py” output=”screen” />
</launch>

参考文献:

 

9条评论 » Write a comment

  1. 当我尝试编译用于​​控制arduino LED的ROS节点时,出现错误消息:

    没有参数列表的模板名称ros :: 订户的无效使用

  2. 我认为接收控制命令的董事会应该订阅‘LED’话题。可能是一个简单的遗漏。

  3. 在上一个脚本中,有一个错字
    罗斯 :: 订户 子 (“OFF”, &messageCb);
    arduino节点应订阅“LED” topic 不 “OFF”
    罗斯 :: 订户 子 (“LED”, &messageCb);

  4. 是arduino’通过USB电缆与rPi进行通讯?你没有’关于将arduino的串行引脚连接到Rpi的串行引脚的任何事情,因此必须使用USB。

  5. 最后一个脚本中仍然有错字;“控制LED的ROS节点”
    以下不会编译…
    罗斯 :: 订户 子 (“ LED”,&messageCb);

    这对我的设置有效…
    罗斯 :: 订户 子 (“LED”, &messageCb);

    感谢您的教程。

  6. 我以前的回复评论没有出现,因为我键入了它。
    “ros::Subscriber 子 (“LED”, &messageCb);”

    std_msgs :: 串 需要在row :: 订户和sub(之间“LED”, &messageCb);它需要用“”

    罗斯 :: 订户 子 (“LED”, &messageCb);

发表回覆 日本动漫 取消回复

您的电子邮件地址不会被公开。 必需的地方已做标记 *