0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于Arduino和ROS来创建更智能的机器人系统

电子设计 来源:一板网 作者:风筝 2021-01-09 11:30 次阅读

Arduino开发板经常用于制作一些小型的机器人,并具有简单的逻辑定义控制。但是,由于板载计算能力和软件有限,开发人员常常无法升级到更复杂的机器人。通常,随着开发人员变得越来越有经验,他们会寻专用于机器人的软件,因为Arduino仅提供部分控件。

在本篇文章中,我们主要介绍了中间件软件框架Robot Operating System(ROS),并引导您通过Arduino设置和使用ROS来创建更智能的机器人系统。

什么是ROS?

机器人操作系统(ROS)是最流行和使用最广泛的机器人中间件软件框架之一。这是一个开放源代码平台,可帮助创客和开发人员在无需重新发明轮子的情况下开始使用机器人软件。 ROS提供了一种标准的通信体系结构,用于无缝集成、使用、开发和部署机器人系统的不同组件,包括控制、感知、计划等。这是一个与语言无关的平台,无论部署在何处,都可以为不同的计算机提供跨平台的通信支持。

Arduino可能是最常用的开源微控制器开发板,它提供了易于使用的软件-硬件界面以及不断扩展的用户社区。 Arduino几乎与所有数字和模拟电路以及支持串行通信接口(如SPI、I2CUART)的外部设备兼容。

基于ROS的软件框架运行高级算法和流程,例如机器人模型的推理、过滤、运动策略生成、控制器算法等。安装在机器人上的Arduino控制器用于执行低级/嵌入式控制和传感。它包括、电动机控制、温度和超声传感器、IMU和车轮编码器以及其他设备。

pIYBAF_5Ip2AFewhAABT7T60BtY340.png

ROS-Arduino交互管道

ROS与Arduino之间的通信

ROS通信模块基于自定义的TCPROS协议进行操作,使用两种方式:多对多发布者-订阅者方法和点对点更快服务方法。本篇文章使用发布者/订阅者在Arduino开发板和机器上运行的ROS之间进行通信。

rosserial ROS软件包使用Arduino的通用异步接收器/发送器(UART)通信,并将开发板转换为ROS节点,该节点可以发布ROS消息,也可以订阅消息。 Arduino ROS节点发布者可以从板上将数据(从传感器或机器人状态)发送到运行ROS的机器,而Arduino ROS节点订阅者可以从机器获取指令。 ros_lib Arduino库使Arduino开发板能够与ROS通信。

建立基础架构

软体设置

1. 在计算机(笔记本电脑/ PC)上安装ROS。此处提供详细步骤。注意:这可以在Linux机器上运行的ROS 1。

2. 在计算机上安装rosserial(发行版可以是kinetic/indigo/melodic)。

sudo apt-get install ros-《distro》-rosserial

sudo apt-get install ros-《distro》-rosserial-arduino

3. 根据此处提到的说明在计算机上安装Arduino IDE。

4. 在IDE中安装ros_lib软件包。

a. 安装软件包的最简单方法是使用Arduino IDE。导航到IDE中的Sketch 》 Include Library 》 Manage Library,然后搜索rosserial软件包

pIYBAF_5Iq2APTasAAFMG11gjLE006.png

下拉菜单搜索新的Arduino软件包

b. Arduino IDE将所有外部库存储在〜/ Arduino / libraries文件夹位置下。它将这些库加载到开发环境中,并且可以在IDE中看到。安装后,可以在下拉列表中看到Rosserial Arduino库。

o4YBAF_5Ir6AdB4RAAFI03rP52I283.png

外部库显示在列表中

C. 安装后,应该在IDE中看到示例草图。

pIYBAF_5ItKASH8YAAGDCLQe5Y0059.png

库中的可用示例草图

硬件设置

我们使用简单的设置将Arduino开发板用作发布者和订阅者。

1. 发布者:一个按钮连接到Arduino开发板上,并且被切换以通过ROS将数字高/低信号发送到机器。该消息显示在机器的终端中。

2. 订阅者:一个LED连接到Arduino开发板上,并使用通过终端从ROS用户那里获得的指令来打开/关闭LED。

硬件连接

o4YBAF_5IuWAJnLJAAEMQu6tRFo533.png

代码和说明

Arduino代码

#include 《ros.h》

#include 《std_msgs/String.h》

