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

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

    关注

    213

    文章

    31413

    浏览量

    223590
  • Arduino
    +关注

    关注

    190

    文章

    6527

    浏览量

    197441
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    开发必看,RK3576基于Ubuntu22.04安装 测试ROS2机器人系统

    本文介绍基于Ubuntu22.04安装ROS2机器人系统教程,并附带详细测试方法,基于触觉智能RK3576核心板方案,使用配套开发板PurplePiOH2演示。
    的头像 发表于 03-13 17:48 388次阅读
    开发必看,RK3576基于Ubuntu22.04安装 测试<b class='flag-5'>ROS</b>2<b class='flag-5'>机器人</b><b class='flag-5'>系统</b>

    资讯速递 | 具身智能PMC(筹)发布“零成本”开源鸿蒙智能机器人系统

    面向具身智能机器人系统与应用开发,Ubuntu 等操作系统可以用 ROS2 生态、机器人仿真器、
    的头像 发表于 01-05 16:24 806次阅读
    资讯速递 | 具身<b class='flag-5'>智能</b>PMC(筹)发布“零成本”开源鸿蒙<b class='flag-5'>智能</b><b class='flag-5'>机器人</b><b class='flag-5'>系统</b>

    EtherCAT主站协议栈EC-Master在ROS机器人操作系统)中的应用

    EtherCAT主站协议栈EC-Master在ROS机器人操作系统)中的应用
    的头像 发表于 12-10 14:46 636次阅读
    EtherCAT主站协议栈EC-Master在<b class='flag-5'>ROS</b>(<b class='flag-5'>机器人</b>操作<b class='flag-5'>系统</b>)中的应用

    探索RISC-V在机器人领域的潜力

    运行ROS 2,充分证明了RISC-V架构完全有能力承载机器人操作系统这样的复杂软件栈。它不仅是学习RISC-V的绝佳工具,更是探索未来边缘计算和智能
    发表于 12-03 14:40

    高精度机器人控制的核心——基于 MYD-LT536 开发板的精密运动控制方案

    集成方案; 开发者可直接对接上层 ROS 框架,实现多轴机器人同步控制与智能路径规划。 三、典型应用:高精度装配机器人控制系统 在某高端电
    发表于 11-14 15:48

    RK3576机器人核心:三屏异显+八路摄像头,重塑机器人交互与感知

    更多"、"互动流畅"是开发者面临的核心挑战。传统的单一屏幕和有限的视觉输入已成为提升机器人智能化水平的瓶颈。而瑞芯微RK3576高性能处理器的出现
    发表于 10-29 16:41

    遨博机器人以 “专业智能” 破局,让机器人从工业走向生活

    在第 25 届中国国际工业博览会的机器人展区,遨博展台依旧是观众与行业目光的焦点。作为协作机器人领域的领军企业,今年推出的 “具身智能” 系列机器人
    的头像 发表于 10-12 20:50 698次阅读

    工业机器人的特点

    的基础,也是三者的实现终端,智能制造装备产业包括高档数控机床、工业机器人、自动化成套生产线、精密仪器仪表、智能传感器、汽车自动化焊接线、柔性自动化生产线、智能农机、3D 打印机等领域。
    发表于 07-26 11:22

    通过vmRT-Thread和ROS2赋能机器人智能开发

    随着机器人技术的快速迭代升级,协作机器人、复合移动机器人和人形机器人等新兴应用场景对实时控制与智能决策的深度融合提出了迫切需求。然而,当前
    的头像 发表于 06-09 09:23 1760次阅读
    通过vmRT-Thread和<b class='flag-5'>ROS</b>2赋能<b class='flag-5'>机器人</b><b class='flag-5'>智能</b>开发

    盘点#机器人开发平台

    图,电子技术资料网站具身智能机器人****开发平台——Fibot广和通发布机器人开发平台-电子发烧友网NVIDIA Isaac 英伟达综合性机器人开发平台NVIDIA Isaac 是英
    发表于 05-13 15:02

    详细介绍机场智能指路机器人的工作原理

    机场智能指路机器人主要依靠感知系统、定位系统、导航系统智能交互
    发表于 05-10 18:26

    【「# ROS 2智能机器人开发实践」阅读体验】视觉实现的基础算法的应用

    阅读心得体会:ROS2机器人视觉与地图构建技术 通过对本书第7章(ROS2视觉应用)和第8章(ROS2地图构建)的学习,我对机器人视觉感知和
    发表于 05-03 19:41

    【「# ROS 2智能机器人开发实践」阅读体验】机器人入门的引路书

    ROS的全称:Robot Operating System 机器人操作系统 ROS的 目的 :ROS支持通用库,是通信总线,协调多个传感器
    发表于 04-30 01:05

    【「# ROS 2智能机器人开发实践」阅读体验】+ROS2应用案例

    的知识,还需要对ROS 2的节点通信和数据处理有一定的了解。通过实践这一部分内容,我掌握了如何在ROS 2中实现二维码识别,这对于提高机器人智能性和交互性具有重要意义。 地图构建:S
    发表于 04-27 11:42

    【「# ROS 2智能机器人开发实践」阅读体验】+内容初识

    规划:导航是机器人自主运行的关键功能。书中详细介绍了基于 ROS 2 的导航系统,包括地图创建、路径规划和导航控制等环节。首先,通过激光雷达等传感器获取环境信息,使用 SLAM(Sim
    发表于 04-27 11:24