如何使用慢速(30Hz)系统控制快速(200Hz)实时系统?


12

我们目前正在设计一种移动机器人+安装有多个受控自由度和传感器的手臂。

我正在考虑将架构分为两个部分:

  1. 一组实时控制器(运行Xenomai之类的RTOS的Raspeberry Pis或裸机微控制器)来控制机械臂电机和编码器。让我们称这些机器为RTx,x = 1,2,3…取决于微控制器的数量。该控制环路将以200Hz运行。

  2. 功能强大的香草linux机器,运行ROS来计算SLAM,mocap和执行高级逻辑(确定机器人的任务并计算电动机的所需位置和速度)。该控制环路将以30Hz运行。

我知道我的框架需要可扩展,以容纳更多的电机,更多的传感器,更多的PC(例如,用于外部Mocap)。

我的主要问题是决定如何使不同的RTx与PC1通信。我看过与机器人体系结构(例如HRP2)有关的论文,大多数情况下它们描述了高层控制体系结构,但是我还没有找到有关如何使高层与高层进行可扩展通信的信息。我错过了什么?

为了连接快速RT机器以确保通过PC1进行电机控制,我考虑了TCP / IP,CAN和UART:

  • TCP / IP:不确定,但易于部署。非确定性是一个现实问题吗(因为无论如何它只会在30Hz的低速下使用)?
  • CAN:速度慢,非常可靠,以汽车为目标(已经看到有一些示例将CAN与机器人配合使用,但看起来很奇怪)
  • UART:如果我只有一台用于电机控制的RT机器,我会考虑使用UART,但是我猜想该端口不能很好地与许多RTx配合使用。由于TCP / IP的不确定性,TCP / IP真的不可行吗?它是如此易于使用...

目前,没有任何解决方案对我来说真的很明显。而且由于找不到使用可靠且可扩展的特定解决方案的严肃的机器人示例,因此我没有做出选择的信心。

有没有人对此观点或文献有明确的看法?机器人上是否使用典型或主流的通信解决方案?


1
如果您正在研究实时网络,则可能需要看看EtherCAT
Shahbaz 2013年

1
从目前的情况来看,这个问题不太可能对未来的访问者有所帮助,而且由于本地化程度过高,可能会被关闭。将所有背景都放在一个位置虽然很有用,但我是否可以建议根据您面临的实际问题将其分为一系列实用且可回答的问题。请参阅是否可以征求意见?以获得更多背景。
Mark Booth

Answers:


8

我认为您迈出了良好的第一步;您已将问题分为移动平台(位置不确定,必须导航)和机械臂(通过编码器实时确定位置)。

我看过与机器人架构有关的论文,但还没有找到有关如何使低层与高层进行可扩展通信的信息。我错过了什么?

从您的描述中,听起来您正在尝试将每个RTx控制器直接绑定到运行ROS的PC1。您所错过的是,ROS被设计为处理一组可能以不同速率生成和使用数据的应用程序。

您的应用程序需要的是通信桥 -200Hz环路与ROS环境之间的单个接口。换句话说,不要将每个RTx控制器绑定到PC1,而是将所有RTx控制器绑定在一起,然后将连接到PC1。

例如,使用I2C总线将RTx系统链接在一起,然后添加另一个RTx控制器作为“手臂主机”(AM)。AM的工作是接受PC1友好格式和协议的传入命令,并将这些命令转换为I2C消息。然后,您将编写一个ROS应用程序以向AM发送命令。

使用I2C的另一种方法是将I2C控制器直接放在PC1上,并将所有的控制臂逻辑写入ROS应用程序。这似乎是实现目标的一种更简化的方法,但是当您删除系统的模块化时,它可能使调试更加困难-您必须将它作为一个大型复杂系统而不是两个易于测试的组件来进行故障排除。


我喜欢这种沟通桥梁的概念。我将看一下转发的链接。非常感谢!
arennuit

5

