以马达控制器ROS1驱动程序实现机器人操作系统

以马达控制器ROS1驱动程序实现机器人操作系统
2025年01月21日 09:21 电子产品世界

机器人操作系统(ROS)驱动程序是基于ADI产品而开发,因此可直接在ROS生态系统中使用这些产品。本文概述如何在应用、产品和系统(例如自主导航、安全气泡地图和数据采集机器人)中使用和整合这些驱动程序;以及如此将如何有助于迅速评估新技术,并避免出现与第三方产品的互操作性问题。

在本文探讨的所有产品中,将重点关注用于ADITrinamic马达控制器的ROS驱动程序,该驱动程序是用于嵌入式运动控制的完整板级模块,融合ADITrinamic运动控制专业知识,以及ADI的模拟技术和电源设计技能。

什么是ROS?

ROS是机器人中间件,包含一组软件库和强大的开发工具(从驱动程序到先进算法),可作为机器人系统或应用的开发基础。ROS涉及多领域(例如消费性电子、工业、汽车等),支持多个平台(Linux、Windows、MacOS和一些嵌入式平台),而且100%开源。得益于来自全球技术社群的专用资源,ROS可获得丰富的支持,进而帮助用户简化其设计和应用。

技术工作原理

ROS始于2007年,已成为自驾车、工业机器人、飞行器等领域备受欢迎的机器人开发原型制作平台。经过不断发展,该技术现在已经有两个版本:ROS1和ROS2。ROS1和ROS2系统必须相互隔离,但通过ROS桥,这两个系统之间可进行通讯和交换数据。

本文引用地址:

表一:ROS1和ROS2的主要区别

因素

ROS1

ROS2

通讯协议

XMLRPC   + TCPROS

DDS

构建

ROS 主控制器 + 分布式

完全分布式

构建系统

Catkin (基于cmake)

colcon/ament

(基于cmake)

构建输出

ros_ws/devel

ros_ws/install

参数

全局参数服务器

  动态重新配置

每节点参数

发布

XML

Python (+XML、YAML 替代语言)

命令

roslaunch、rosrun、rostopic等

ros2   launch、 ros2 run、 ros2 topic等

平台

主要是ubuntu

Linux、MacOS、 Windows

ROS支援的平台

ROS Noetic是ROS1的最终版本,将于2025年5月终止支持,而ROS2自2020年6月推出以来则不断滚动更新发行版。

ROS基本概念

图一显示了ROS的一些基本概念,包括功能包、节点、主题、服务和消息。

图一:ROS基本数据流。

注:对ROS1和ROS2而言,下文讨论的ROS基本概念相似。

功能包

ROS功能包是ROS程序或节点的主要组织系统。这是ROS中最核心的构建/发表项。创建ROS功能包时,请务必设定专用的ROS工作空间。该工作空间被称为catkin工作空间,其中catkin是ROS的官方构建系统。

节点

ROS节点是在ROS中创建的可执行程序。它们是执行特定任务的进程。ROS节点可使用ROS客户端库(如Python客户端库rospy和C++ 客户端库roscpp)相互通讯。节点可以订阅和/或发表主题,也可以提供或使用服务。

主题

ROS主题是ROS节点生成(或者发表,以ROS术语而言)的数据信道。

在ROS中,发表者节点是主题的广播者,而订阅者节点是主题的收听者。

在图二中,generic_motor_control的节点是广播者。/cmd_vel是velocity_ publisher发表的主题。这表示,velocity_publisher提供基于马达控制(或命令速度)的速度信息。

图二:发表者-订阅者

而ros_application的节点是收听者,velocity_subscriber订阅主题/cmd_vel。这表示,velocity_subscriber存取或使用velocity_publisher提供的速度信息。

消息

主题是数据信道,而消息是数据,采用与ROS兼容、适用于不同传感器的格式。

以下是适用于ROS消息格式的示例传感器:

‧ 飞时测距(ToF)摄影机:sensor_msgs/Image、sensor_msgs/PointCloud

‧ 惯性测量单元(IMU)传感器:sensor_msgs/Imu

‧ 马达控制:geometry_msgs/Twist

‧ 车轮编码器:geometry_msgs/TwistStamped、geometry_msgs/TwistWithCovarianceStampe

ROS主题透过发送消息(主题发布者)或接收消息(主题订阅者)进行通讯,并且必须采用匹配的数据类型。

例如,在图二中,来自velocity_publisher节点的速度信息(命令速度)希望被velocity_subscriber节点存取/使用。如果主题发布者velocity_publisher使用数据类型geometry_msgs/Twist,则主题订阅者velocity_subscriber也应使用相同的数据类型。

服务

发表者-订阅者通讯模式是开放式模式,不适用于分布式系统中通常需要的回复交互。服务支持节点透过发送请求和接收响应进行通讯。发表者-订阅者通讯模式使用.srv档,在这些档中,指定了请求和响应的消息类型等服务描述。

服务是双向同步通讯模式,其中包含客户端和服务器。服务器节点提供服务,而客户端节点发送请求并等待服务器节点做出回应。

例如,在图三中,server_node提供服务SetVelocity.srv以更改命令速度vel。该服务接受float32格式的速度值,并以字符串格式返回状态;如果设置了请求的速度,则为"success";否则,为"FAIL"。

图三:使用服务示例

client_node发送请求,将命令速度设定为2.5 mbps。server_node收到请求后,立即发送"success"响应。

将解决方案整合至ROS生态系统

ADI是ROS-Industrial联盟的正式成员,ROS-Industrial是一个开源项目,旨在将ROS软件的先进功能扩展到与工业相关的硬件与应用中。作为该技术社群的一份子,ADI最初的目标是针对工业领域开发专用模块。

