关于ROS在硬件上实现的一些资料

找了很久终于在15年出版的《mastering ros for robotics programming》(目前未翻译)的一书中找到点头绪了,接下来是一些翻译片段备录,后续更新:

I/O板、传感器和执行器连接到ROS

在这一章,我们讲讨论一些硬件组件如传感器和执行器连接到ROS的接口。我们将看到使用I/O板,如Arduino,RaspberryPi和Odroid-C1到ROS的传感器接口,并且还将涉及智能驱动(如DyrimxEL)到ROS的接口。章节分为:

1.    理解Arduino-ROS接口;

2.    设置Arduino-ROS接口包;

3.    Arduino-ROS范例——Chatter和Talker;

4.    Arduino-ROS范例——点流水灯和按按钮;

5.    Arduino-ROS范例——加速度计ADXL 335;

6.    Arduino-ROS范例——超声波测距传感器;

7.    Arduino-ROS范例——测量路径发布者;

8.    非Arduino板与ROS的接口;

9.    在Odroid-C1和Raspberry Pi2上安装ROS;

10.  在Odroid-C1和Raspberry Pi2上使用ROS;

11.  ROS和电机接口;

理解Arduino-ROS接口

让我们先看看Arduino是什么样的。Arduino是市场上最流行的开源I/O板之一。硬件的可编程性和硬件的成本效益使Arduino获得了巨大的成功。大多数的Arduino板由Atmel微控制器供电,线宽可从8位到32位,时钟速度从8兆赫到84兆赫。Arduino可以用于机器人的快速原型制造,我们甚至可以使用它来生产产品。Arduino在机器人中的主要应用是接口传感器和执行器,并与PC通信以接收高级命令并使用UART协议向PC发送传感器值。

市面常用的Arduino(依次为初级、中级和高级板):

板子

Arduino UNO

Arduino Mega 2560

Arduino Due

处理器

ATmega328P

ATmega2560

ATSAM3X8E

操作/输入电压

5V/7-12V

5V/7-12V

3.3V/7-12V

CPU速率

16MHz

16MHz

84MHz

模拟输入/输出

6/0

16/0

12/2

数字IO口/PWM口

14/6

54/15

54/12

EEPROM

1KB

4KB

-

SRAM

2KB

8KB

96KB

Flash

32KB

256KB

512KB

USB

Regular

Regular

2 Micro

UART

1

4

4

等级

初级

中级

高级

什么是Arduino-ROS接口?

PC机与I/O板之间的通信大多是通过UART协议实现的。当两个设备相互通信时,双方都应该有一些程序可以从这些设备中转换串行命令。我们可以实现我们自己的逻辑来接收和传输数据从板到PC,反之亦然。接口代码可以在每个I/O板上不同,因为没有标准的库来进行这种通信。

Arduino-ROS接口是Arduino板子和主机PC之间的标准通信方式。其它的I/O板则可能需要我们自己去定义节点来进行连接。

在Arduino IDE编译中我们可以使用类似于ROS在PC中的C++ API对其进行编程。接口包的一些详细信息如后文所展示。

理解ROS里的rosserial package

Rosserial package是一套标准的通信协议,用于实现从ROS到字符设备(如串行端口和插口)的通信,反之亦然。Rosserial协议可以将标准的ROS消息和服务数据类型转换为嵌入式设备等效数据类型。它还通过复用来自字符设备的串行数据来实现多topic支持。通过在分组上添加头和尾部字节,将串行数据作为数据组分组发送。分组表示如下:

各个字节的作用如下:

1.    Sync Flag(同步标识):这是数据包的第一个字节,通常为“0xff”;

2.    Sync Flag(同步标识)/Protocol version(协议版本):这个字节在ROS的Groovy版本上通常为“0xff”,在之后的版本为“0xfe”;

3.    Message Length(信息长度):这个两个字节包含数据包的长度;

4.    Checksum over message length(消息长度的校验和):这是查找数据包损坏的长度校验和;

5.    Topic ID(主题ID):这字节是为每个主题分配的ID;为系统相关功能分配0到100范围;

6.    Serialized Message data(序列化的消息数据):这些字节是与每个主题相关联:的数据;

7.    Checksum of Topic ID and data(主题ID和数据的校验和): 这是用于查找数据包损坏的主题及其串行数据的校验和。

长度的校验和用下列方程式计算:

ROS客户端库,如ROSCPP、RoSpice和RoSLISP,它使我们能够开发可以从各种设备运行的ROS节点。ROS客户端的一个端口,使我们能够从嵌入式设备(如ARDUINO和基于嵌入式Linux的板)上运行ROS节点,称为rosserial_client库。使用rosserial_client客户端库,可以开发ARDUNO、嵌入式Linux平台和Windows的ROS节点。以下是每个平台的rosserial_client库的列表:

1.    rosserial_arduino:rosserial_arduino在Arduino平台上(如Arduino UNO和Leonardo)工作,当然也在Mega series和Due series上为先进机器人工程使用;

2.    rosserial_embeddedlinux: 该客户端支持嵌入式Linux平台,如VEXPro、CuBube闹钟、WRT54 GL路由器等;

3.    rosserial_windows:这是windows平台的客户端;

在PC端,我们需要一些其他的包来解码串行消息,并从rosserial_client客户端库转换为精确的主题。下面的软件包帮助解码串行数据:

1.    rosserial_python: 这是推荐的PC端节点,用于处理来自设备的串行数据。接收节点完全用Python编写;

2.    rosserial_server: 这是一个在PC端实现的RoSCORT的C++实现。与rosserial_python相比,内置函数较少,但它可以用于高性能应用;

3.    rosserial_java:这是一个基于JAVA的改进rosserial,但是现在不推荐使用,它主要用于与Android设备通信;

我们主要关注从Arduino运行ROS节点。首先,我们将介绍如何设置rosserial包,然后讨论如何在Arduino IDE中安装rosserial_arduino客户端。



猜你喜欢

转载自blog.csdn.net/qq_17032807/article/details/80904087
今日推荐