我要说的是,由于布线复杂性,确定性和可靠性,任何需要大量通信节点(传感器或执行器)的应用都将从系统总线实现(与点对点链接(例如UART或以太网)相反)中受益。模块化。

任何控制系统都需要高度的确定性,而高带宽通道(例如以太网)通常是较差的(特别是与引入大量调度抖动的通用OS配合使用时,请参见以下链接,了解有关调度确定性的讨论))。应用程序处理器(例如Raspberry Pi的ARM11)也可能不太适合实时系统(由于诸如中断等待时间和指令流水线之类的影响)。请参阅以下digikey讨论,比较ARM应用程序内核与微控制器的实时行为

遗憾的是,集成CAN的可用性没有UART(RS-485)或I2C(至今)广泛,因为我认为它确实简化了分布式传感和驱动问题。尽管通常的1 Mbps似乎很慢,但是在计算所有总线成员的刷新率之后,通常这绰绰有余(并且传输率始终可以提高,具体取决于总线长度,阻抗以及收发器是否允许)。还提供了出色的仿真软件,该软件基本上可以保证最坏情况下的响应时间(例如,“实时工作”具有一个名为RTaW-Sim的免费CAN总线分析仪)。最后,似乎集成CAN的MEMS传感器的可用性相当差。

Dynamixels AX和MX系列是将执行器配置为总线(或环)的另一个示例,其中每个电机都通过UART链接以菊花链方式连接到下一个。如果您有大量的执行器,这将大大简化系统设计。

但是,回到实际问题,我认为如果您将系统描述为实时设定点而不是命令(例如,连续广播电机角度而不是指示诸如goto angle之类的命令),则可以简化之间的耦合。 200 Hz和30 Hz环路。


嗨,埃迪,我刚刚注意到您的回答。您能否解释一下“点对点链接”和“系统总线”之间的区别?特别是您首先提到点对点是低年级,但随后您说dynamixel使用UART并很棒。。。不确定我是否遵循(尽管我同意系统总线在易用性方面带来了很多。谢谢;)
arennuit 2014年

Dynamixel使用的拓扑不是点对点串行,而是菊花链式连接(即环形拓扑或共享总线)。换句话说,每个电动机都有两个端口(一个用于输入,一个用于输出-连接到下一个电动机)。这样,您就没有星形拓扑,并且接线也更加简单。我也从未说过点对点通信的等级较低,但是在具有许多节点的网络中,其布线通常比较麻烦。
EDDY74

我知道了!感谢一年后的额外细节;)
arennuit

4

您似乎有两个要同时解决的独立(但相关)问题。让我们将难题分解成小块:

  1. 如何命令从慢速系统(30Hz)传递到快速控制器(200Hz),如何将以200Hz接收的数据传回30Hz智囊团?
  2. 当我只能告诉机器人在30Hz处做什么时,如何控制 200Hz处发生的情况?

最初的问题似乎表明,第1项可以在硬件中解决-您可以将200Hz的数据排队,然后将30Hz的数据包发送到更高级别的系统。您可以使用TCP / IP,也可以使用CAN,具体取决于要发送的数据量。不同的硬件具有不同的最大数据速率。如其他帖子所述,添加像ROS这样的体系结构级别以充当通信桥/仲裁器也可能会有所帮助。

第2项是仅靠硬件无法解决的控制理论问题。所需的SLAM,位置和速度确定以及任务确定将需要更加智能,因为它们发送和接收信息的频率降低了。您可能需要2个控制回路200 Hz时1个,30Hz时1个。

还有许多其他问题涉及前馈,反馈和PID控制回路,但是您特别询问了可伸缩性-大多数大型系统的伸缩方式是通过分层控制回路和逻辑,从而使最少的必要信息遍历任何硬件你最终。例如,您的最高级别控制器可能仅将目标位置点和平均目标速度提供给较低级别​​的目标,而不是每秒改变30次速度。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.