基于机器人操作系统的六自由度机械臂通过 CAN总线接口控制

摘要

在本研究工作中,我们提出了一种机制,其中代表机械臂六个自由度(DOF)的六个执行器节点通过控制器局域网络(CAN)总线连接,构成其通信网络,并接收来自通用控制器(树莓派)的命令。在主机PC的 Gazebo仿真器中建立了仿真环境,并通过Rviz对机械臂进行实时分析。在仿真过程中,机械臂接收来自主机PC上集成的操纵杆的指令。各关节位置相对于操纵杆命令的信息通过无线网络发送至通用控制器,并通过CAN网络硬件设置显示消息已接收的指示。该架构为学习具有多个自由度的复杂机器人系统的工作原理提供了一个有效的框架。

关键词

机器人操作系统, CAN, Rviz, 仲裁, 统一机器人描述格式, MoveIt.

一、引言

机械臂可用于多种应用,从特定工业任务到帮助身体残疾的人群。根据需求,它可以具有多个自由度。通过对该设备进行仿真,我们可以学习并推断其物理机制以及用于执行特定任务的算法。

机器人操作系统(ROS)提供了一个框架,使我们能够分析机器人系统的硬件和软件各个方面。ROS中的基于节点的通信机制帮助用户在系统结构中的各个实体之间传递信息,例如传感器和控制器之间通过话题进行通信。在需要将传感器数据发送到主控制器的场景中,可以通过话题以消息的形式发送数据,从而模拟总线机制。这个开源项目易于使用,在处理机器人设备时抽象了大量复杂性。ROS还提供了一个内置的操纵杆控制软件包,名为joy。该节点通过发布消息,使我们能够监控操纵杆按钮的当前状态。ROS提供的MoveIt包为我们提供了机械臂运动所需的轨迹,以使机器人的末端执行器到达指定位置。ROS提供了一个仿真平台,用于仿真和学习,实现了对复杂性的抽象。

在实现算法以及允许研究和开发中代码复用方面,大大降低了复杂性。

控制器局域网络(CAN)总线是一种基于双线消息的协议,允许多个电子设备相互通信。总线上的每个设备被称为节点,由微控制器、CAN控制器和CAN收发器组成。该协议的主要优点是,连接到总线的任何节点都可以充当主控。车辆必须配备此类网络系统。例如,汽车中的CAN网络允许所有电子控制单元(ECUs)相互通信。由于其为双线协议,也避免了复杂布线的需求。正是这种机制通过接收安全带传感器的输入来提醒您系好安全带。

II. 问题定义

仿真或模拟过程在开发机器人模型时起着至关重要的作用。在实现诸如硬件磨损等复杂系统时,有许多方面需要考虑并确认。仿真还允许我们在系统构建之前确定其正确性和效率。在仿真环境中,我们可以使系统处于不切实际的情况下运行,以找出其正常的运行极限,这至关重要,而在现实世界场景中这样做是不明智的。ROS仿真环境RVIZ通过持续发布机器人状态,使其关节和连杆的调试与修改变得更加容易。我们只需为该软件包提供机器人的一种特殊文件,即统一机器人描述格式(URDF)文件,即可让其分析机器人的物理模型,如关节和连杆。

CAN作为一种多主协议,允许系统中的每个节点在需要传输数据时,只要赢得仲裁过程,即可成为总线控制器。与串行外设接口(SPI)或集成电路间总线(I2C)等其他协议相比,CAN总线的主要优势在于其内置的错误机制,能够处理每个节点的传输错误。当发生传输错误时,产生错误的节点会在要发送的数据帧中置起一个错误标志,并自动销毁该消息,从而防止无用的总线流量。

III. 相关工作

使用MATLAB的SIMULINK对机器人进行仿真,如论文 [1]中所述,并通过估算电机‐齿轮传递函数实现。通过定义不同的轨迹来测试机器人。结果显示了仿真系统和实际机器人的设计精度以及系统控制响应。必须采用有效的方法来控制CAN总线上的通信流量,因为若无法确保这一点,将可能导致总线中实际系统的性能下降。在研究论文[2],中讨论了一种带宽分配算法,以有效利用制造自动化和过程控制系统中现场设备的CAN总线。研究论文[3]指出了消息及时接收的重要性。在硬实时系统中,确保消息按时在CAN总线上被转发至关重要。在汽车系统中,若未能做到这一点,可能危及人类生命安全。因此,有必要中止延迟的消息,以限制实时误差,并确保其他消息和进程的时效性。