#include 《std_msgs/UInt16.h》

#define BUTTON 8

#define LED 13

ros::NodeHandle node_handle;

std_msgs::String button_msg;

std_msgs::UInt16 led_msg;

void subscriberCallback(const std_msgs::UInt16& led_msg) {

if (led_msg.data == 1) {

digitalWrite(LED, HIGH);

} else {

digitalWrite(LED, LOW);

}

}

ros::Publisher button_publisher(“button_press”, &button_msg);

ros::Subscriber《std_msgs::UInt16》 led_subscriber(“toggle_led”, &subscriberCallback);

void setup()

{

pinMode(LED, OUTPUT);

pinMode(BUTTON, INPUT);

node_handle.initNode();

node_handle.advertise(button_publisher);

node_handle.subscribe(led_subscriber);

}

void loop()

{

if (digitalRead(BUTTON) == HIGH) {

button_msg.data = “Pressed”;

} else {

button_msg.data = “NOT pressed”;

}

button_publisher.publish( &button_msg );

node_handle.spinOnce();

delay(100);

}

说明

该代码导入了ros_lib库和std_msgs :: String和std_msgs :: UInt16的标准ROS消息。声明了用于存储ROS数据类型和Arduino板引脚的变量。

该代码声明了一个名为button_publisher的发布者,该发布者将std_msgs :: String数据类型的button_msg发布到button_press主题。同样,名为led_subscriber的订阅者订阅了toggle_led主题,该主题获取std_msgs :: UInt6数据类型。

声明ROS节点句柄,然后在setup()方法中对其进行初始化。节点句柄为发布者做广告,并订阅该主题。

SubscriberCallback()是在Arduino订阅者节点上接收数据时调用的方法。回调方法检查ROS主题数据是否为HIGH,并相应地切换连接的LED。

最后,loop()方法运行一个无限循环,并从按钮中读取信息并将其发布到ROS。节点句柄调用spinOnce()来处理通信。

程序执行

通过USB电缆将Arduino Uno开发板连接到笔记本电脑,并确认该板出现在Arduino IDE的可用串行端口列表中。编译代码,选择板子类型并将其上传到开发板。

上载代码后,在机器的终端上执行以下命令。

1. 启动ROS Master-roscore

2. 在计算机上运行rosserial客户端-rosrun rosserial_python serial_node.py / dev / tty 《USB#或ACM#》

3. 在运行时确定ttyUSB或ttyACM的串行端口。可以从Arduino IDE或使用dmesg | grep tty找到确切的端口号。

4. 读取是否按Arduino板上的按钮返回的已发布数据-rostopic echo button_press

5. 发布数据以切换Arduino上连接的LED-rostopic pub toggle_led std_msgs / UInt16“ data:0”数据为“ 0”关闭LED,“ 1”打开LED。

pIYBAF_5IwWAfV0UAAZ3QJE-880826.png

使用多个终端选项卡执行指令并在同一屏幕上观察响应

rosserial提供了一个非常标准的平台,允许创客和开发人员在Arduino和ROS之间无缝连接。它可以使用两种非常著名和有用的技术来探索机器人技术的新机遇。这种方法允许以非常低的成本为机器人系统提供分布式计算、集中控制、控制抽象以及其他一些好处。
编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器人
    +关注

    关注

    206

    文章

    26980

    浏览量

    201314
  • Arduino
    +关注

    关注

    184

    文章

    6426

    浏览量

    184775
