使用 ROS1 驱动程序掌握 ADI Trinamic 电机控制器
扫描二维码
随时随地手机看文章
机器人操作系统 ( ROS ) 是一种机器人中间件,包含一组软件库和强大的开发工具,从驱动程序到最先进的算法,可用于开发机器人系统或应用程序。Analog Devices Inc. (ADI) 的 Trinamic 电机控制器支持一种新型智能执行器,随着 ROS 变得越来越流行,尤其是在机器人领域,开发了额外的模块支持(如 ROS 驱动程序),以扩展制造和工业自动化应用的可用性。
ADI 的 TMC ROS1 驱动程序提供的功能类似于该公司的 Trinamic 电机控制语言集成开发环境 ( TMCL-IDE ),但有一个关键区别:它允许支持 ROS 的系统内的节点使用 TMC,而无需安装额外的驱动程序。此外,adi_tmcl 集成了自己的 TMCL 协议解释器,使其能够解释符合 TMCL 标准的用户请求命令。最后一层 tmcl_ros_node 与 ROS 系统建立直接接口,提供发布者、订阅者和服务等功能。这些功能中的每一个都可以使用一组参数进行定制,这将在以下章节中详细讨论。
支持多种TMC板
TMC ROS 驱动程序或 adi_tmcl 旨在支持所有遵守 TMCL 协议的商用 TMC。截至本文发表时,它目前支持 CAN 接口(特别是 SocketCAN)。但是,目前正在进行开发,以便很快支持其他接口。这些 TMC 包括 ADI Trinamic PANdrive 智能电机和模块,可进一步分为步进电机和无刷直流 ( BLDC ) 电机。使用 ROS 参数使 adi_tmcl 能够无缝支持不同的 TMC 板。这样就可以配置 tmcl_ros_node,而无需重建整个包。
在 adi_tmcl/config 目录中,每个 ADI Trinamic 电机控制器模块 (TMCM) 都与两个 YAML 文件相关联。这些文件以人类可读的数据序列化语言编写,包含 ROS 参数,应在执行期间加载:
adi_tmcl/config/自动生成/TMCM-XXXX.yaml
此 YAML 文件是自动生成的,包含特定于模块的参数,不建议修改,因为它可能会导致节点执行不同。
adi_tmcl/配置/TMCM-XXXX_Ext.yaml
该 YAML 文件包含用户可以修改以便与开发板通信的所有参数(例如,接口名称)、启用电机控制和更改 ROS 主题名称。
举例来说,如果您想使用TMCM-1636(图 3),只需启动图 1 所示的代码,其中 adi_tmcl/launch/tmcm_1636.launch 加载专用于 TMCM-1636 的 YAML 文件。
图 1:启动 TMCM-1636
图 2:使用 TMCM-1636 运行 TMC ROS 驱动程序的代码片段
图 3:TMCM-1636 硬件连接图(顶部);实际设置参考图(底部)
要使用TMCM-1260(图 6),请启动图 4 所示的代码,其中 adi_tmcl/launch/tmcm_1260.launch 加载专用于 TMCM-1260 的 YAML 文件。
图 4:使用 TMCM-1260 启动 TMC ROS 驱动程序的命令
图 5:使用 TMCM-1260 运行 TMC ROS 驱动程序的代码片段
图 6:TMCM-1260 硬件连接图(顶部);实际设置参考图(底部)
启动目录包括所有受支持的 TMC 板,可以在此处查看。
使用 TMCL-IDE 对 TMC 模块进行一次性配置
在通过 ROS 使用 TMC 板之前,需要使用电机校准板。所有校准都应使用 TMCL-IDE 进行,并应存储在 E 2 PROM 中(否则,电机可能无法正确控制)。
· 对于 BLDC 电机模块(例如 TMCM-1636):
· 有关如何通过 TMCL-IDE 的向导池功能进行电机校准的演示/教程,请查看本教程。
· 有关如何通过 TMCL-IDE 中的 PI 调整功能进行比例积分 (PI) 调整的演示/教程,请查看本教程。
· 对于步进电机模块(例如 TMCM-1260):
· 有关如何通过 TMCL-IDE 的向导池功能进行校准的演示/教程,请查看本教程。
校准和调整后,请确保将所有参数存储在电路板的 E 2 PROM 中。这可以通过存储参数、STAP 命令和/或创建和上传 TMCL 程序并启用自动启动模式来完成。有些电路板仅支持其中几个选项。
在配置/调整 TMC 和电机后,TMC ROS 驱动程序的设计得到简化,以便基于使用 TMCL-IDE 的一次性配置来控制电机。
移动/停止电机
TMC ROS 驱动程序通过发布以下任一主题来移动/停止电机:
· /cmd_vel (geometry_msgs/Twist) 设置电机的速度。
· /cmd_abspos (std_msgs/Int32) 设置电机的绝对位置。
· /cmd_relpos (std_msgs/Int32) 设置电机的相对位置。
· /cmd_trq (std_msgs/Int32) 设置电机的扭矩。
注意:多轴 TMC 设置中,不同电机有单独的主题。
用户可以连接他们的 ROS 系统以发布到这些特定主题,从而使他们能够控制电机的运动。主题的选择取决于应用程序、TMC 设置和所用电机的类型。例如,对于轮式机器人,用户可能选择设置速度,而对于夹持器,设置位置会更合适。
作为一个说明性示例,请考虑脚本 adi_tmcl/scripts/fake_cmd_vel.sh。这个简单的脚本可以控制电机顺时针和逆时针旋转,并逐步增加速度。要执行此操作,请按照图 7 中所示的命令进行操作。
图 7:测试 TMC ROS 驱动程序速度控制的命令
笔记:
· 2 号航站楼和 3 号航站楼并排放置时视野最佳。
· 完成后,您可以在终端 1 中按 Ctrl+C 执行命令,然后在终端 2 中按 Ctrl+C 执行命令。
· 3号航站楼的指令自动停止。
为了验证电机是否移动,图 8 显示了从 TMC(/tmc_info_0)读回的实际速度图。
图 8:使用 RQT 绘制的电机实际速度(以米/秒为单位)
检索 TMC/电机信息
系统可以通过订阅以下主题从 TMC ROS 驱动程序检索信息:
· /tmc_info (adi_tmcl/TmcInfo) 提供电压、TMC 状态、实际速度、实际位置和实际扭矩信息。
注意:多轴 TMC 设置中,不同电机有单独的主题。
用户可以链接他们的 ROS 系统来订阅这些指定主题。这样他们就可以监控参数值并根据参数值采取行动。例如,在特定于应用程序的场景中,人们可以选择在检测到 TMC 状态错误时停止系统,或者在电机到达特定位置后执行预编程操作。
例如,adi_tmcl/scripts/fake_cmd_pos.sh 是一个简单的脚本,它将使电机顺时针旋转,然后逆时针旋转,位置逐渐增加。执行图 9 中所示的命令。
图 9:测试 TMC ROS 驱动程序位置控制的命令
为了验证电机是否移动,图 10 显示了从 TMC(/tmc_info_0)读回的实际位置图表。
图 10:使用 RQT 绘制的电机实际位置(以度为单位)
执行自定义 TMC 命令
系统可以通过执行以下功能来访问和调整TMC参数:
· tmcl_custom_cmd (adi_tmcl/TmcCustomCmd) 获取/设置 TMC 轴参数 (AP) 和全局参数 (GP) 的值。
用户可以选择将此服务集成到他们的 ROS 系统中以满足特定的应用需求。此功能使用户能够直接从 ROS 驱动程序配置 TMC 板。例如,用户可以选择设置最大电流的轴参数,从而调整允许的绝对电流水平。但是,用户必须彻底了解他们通过此功能修改的参数,因为不正确的设置可能会导致 TMC ROS 驱动程序故障。因此,强烈建议通过 TMCL-IDE 执行任何配置。图 11 提供了调用此服务的示例,展示了指令类型为 208 的 DrvStatusFlags 的获取轴参数操作。
图11:通过RQT触发tmcl_custom_cmd服务
访问所有 AP 值
系统可以通过以下方式访问 TMC AP 的值:
· tmcl_gap (adi_tmcl/TmcGapGgpAll) 获取指定电机/轴的所有 TMC AP 的值。
用户可以将他们的 ROS 系统与此功能集成,以满足其特定应用的需求。例如,此服务可以捕获 TMC 板的当前设置和状态,包括编码器步骤、PI 调谐、换向模式等 AP。
图 12 显示了部分输出示例。通过分析此结果,用户可以确认一次性配置是否正确保存在板的 E2PROM中。
图 13 显示了执行该服务后获得的部分输出。该结果可让用户确认一次性配置是否已准确存储在电路板的 E2PROM中。
图12:通过RQT触发tmcl_gap_all服务
访问所有 GP 值
系统可以通过以下方式访问 TMC GP 的值:
· tmcl_ggp (adi_tmcl/TmcGapGgpAll) 获取所有 TMC GP 的值。
此功能可以检索 TMC 板的当前配置和状态。可以访问的一些 GP 包括 CAN 比特率、串行波特率和自动启动模式。
图13:通过RQT触发tmcl_ggp_all
多个 TMC 板设置
对于可能需要多个 TMC 板的大型系统(例如机械臂),TMC ROS 驱动程序允许多个设备设置。
多个 CAN 通道中的多个 TMC 板
如图 14 所示,当用户每个 TMC 板都有一个 CAN-USB 时, 会添加命名空间来区分每个节点的实例。在此特定用例中,需要相应更新comm_interface_name参数以确保与板正确通信。
图14:多个 CAN 通道中的多个 TMC 板的示例图
图 15:使用多个 CAN 通道运行多个 TMC ROS 驱动程序的代码片段
图 15 中的代码是用于设置此用例的示例启动文件。在此示例中,可以通过发布到/tmcm1/cmd_abspos来控制电机 A ,通过发布到/tmcm2/cmd_abspos来控制电机 B,通过发布到/tmcm3/cmd_abspos来控制电机C。
单个 CAN 通道中有多个 TMC 板
TMC ROS 驱动程序支持的另一种设置是单个 CAN 通道中的多个 TMC 板,如图 16 所示。与描述的对多个 TMC 板的支持非常相似,引入了命名空间来区分每个节点实例。保持所有板的comm_interface_name一致。调整comm_tx_id和comm_rx_id以确保与每个板准确通信。
图 17 显示了用于设置此用例的示例启动文件。在此示例中,可以通过发布到/tmcm1/cmd_abspos来控制电机 A ,通过发布到/tmcm2/cmd_abspos来控制电机 B,通过发布到 /tmcm3/ cmd_abspos来控制电机C。
轻松集成到 ROS 系统/应用程序
借助 ROS 提供的消息传递系统,大型系统可以轻松交换节点(例如驱动程序和算法)。TMC ROS 驱动程序的开发将这一优势扩展到 TMC 板,从而可以无缝集成到 ROS 系统/应用程序中。
图 16:单个 CAN 通道中多个 TMC 板的示例图
图 17:使用单个 CAN 通道运行多个 TMC ROS 驱动程序的代码片段
集成至 AGV/AMR
图 18 说明了navigation_node如何通过发送 geometry_msg/Twist 格式的 / cmd_vel来控制移动机器人。然后, motor_controller将通过geometry_msg/Twist 格式的/wheel_velocity发送反馈,以便navigation_node可以相应地重新校准。
图 18:AGV/AMR 的简化架构
通过了解navigation_node发布和订阅的位置,tmcl_ros_node可以轻松更改motor_controller(图 19)。与 TMC 信息检索功能类似,adi_tmcl 发布有关车轮速度的实时信息,wheel_velocity_node将车轮速度信息从 adi_tmcl/TmcInfo 转换为 geometry_msg/Twist。由于新架构及其集成的 TMC 板符合正确的数据格式,因此移动机器人有望以相同的方式工作。
图 19:带有 TMC ROS 驱动程序的 AGV/AMR 的简化架构
集成到机械臂中
为了将 TMC 板集成到带有机械臂的拾放应用中,图 20 说明了如何需要多个电机来控制机械臂。与上一个用例类似,用户需要确保 pick_and_place_node 将订阅/发布预期的数据格式。
图 20:带有通用电机控制器的机械臂(顶部);带有 TMC 板的机械臂(底部)