从“能动“到“稳定“:OpenArm 开源机械臂 CAN 通信链路整改指南

版权说明:转载/引用本文内容请注明出处(鲲弘电子文档中心),并保留原文链接。

原链接:https://docs.kunhong-elec.com/zh/applications/robotics/openarm-link-optimization.html

前言

在开源机器人领域,OpenArm 无疑是一个非常成功的项目。从教学、科研到个人开发,OpenArm 都具有非常高的参考价值。

但如果从工程产品的角度来看,一个系统从"能够运行(Works)"到"稳定可靠(Reliable)",往往还需要经历细致的工程化打磨。

我们在对 OpenArm 进行测试和调试的过程中,发现其 CAN 总线物理链路仍然存在几处明显有待优化的地方。这些问题在日常使用场景下可能不明显,但在一些更严格的通信环境中可能会带来潜在风险。

问题汇总速览

表面上看,官方提供的整机表现上没什么问题,但用户在进行调试时又经常遇到各种问题。

在进一步对 CAN 总线进行检查后,我们发现其中存在一些典型但容易被忽视的问题:

  1. CAN 终端电阻布置错误(开源文档没有任何关于终端电阻设置的提示)
  2. 电源线缆多余的CAN线产生 60cm 长的 CAN 悬空分支
  3. 电机CAN_GND未和CAN适配器直接连接

原始开源设计下测试的CAN通讯波形

从示波器测量出的波形(配合德国PEAK PCAN-USB FD PRO),可以发现:

  1. 波形存在严重的信号变形
  2. 波形反射和振铃严重
  3. 存在大量的错误帧(导致BUS OFF掉线错误)

本文将对以上问题进行具体的分析,并给出改进建议。另外还会对整机现在的通讯状态进行分析。

一、CAN 总线拓扑分析

1. 主干结构基本合理

首先值得肯定的是:OpenArm 主臂部分的 CAN 连接方式整体是合理的。

其结构基本遵循 CAN 总线推荐的 Daisy Chain(手拉手)拓扑:

J1、J2 两个电机虽然属于分支结构,但分支不长(小于 30cm),符合 CAN 总线的推荐规范。

2. 过长的悬空分支

整机布线存在一个比较典型的问题:电源线缆多余的CAN线产生 60cm 长的 CAN 悬空分支

  • 电源线附带了 CAN 信号线,且没有连接任何 CAN 节点,产生了从 HUB 接线板到电源接头的 60cm 长的悬空分支。
  • 与电源线并行,会对信号造成更大的影响。

在 CAN 网络中,长分支是最常见的稳定性杀手之一。

它会导致:

  • 阻抗不连续:信号遇到阻抗突变产生反射,分支越长越明显
  • 信号振铃:反射信号叠加导致振铃现象

因此,这条 60 cm 的悬空分支明显不符合工程规范。

二、终端电阻:隐藏的"60Ω 陷阱"

另一个容易被忽视的问题是终端电阻配置

很多人在调试 CAN 网络时都知道使用万用表测量 CANH 与 CANL 之间的电阻。

理论上:

  • 两端各有一个 120Ω 终端电阻
  • 因此,测量结果为 60Ω 通常被认为是"正常"

但在 OpenArm 中,测量结果却具有一定的误导性

实际情况

在实际检查 OpenArm CAN 总线结构后发现:机械臂末端并没有独立的终端电阻。

在机械臂上测量得到的 60Ω 来自于:

  • CAN 收发器端自带的 120Ω(CAN适配器出厂默认开启了内置终端电阻)
  • DB9转接板板载 120Ω 电阻
  • 两个电阻实际都在适配器端,一个在内部,一个在外部DB9转接板上

虽然测量值仍然是 60Ω,但由于能量反射无法正确的在物理末端被吸收。这会导致总线末端阻抗不匹配,信号质量严重下降。

三、共地问题:被忽视的 CAN 稳定性因素

在检查 OpenArm 的 CAN 通信链路时,我们还发现了另一个容易被忽视的问题:CAN 线束中没有提供信号地(GND)

在很多"能够运行"的系统中,是因为电机供电的负极通过电源适配器和CAN适配的USB GND间接的回路。这种连接方式确实能够正常工作,但从工程规范角度来看,它存在一定风险。

CAN 接收器是通过 CANH 与 CANL 的电压差来判断逻辑状态,而不是单独看某一根线对地的电压。

但这里有一个容易被忽略的问题:每个 CAN 节点内部的收发器,仍然是以本地地(GND)作为电压参考的。

如果不同节点之间的地电位差超过这个范围,就可能导致:

  • 接收器无法正确判断信号
  • 信号边沿变形
  • 通信错误增加