收藏 人收藏

    评论

    相关推荐

    【爱芯派 Pro 开发板试用体验】基于爱芯派 Pro 开发板的警用安防智能机器人设计

    警安保人员工作压力 安防智能机器人系统构成包括机器人、网络系统机器人云平台、可拓展设备,以及充
    发表于 01-14 21:56

    开源项目!教你如何复刻自平衡赛车机器人智能家居中控、竞技机器人先进模糊控制器等

    岂不是手到擒。 它,就是可以自平衡的赛车机器人——B_ROBOT_100ASK 项目简介 本项目基于jjrobots的开源项目B-ROBOT EVO2进行复刻,与原开源项目不一样的地方是,作者将原本
    发表于 12-26 09:17

    【昉·星光 2 高性能RISC-V单板计算机体验】基于星光 2 ROS 激光雷达红外测温智能

    的运行环境, 在这个环境上, 机器人的感知、 决策、 控制算法可以更好的组织和运行,树莓派,英伟达都运行ROS系统智能,所以想做一个基于星光 2
    发表于 12-02 15:52

    ROS机器人开发更便捷,基于RK3568J+Debian系统发布!

    ,以及包管理。它也提供用于获取、编译、编写、和跨计算机运行代码所需的工具和库函数。 图1 随着工业智能化的快速发展,智能机器人设备已成为工业自动化体系的佼佼者,而智能
    的头像 发表于 11-30 16:29 246次阅读
    <b class='flag-5'>ROS</b>让<b class='flag-5'>机器人</b>开发更便捷,基于RK3568J+Debian<b class='flag-5'>系统</b>发布!

    ROS机器人开发更便捷,基于RK3568J+Debian系统发布!

    ,以及包管理。它也提供用于获取、编译、编写、和跨计算机运行代码所需的工具和库函数。图1 随着工业智能化的快速发展,智能机器人设备已成为工业自动化体系的佼佼者,而智能
    发表于 11-30 16:01

    ROS系统是什么?ROS系统主要特点有哪些?创龙RK3568J+Debian的ROS2系统案例

    了操作系统应有的服务,包括硬件抽象,底层设备控制,常用函数的实现,进程间消息传递,以及包管理。它也提供用于获取、编译、编写、和跨计算机运行代码所需的工具和库函数。 随着工业智能化的快速发展,智能
    的头像 发表于 11-30 14:41 1977次阅读
    <b class='flag-5'>ROS</b><b class='flag-5'>系统</b>是什么?<b class='flag-5'>ROS</b><b class='flag-5'>系统</b>主要特点有哪些?创龙RK3568J+Debian的<b class='flag-5'>ROS</b>2<b class='flag-5'>系统</b>案例

    机器人ROS模型建立

    这个系列主要介绍机器人ROS模型的建立方法,ROS系统带来的好处之一就是: 我们无需自己建立复杂的数学模型来描述自己的机器人几何尺寸、运动学
    的头像 发表于 11-28 14:19 240次阅读

    利用Arduino机器人学会识别标识并作出行为

    教你用Arduino机器人学会识别标识并作出行为。你的人工智能小车从此有了眼睛!材料单:跟踪机器人底盘视觉传感器Arduino Uno电动
    发表于 09-27 07:36

    Arduino教学机器人的使用教程

    本文档的主要内容详细介绍的是Arduino教学机器人的使用教程
    发表于 09-27 06:53

    教你做个PID控制巡线机器人

    在本项目中,我们将学习如何使用带PID控制器的线跟随机器人使用Arduino Nano解决迷宫。
    发表于 09-25 06:54

    ai人工智能机器人

    的运营成本、人力成本还在不断提高(如:办公场地的租金、员工的工资、社保公积金、节假日福利等)。 如今的智能电话机器人,每天的电话拨打量可达800-1000通,相比人工提高了3-5倍,大大缩短了名单的筛选
    发表于 09-21 11:09

    一个机器人操作系统(ROS)节点系统

    电子发烧友网站提供《一个机器人操作系统(ROS)节点系统.zip》资料免费下载
    发表于 07-06 10:49 0次下载
    一个<b class='flag-5'>机器人</b>操作<b class='flag-5'>系统</b>(<b class='flag-5'>ROS</b>)节点<b class='flag-5'>系统</b>

    ROS控制jetbot机器人

    电子发烧友网站提供《从ROS控制jetbot机器人.zip》资料免费下载
    发表于 06-27 10:22 0次下载
    从<b class='flag-5'>ROS</b>控制jetbot<b class='flag-5'>机器人</b>

    ROS机器人操作系统的实现原理(下)

    本文介绍ROS机器人操作系统(Robot Operating System)的实现原理,从最底层分析ROS代码是如何实现的。 **1、序列化** 把通信的内容(也就是消息m
    的头像 发表于 05-19 17:42 858次阅读

    ROS机器人操作系统的实现原理(上)

    本文介绍ROS机器人操作系统(Robot Operating System)的实现原理,从最底层分析ROS代码是如何实现的。 **1、序列化** 把通信的内容(也就是消息m
    的头像 发表于 05-19 17:41 769次阅读
    <b class='flag-5'>ROS</b><b class='flag-5'>机器人</b>操作<b class='flag-5'>系统</b>的实现原理(上)