研究论文[4]提出了一种系统性的方法,可用于监控汽车CAN控制设备或整个网络。本项目中使用了MC9SDP256 CAN控制器和TJA1050 CAN收发器。该系统可用于发送、接收和记录在CAN总线上传输的数据帧。研究论文[5]提出了一种入侵检测算法,用于识别攻击者注入现代车辆CAN网络中的恶意CAN消息。首先收集正常情况下的CAN总线流量,并以转移矩阵的形式进行建模。该算法的异常检测阶段利用转移矩阵来检验两个不同ID之间的转换。如果该转换在矩阵中标记为假,则判定为异常。

研究论文[6]讨论了CAN总线上的两个节点,其中一个为发送器,另一个为接收器。机械臂连接至接收器节点,该节点接收消息,计算机械臂关节的期望位置,并设置伺服驱动以实现执行器运动。研究论文[7]实现了一种通过键盘控制6自由度机械臂的有效仿真方法。该机械臂在Rviz中进行可视化,Rviz是机器人操作系统用于查看RVIZ仿真器数据的另一款工具。该机器人使用Solid Works建模,并利用ROS提供的MoveIt包进行控制,同时使用IK求解器实现逆运动学。研究论文[8]采用了类似的方法。除操作器外,还集成了由两个独立手指构成的夹持机构。通过MoveIt包测试了不同的规划器,并在Rviz中对运动规划进行了可视化。论文[9]中使用MATLAB实现了4自由度操作器的运动学模型设计。采用Denavit‐Hartenberg方法确定机器人关节的角度,该方法是一种编写操作器运动学方程的系统化方法。

研究论文[10]描述了一种在ROS平台上通过融合车轮和惯性测量单元的编码器数据,以实现机器人在不平坦地面上进行PID控制的有效方法。研究论文[11]介绍了在ROS平台上通过求解逆运动学方程来实现机械臂自动化的详细内容。在本文中,机械臂被安装在椰子树攀爬机器人上,用于从树枝上砍下椰子。通过激光测距法获取椰子的坐标,并使用USB摄像头识别目标物体本身。物体的位置信息被传递给机器人操作系统提供的运动学求解器,进而将计算出的关节角度传递给执行器。

如今,对水位、污染和全球变暖的持续监测确实已成为一种必要。在研究论文[12],中,使用机器人操作系统(ROS)框架以及ROS提供的串行节点通信包来监控来自温度传感器和湿度传感器的传感器数据。此外,还可以通过Twilio云通信平台将数据作为短消息服务(SMS)发送给相关负责人。研究论文[13]证明了机器人操作系统(ROS)的应用程度。该论文讨论了无人水下航行器的实现。使用机器人操作系统(ROS)进行了仿真和实时实验,并与比例‐积分‐微分任务控制器(PID mission controller)进行了比较。该控制器与现有的无人水下航行器——GIRONA 500 UUV(无人水下航行器)进行了对比,结果表明其具有良好的跟踪性能。

研究文章[14]讨论了控制基于ROS的轮式机器人的不同方法。系统采用树莓派3(RPi 3)作为主控制器,并使用Python编程语言设计软件系统。控制方式包括基于语音、键盘、图形用户界面(GUI)和操纵杆等多种方法。机器人响应各种命令并遍历不同路径(如直线、矩形、U型转弯等)所需的时间已被制表列出。[15]实现了一种基于机器人操作系统(ROS)的自主轮椅,供残疾人使用。一个自主机器人应具备在导航过程中避免与障碍物碰撞的能力。该功能通过使用3D传感器实现的同步定位与地图构建(SLAM)算法添加到轮椅中。

IV. 系统架构

示意图0

图1显示了硬件框图,机械臂各执行器与其主控制器之间的通信在硬件上实现,其中六个Arduino和一个树莓派(RPi)分别作为执行器从机(表示为节点)和主控制器。

我们的目标是模拟一个6自由度机械臂的工作过程,其中六个执行器作为从机与主控制器协同工作。

CAN总线使用MCP2515 CAN模块构建,该模块将主控制器发送的消息转发给连接到CAN总线的所有从机。每个从机均连接一个LED灯,根据主控制器的命令点亮或关闭,以指示从机确实处于活动状态。此外,通过软件实现向主控制器提供反馈,这是从机已响应主控制器命令的另一指示。