四、为什么系统依然能够正常通信?

OpenArm 开源至今,存在很多使用者反馈调试困难通讯稳定性差等问题。

我们在测试中也发现:不同 CAN 适配器的表现差异非常明显。例如:使用经典 CAN 设备 (PEAK CAN)时,系统总线完全无法进行通讯。而使用一些现代适配器,例如:KH-UCANFD、Pibiger 却能够正常通信。

原因其实很简单,许多现代 CAN 适配器在设计时进行了额外优化,例如:

  • 更强的信号容错能力
  • 更好的模拟滤波
  • 更智能的错误恢复

这解释了为什么OpenArm团队测试了很多USB-CANFD适配器却只有少部分能够使用,且即使使用了容忍度更高的CAN适配器 OpenArm 底层物理链路的缺陷仍会导致丢帧或错误帧。

"能通信"不等于可靠和稳定,这种"能通信"是靠吃掉CAN总线可靠性余量换来的。产生的后果是整个系统无法在工业场景或复杂工况稳定运行,又或者时常出现莫名其妙的意外问题 - 如很多用户遇到的手臂异常抽动、动作不连贯。

五、实际整改过程

针对上述问题,我们对 OpenArm 的 CAN 总线进行了简单整改。整改过程主要包括三个步骤。

1. 优化布线

  • 将原有 60 cm 悬空 CAN 线直接移除
  • 避免 CAN 线与电源线长距离并行

②为原本的线路,①为优化后的布局(去掉悬空分支、接入地线)。

2. 规范终端电阻

重新确认 CAN 网络终端电阻配置:

  • 移除CAN适配器端重复的终端电阻(关闭适配器内部软控电阻或取下DB9转接板的跳线帽)
  • 在末端电机(夹抓电机J8空余的XT30接口)上添加120Ω终端电阻。

3. 添加共地线

可参考以下示意,在CAN通信线端子的电源负极处接出一根地线到CAN适配器的CAN_GND。

  • 由于DM电机没有设计单独的CAN_GND, 这样的电机只能使用电源地作为CAN_GND

六、整改后的测试结果

我们将 OpenArm 的其中一条手臂进行了整改,另外一条机械臂进行对比测试。

测试结果非常明显,整改后的机械臂:

  • 使用经典 CAN 设备,也不再出现通讯异常情况 提升了整个系统的兼容性
  • 示波器观测到的波形明显改善
    • 信号反射明显减少
    • 振铃基本消失
    • 边沿更加干净稳定
  • 总线错误消失

整改前波形:

整改后波形(配合KUNHONG KH-UCANFDX4):

一个稳定可靠的 CAN 总线环境,往往是由每一个工程细节共同构筑的。针对 CAN 通讯环境故障的排查优化,我们在另外的文章中也有详细的说明。

七、结语

OpenArm 作为一个开源项目,本身已经做得非常优秀。而类似通信链路结构问题,其实在很多开源硬件项目中都很常见。通过一些简单的工程整改,就可以大幅提升系统稳定性。作为从业者更应该不断为开源项目贡献改进和优化的力量,改进并完善开源项目,而不是一味的将开源资料奉为"原版""官方"而不敢或不愿意去改进。

从某种意义上说:开源项目的真正价值,不只是提供一个能够运行的系统,更是通过社区不断迭代,让它变得越来越完善和具有工程化的价值。

相关推荐
Mountain and sea2 小时前
发那科(FANUC)机器人指令体系深度解析与高阶应用实践
机器人
zh路西法18 小时前
【宇树机器人强化学习】(六):TensorBoard图表与手柄遥控go2测试
python·深度学习·机器学习·机器人
renhongxia118 小时前
多模态融合驱动下的具身学习机制研究
运维·学习·机器人·自动化·知识图谱
Pursue Limits20 小时前
人形机器人之VR遥操作
机器人·vr
天天讯通21 小时前
智能语音机器人未来的发展方向
人工智能·机器人·语音识别
一RTOS一1 天前
从PLC到机器人:实时操作系统如何决定能力上限
人工智能·机器人·鸿道操作系统·鸿道实时操作系统·国产嵌入式操作系统选型·鸿道机器人操作系统
ZPC82101 天前
PPO训练小车
人工智能·算法·机器人
春日见1 天前
端到端自动驾驶技术路线(E2E)
人工智能·机器学习·docker·架构·机器人·自动驾驶·汽车
码农三叔1 天前
(10-4)大模型时代的人形机器人感知:感知与任务规划的联动
人工智能·机器人·人形机器人