我正在考虑将体系结构分为两个部分:
一组实时控制器(运行Xenomai之类的RTOS的Raspeberry Pi或裸机微控制器)用于控制手臂电机和编码器。让我们称这些机器为RTx,x = 1,2,3…取决于微控制器的数量。该控制循环将以200Hz运行。
运行ROS的功能强大的香草linux计算机可以计算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真的不可行,因为它具有非确定性特征?它是如此易于使用...
目前,没有任何解决方案对我来说真的很明显。而且由于找不到使用可靠且可扩展的特定解决方案的严肃的机器人示例,因此我没有做出选择的信心。
是否有人对此观点或文献有明确的看法?机器人上是否使用典型或主流的通信解决方案?
#1 楼
我认为您迈出了良好的第一步;您已将问题分为移动平台(位置不确定,必须导航)和机械臂(通过编码器实时确定位置)。我看过与机器人体系结构有关的论文,但是我还没有找到有关如何使低层与高层进行可扩展通信的信息。 。我错过了什么吗?
从您的描述中,听起来您正在尝试将每个RTx控制器直接绑定到运行ROS的PC1。您所错过的是,ROS被设计为处理一组可能以不同速率生成和使用数据的应用程序。
您的应用程序需要的是通信桥— 200Hz环路与ROS环境之间的单个接口。换句话说,不要将每个RTx控制器绑定到PC1,而是将所有RTx控制器绑定在一起,然后将其连接到PC1。
例如,使用I2C总线将RTx系统链接在一起,然后添加另一个RTx控制器作为“ Arm Master”(Arm Master)。 AM的工作是接受PC1友好格式和协议的传入命令,并将这些命令转换为I2C消息。然后,您将编写一个ROS应用程序以向AM发送命令。
使用I2C的另一种方法是将I2C控制器直接放在PC1上,并将所有的手臂控制逻辑写入ROS中应用程式。这似乎是实现目标的一种更简化的方法,但是当您删除系统的模块化时,它可能会使调试变得更加困难-您必须将它作为一个大型复杂系统而不是两个易于测试的组件进行故障排除。 br />
评论
$ \ begingroup $
我喜欢这种沟通桥梁的概念。我将看一下转发的链接。非常感谢!
$ \ endgroup $
– Arennuit
13年1月21日在10:55
#2 楼
我想说,由于布线的复杂性,确定性和可靠性,任何需要大量通信节点(传感器或执行器)的应用都将从系统总线中实现(与点对点链接(例如UART或以太网)相反)。任何控制系统都需要高度的确定性,而高带宽通道(例如以太网)通常较差(特别是与引入大量调度抖动的通用OS配合使用时,有关调度确定性的讨论,请参见以下链接。应用程序处理器(例如Raspberry Pi的ARM11)也可能不太适合实时系统(由于诸如中断等待时间和指令流水线之类的影响)。请参阅以下有关比较ARM应用程序内核与微控制器的实时行为的Digigikey讨论。
集成CAN的可用性没有UART(RS-485)或I2C(但是),因为我认为这确实简化了分布式感应和驱动的问题。尽管通常的1 Mbps似乎很慢,但是在计算所有总线成员的刷新率之后,通常这绰绰有余(并且传输率始终可以提高,具体取决于总线长度,阻抗以及收发器是否允许)。还提供了出色的仿真软件,该软件基本上可以保证最坏情况下的响应时间(例如,“实时工作”具有一个名为RTaW-Sim的免费CAN总线分析仪)。最后,似乎集成CAN的MEMS传感器的可用性相当差。
Dynamixels AX和MX系列是将执行器配置为总线(或环)的另一个示例,其中每个电机通过UART链接以菊花链形式连接到下一个。如果您有大量的执行器,这将大大简化系统设计。
但是,回到实际问题,我认为如果将系统描述为实时设定点而不是命令(例如,连续广播电机角度而不是指示诸如goto angle之类的命令),则可以简化之间的耦合。 200 Hz和30 Hz环路。
评论
$ \ begingroup $
嗨,埃迪,我刚才注意到了你的回答。您能否解释一下“点对点链接”和“系统总线”之间的区别?特别是您首先提到点对点是低年级,但随后您说dynamixel使用UART并很棒。。。不确定我是否遵循(尽管我同意系统总线在易用性方面带来了很多。谢谢;)
$ \ endgroup $
– Arennuit
2014年8月6日上午10:34
$ \ begingroup $
Dynamixel使用的拓扑不是点对点串行,而是菊花链式连接(即环形拓扑或共享总线)。换句话说,每个电动机都有两个端口(一个用于输入,一个用于输出-连接到下一个电动机)。这样,您就没有星形拓扑,并且接线也更加简单。我也从来没有说过点对点通信的等级较低,但是在具有许多节点的网络中,其布线通常比较麻烦。
$ \ endgroup $
– EDDY74
2014年8月6日上午10:56
$ \ begingroup $
我明白了!感谢一年后的额外细节;)
$ \ endgroup $
– Arennuit
2014年8月8日在7:22
#3 楼
您似乎有两个要同时解决的独立(但相关)问题。让我们将难题分解成小块:我如何将命令从慢速系统(30Hz)传递到快速控制器(200Hz),以及如何传递在回到200Hz到30Hz的智囊团?
当我只能告诉机器人以30Hz的频率做事时,如何控制200Hz的情况?
项目1可以通过硬件解决您最初的问题似乎指向您-您可以将200Hz的数据排队,然后将30Hz的数据包发送到更高级别的系统。您可以使用TCP / IP,也可以使用CAN,具体取决于要发送的数据量。不同的硬件具有不同的最大数据速率。如其他帖子所述,添加像ROS这样的体系结构级别以充当通信桥/仲裁器也可能会有所帮助。
项目2是一个控制理论问题,仅靠硬件无法解决。所需的SLAM,位置和速度确定以及任务确定将需要更加智能,因为它们发送和接收信息的频率降低。您可能需要2个控制环:1个200Hz,1个30Hz。
还有很多其他问题,涉及前馈,反馈和PID控制回路,但是您特别询问了可伸缩性-大多数大型系统的扩展方式是通过分层控制回路和逻辑,以便最终所需的任何硬件都将获得最少的必要信息。例如,您的顶级控制器可能仅将目标位置点和平均目标速度提供给较低级别的目标,而不是每秒改变30次速度。
评论
如果您正在研究实时网络,则可能需要看看EtherCAT!从目前的情况来看,这个问题不太可能对未来的访客有所帮助,而且由于本地化程度过高,可能会被关闭。将所有背景都放在一个位置虽然很有用,但我是否可以建议根据您遇到的实际问题将其分为一系列实用且可回答的问题。请参阅是否可以征求意见?以获得更多背景。