向树莓派的命令由作为ROS主节点的主机PC发出。ROS主节点接收来自操纵杆的命令,并通过Wi‐Fi连接将其发布到树莓派,树莓派再通过CAN总线将消息转发给从机。总线两端各连接一个额定为120欧姆的终端电阻。这些终端电阻的唯一作用是吸收CAN信号能量,确保信号不会从总线末端反射,从而防止干扰以及对传输信号造成潜在损害。

示意图1

图2展示了CAN节点的高层结构图。每个节点由一个微控制器单元、一个CAN控制器和一个CAN收发器组成。在本文中,我们使用Arduino作为微控制器单元(MCU)。Microchip的MCP2515 CAN模块集成了MCP2515 CAN控制器IC和TJA1050 CAN收发器。微控制器被配置为仅接收具有特定ID的消息。总线上的任意两个节点不能同时接收相同ID的消息。哪个节点赢得总线传输权由控制器通过一种称为仲裁的过程来决定。当两个节点同时尝试传输时,ID较小的节点具有更高的优先级,从而赢得总线使用权。该消息被广播后,需要此消息的节点将接收并进一步处理它。

五、设计与实现

A. 机器人模型

示意图2

图3所示的机器人模型使用SOLIDWORKS设计,并导出为与机器人操作系统(ROS)兼容的通用机器人描述格式(URDF)文件。该文件定义并提供了机器人的物理结构和属性,例如连杆、关节、惯性和质量。

B. ROS主节点

本文中,ROS主节点是用于进行机械臂仿真的主机PC。通过“roscore”命令启动ROS主节点。此外,多个系统可以通过网络连接,其中一个系统作为主控,其余系统作为从机。

C. 仿真环境

ROS RVIZ平台用于模拟6自由度机械臂。该领域定义了一个世界坐标系,用于模拟模型。可以在urdf文件中修改机器人基座连杆的坐标,以使其在世界坐标系中具有初始位置。

D. joy节点

joy包提供了将操纵杆集成到机器人操作系统(ROS)的驱动程序。该节点发布了一条如图4所示的消息。在本项目中,我们使用的是zebion制造的操纵杆。发布的消息显示了各个按钮的当前状态以及每个按钮发布的值。

示意图3

E. MCP2515 CAN控制器

微芯科技的MCP2515控制器IC实现了CAN V2.0B,即速率为1Mb/s的数据帧格式。它支持最长8字节的数据传输。其工作电压范围为2.7至5.5V,并通过串行外设接口(SPI)与微控制器连接。

F. TJA1050

TJA1050是CAN协议控制器与物理总线之间的接口。该集成电路(IC)作为收发器,负责驱动和检测CAN总线上的数据传输。此外,它还将控制器所使用的单端传输逻辑转换为差分信号传输到总线。它主要用于使用60千波特至1兆波特波特率的高速汽车应用,向总线提供差分发送能力,并向CAN协议控制器提供差分接收能力。

VI. 软件实现

示意图4

图5显示了所用软件设置的高层架构。在本文中,我们使用6个Arduino作为执行器,代表每个关节的控制器。开源社区提供了一个库,可用于将Arduino与微芯科技的MCP2515板集成。

CAN总线通过将数据交换速率设置为指定的比特率来初始化。微控制器检查是否有数据在CAN总线上被转发。由于节点被配置为仅接收具有特定ID的消息,因此可以实施检查,以确保只有当接收到的消息具有所需ID时才执行某段代码。这意味着,如果主控(即树莓派)发送一个ID为0xAA的消息,配置为接收该消息的从设备将响应或接受该数据帧;而对于其他节点,由于检查失败,不会进行进一步的执行。如果ID检查成功,接收到的数据将被读入缓冲区。从节点也可以在总线上转发消息。在主控制器(即树莓派)上,我们使用Python的CAN包来在总线上传输数据。树莓派也需初始化CAN数据交换速率,且该速率应与从机设置的速率相同。

/joy主题由joy节点发布,并被点动控制包订阅。因此,点动控制包将笛卡尔坐标发布到/jog_frame话题。MoveIt包随后订阅/jog_frame话题,并利用这些笛卡尔坐标来点动机械臂。同时,/joint_state被在树莓派上运行的Python脚本订阅,并通过CAN总线转发一条消息。图6显示了整个系统的rqt图。利用此功能可以轻松理解基于ROS话题的整个系统的通信路径。/subscribed_topic表示树莓派节点所订阅以接收关节角度值的话题。

示意图5

VII. 实验和结果