ADI针对不同的专用模块开发了ROS驱动程序。为了展示所开发的驱动程序并利用ROS的功能,ADI也开发了ADI自主移动机器人(ADAM)作为内部自主移动平台(参见图四)。

图四:ADAM

ADAM:ADI自主移动机器人

ADAM由ROS提供支持,并搭载ROS支持的不同组件。该平台展示了ADI的ROS驱动程序如何整合到移动机器人应用中,特别是自主导航应用。

图五所示为具有不同模块的ADAM的简化硬件图。该ADAM主要连接以下组件:

‧ ADIS16470或IMU传感器采用精密陀螺仪、加速度计、磁力计和压力传感器的多轴组合,这些组件主要用作检测回馈,用 于改善位置/方向估算。

‧ ADBMS6948是一款多单元电池监控器,可测量多达16个串联连接的电芯,在整个温度范围内具有较高的测量精度。

‧ EVAL-ADTF3175D-NXZ或 CMOS ToF提供出色的高分辨率,与深度运算和处理、激光驱动器、电源管理以及具有参考韧体/软件的开发工具相辅相成,可带来更多优势。

‧ ADI Trinamic马达控制器是用于嵌入式运动控制的完整板级解决方案,融合ADI Trinamic运动控制专业知识,以及ADI的仿真工艺技术和电源设计技能。1

图五:ADAM硬件图

图六所示为ADAM的简化ROS架构,该ADAM使用ROS驱动程序和自主导航所需的多个应用/算法节点。IMU数据(/imu/data_raw)和ADI Trinamic马达控制器回馈(/tmc_info)用作姿态估算的输入,从而得到机器人的里程测量结果(/odom)。激光雷达数据(/scan) 是用于生成地图的同步定位与地图绘制(SLAM)算法的主要输入;ToF数据(/image_raw) 还可用作其他SLAM算法的输入。然后,move_base节点 将等待用户发出任何目标姿态,并向ADI Trinamic马达控制器发送速度指令(/cmd_vel),使机器人能够移动。

图六:ADAM导航堆栈的简化ROS架构。

ADI Trinamic马达控制器ROS驱动程序

ADI Trinamic马达控制器(TMC)是用于嵌入式运动控制的完整板级解决方案,融合ADI Trinamic运动控制专业知识,以及ADI的模拟技术和电源设计技能。支援单轴/多轴步进马达、无刷直流马达(BLDC)等各类马达,可用接口包括 CAN、 EtherCAT、RS-232、RS-485 和USB,支持的协议涵盖Trinamic运动控制语言(TMCL)、CANopen、 over EtherCAT (CoE)、 CANopen 或 Modbus。

名为TMCL-IDE的IDE可协助用户开发应用并对这些模块轻松重新编程。该IDE使用TMCL实现独立操作,或使用标准化CANopen协议,允许用户设定参数、实时针对资料进行可视化处理,并开发/调试独立应用。

由于TMC使新型智慧执行器成为可能,并且随着ROS而日益普及,尤其是在机器人领域中,我们针对这些模块开发了额外的支持,如ROS驱动程序,进而进一步扩展制造业和工业自动化的用例。具体来说,预计这些ROS驱动程序将能够控制马达的速度、位置或扭矩,以及监控马达控制器和马达信息。

TMC ROS驱动程序与TMCL-IDE提供的功能相似,但其能够让支持ROS的系统节点轻松使用这些TMC,无需安装任何其他驱动程序。截至本文发表之时,该驱动程序仅支持CAN接口(特别是SocketCAN),其他接口正在开发中,很快也将提供支持。此处列出目前支持的ADI Trinamic马达控制器模块(TMCM)。

软件架构

图七所示为adi_tmcl的简化软件架构。

图七:adi_tmcl的简化软件架构

如图七所示,由于adi_tmcl使用大多数Linux系统默认支持的SocketCAN 驱动程序,所以不需要任何额外的驱动程序。此外,adi_tmcl具有自己的TMCL协议解析器,因而能够理解用户请求的符合TMCL的发送/接收指令。作为最后一层,tmcl_ros_node以发表者、订阅者和服务的形式在ROS系统上提供直接接口。每种形式均提供特定的功能,这些功能可选择使用一组参数进行配置。

结论

运用ADI Trinamic马达控制器可实现新型智慧执行器。随着ROS日益普及,尤其是在机器人领域,针对这些模块开发额外支持,如ROS驱动程序,旨在进一步扩展制造业和工业自动化用例。

本文展示ROS如何扩展组件,其带来的优势为提供附加价值,例如扩展工业应用;透过ROS通讯框架,与第三方产品可轻松实现互操作;提供更广泛的选项,方便客户在其系统中选用产品;快速评估新技术并立即开始使用。

(本文作者为ADI软件系统工程师Krizelle Paulene Apostol,资深软件系统工程师Jamila Macagba及软件系统设计工程经理Maggie Maralit)

新浪科技公众号
新浪科技公众号

“掌”握科技鲜闻 (微信搜索techsina或扫描左侧二维码关注)

创事记

科学探索

科学大家

苹果汇

众测

专题

官方微博

新浪科技 新浪数码 新浪手机 科学探索 苹果汇 新浪众测

公众号

新浪科技

新浪科技为你带来最新鲜的科技资讯

苹果汇

苹果汇为你带来最新鲜的苹果产品新闻

新浪众测

新酷产品第一时间免费试玩

新浪探索

提供最新的科学家新闻,精彩的震撼图片