实验在三种场景下进行。第一种是使用一个主节点和一个从节点,第二种是使用六个从节点、一个主节点以及一个图形界面,第三种是使用机械臂的仿真。在第一个实验中,我们将主控制器节点(即树莓派)和一个CAN模块与一个包含Arduino和CAN模块的从节点连接(如图7所示)。可以通过树莓派上的Python脚本发送命令,其中“0”表示关闭,“1”表示开启。从节点被设置为持续接收该信息。此外,一个LED灯也连接到从节点,仅当Arduino通过CAN总线接收到消息时,LED灯才会点亮。在图7中,Arduino微控制器和CAN模块1构成节点二,树莓派和CAN模块2构成节点一。

示意图6

第二次实验包括通过图形用户界面(GUI)进行控制,如图8所示。控制命令作为嵌入在话题中的消息通过无线网络发送。使用JavaScript库创建了一个名为/ledControl的话题,并将表示开启为1、关闭为0的消息放入该话题中。当按下“LED 1”按钮时,字符串消息“1”被嵌入到/ledControl话题中并通过无线网络发布。树莓派上的Python脚本可以订阅该特定话题,并在为消息分配ID后将其发送连接到CAN总线上。在图8中,图形用户界面使用Electron平台创建,并通过名为ROS桥接服务器的软件包连接到ROS主节点。

示意图7

在第三次实验中,我们在总线上连接了五个额外的从机(如图10所示)。这样做的目的是为了抽象地表示一个具有六个自由度的机械臂。命令由joy节点发送到机器人操作系统主节点上的Rviz以控制某个关节。同时,信息也从Rviz服务器获取,并通过Wi‐Fi连接发送到树莓派。此处发布的主题称为/joint_state(图9),显示了各个关节的名称以及每个关节位置或角度的弧度值。树莓派随后通过特定ID在CAN总线上广播关节值。每个从节点均设置为接收具有唯一地址的命令。LED灯也连接到从节点上,只有在满足正确校验条件时才会被置为高电平。图10显示,当仅基座关节沿z轴旋转时,连接到从节点1的LED 1被点亮。

示意图8

示意图9

在前两种设置中,还记录了数据传输和接收之间所花费的时间。该时间使用名为time的Python标准库进行测量。创建了一个名为/canComm的新主题,并执行了一个订阅/canComm的Python脚本。数据以字符串形式发送,每当Python脚本接收到数据时,就会在CAN总线上广播一条消息。此外,通过记录前两种场景下传输和接收之间所用的时间进行了分析(如表1和表2所示)。

Table. 1. 传输与接收之间在sc中所用时间 Scenario 1

测试周期 毫秒时间
1 3.9
2 4.0
3 4.0
4 3.9
5 4.0
平均值 4.0

表2. 场景2中传输与接收之间的时间

测试周期 毫秒时间
1 5.3
2 8.4
3 4.2
4 4.9
5 5.1
平均值 5.6

从上述两个场景可以推断出,在使用图形用户界面的第二个场景中,传输和接收之间所花费的时间比第一个场景更长。

VIII. 结论

作为本研究工作的一部分,在SOLIDWORKS中开发了一款机械臂,导出为ROS中的URDF格式,在Rviz环境中进行仿真,并通过MoveIt包和joy节点进行控制。此外,关节角度或关节位置被发送到CAN网络上的相应从节点。该设置模拟了机械臂的实时运行,证明了无需向每个执行器单独发送控制命令。在不同情况下进行了实验,并使用不同方法对不同节点之间的通信进行了分析。关节位置或角度被发送到CAN总线上的相应MCU,并且从该从设备接收反馈,反馈信息显示在连接到树莓派的显示器上。还针对场景一(一个树莓派节点与一个从节点相连)和场景2(通过图形用户界面实现LED控制)进行了基于时间的分析,以评估数据传输与接收情况。

在两种设置中,时间延迟均可忽略不计,证明了CAN协议在需要强制进行事件报告的关键系统中的重要性。图形用户界面方法是一种附加功能,可模拟对机械臂的控制。CAN协议是一种 robust 的通信技术,其内置多种特性,使其相较于以太网等其他协议更具优势。基于地址的传输和接收机制有助于工程师在测试或调试时快速识别和解决问题。如果某个节点开始出现故障,可通过配置使其发送高优先级消息,从而确保网络中其他节点的正常运行。在所有提出的方法中,我们均使用了Arduino来代表6自由度机械臂的各个执行器。然而,在制造机械臂最终产品时,这种方法并不理想,因为Arduino所采用的ATmega328P集成电路最高仅提供16兆赫兹的时钟速度,可能导致延迟。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