使用ROS1驱动器掌握ADI Trinamic电机控制器

时间:2024-08-08

  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参数,应该在执行过程中加载。
  07.31.2024
  adi_tmcl/config/autogenerated/TMCM-XXXX.yaml
  此 YAML 文件是自动生成的,包含特定于模块的参数,不建议修改,因为它可能会导致节点的执行方式不同。
  adi_tmcl/config/TMCM-XXXX_Ext.yaml
  此 YAML 文件包含用户可以修改以与板子通信的所有参数(例如,接口名称)、启用电机控制和更改 ROS 主题名称。
  例如,如果要使用 TMCM-1636(图 3),只需启动图 1 中所示的代码,其中 adi_tmcl/launch/tmcm_1636.launch 加载专用于 TMCM-1636 的 YAML 文件。
  启动 TMCM-1636。

  图 1:启动 TMCM-1636

  使用 TMCM-1636 运行 TMC ROS 驱动程序的代码片段。
  图 2:使用 TMCM-1636 运行 TMC ROS 驱动程序的代码片段
  TMCM-1636硬件连接图(顶部);实际设置的参考图像(底部)。

  图 3:TMCM-1636 硬件连接图(顶部);实际设置的参考图像(底部)
  要使用 TMCM-1260(图 6),请启动图 4 中所示的代码,其中 adi_tmcl/launch/tmcm_1260.launch 加载专用于 TMCM-1260 的 YAML 文件。

  使用 TMCM-1260 启动 TMC ROS 驱动程序的命令。
  图 4:使用 TMCM-1260 启动 TMC ROS 驱动程序的命令
  使用 TMCM-1260 运行 TMC ROS 驱动程序的代码片段。

  图 5:使用 TMCM-1260 运行 TMC ROS 驱动程序的代码片段
  TMCM-1260硬件连接图(顶部);实际设置的参考图像(底部)。

  图 6:TMCM-1260 硬件连接图(顶部);实际设置的参考图像(底部)
  启动目录包含所有受支持的 TMC 板,可在此处查看。
  使用 TMCL-IDE 性配置 TMC 模块
  在通过 ROS 使用 TMC 板之前,需要使用正在使用的电机校准板。所有校准都应使用 TMCL-IDE 完成,并应存储在 E 中2PROM(否则,电机可能无法正确控制)。
  对于 BLDC 电机模块(例如,TMCM-1636):
  有关如何在TMCL-IDE中通过其Wizard Pool功能进行电机校准的运行/教程,请查看此教程。
  有关如何在 TMCL-IDE 中通过其 PI 调优功能进行比例积分 (PI) 调优的运行/教程,请查看此教程。
  对于步进电机模块(例如,TMCM-1260):
  有关如何在TMCL-IDE中通过其Wizard Pool功能进行校准的运行/教程,请查看此教程。
  校准和调整后,请确保将所有参数存储在板的 E 中2舞会。这可以通过 store 参数、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 中显示的命令操作。
  用于测试 TMC ROS 驱动程序的速度控制的命令。

  图 7:用于测试 TMC ROS 驱动程序速度控制的命令
  笔记:
  2 号和 3 号航站楼并排查看。
  您可以在终端 1 中按 Ctrl+C 命令,然后在完成后在终端 2 中按 Ctrl+C。
  第 3 航站楼中的命令会自动停止。
  为了验证电机是否移动,图 8 显示了 TMC (/tmc_info_0) 的实际速度回读图。
  电机的实际速度,以米/秒为单位,使用 RQT 绘制。

  图 8:使用 RQT 绘制的电机实际速度(以米/秒为单位)
  TMC/电机信息的检索
  系统可以通过订阅以下主题从 TMC ROS 驱动程序中获取信息:
  /tmc_info (adi_tmcl/TmcInfo) 给出电压、TMC 状态、实际速度、实际位置和实际扭矩信息。
  注意:对于多轴 TMC 设置中的不同电机,有单独的主题。
  用户可以链接他们的ROS系统来订阅这些指定的主题。这使他们能够监控参数值,并可能根据参数值采取行动。例如,在特定应用场景中,可能会选择在检测到 TMC 状态错误时停止系统,或者在电机到达特定位置时执行预编程操作。
  例如,adi_tmcl/scripts/fake_cmd_pos.sh 是一个简单的脚本,它将顺时针旋转电机,然后逆时针旋转,位置大小增加。执行图 9 中所示的命令。
  用于测试 TMC ROS 驱动程序的位置控制的命令。

  图 9:用于测试 TMC ROS 驱动程序位置控制的命令
  为了验证电机是否移动,图 10 显示了 TMC (/tmc_info_0) 的实际位置回读图。
  电机的实际位置(以度为单位),使用 RQT 绘制。

  图 10:使用 RQT 绘制的电机实际位置(以度为单位)
  执行自定义 TMC 命令
  系统可以通过执行以下功能来访问和调整 TMC 参数:
  tmcl_custom_cmd (adi_tmcl/TmcCustomCmd) 获取/设置 TMC 轴参数 (AP) 和全局参数 (GP) 的值。
  用户可以选择将此服务集成到他们的 ROS 系统中,以满足特定的应用程序要求。此功能使用户能够直接从 ROS 驱动程序配置 TMC 板。例如,用户可以选择设置电流的轴参数,从而调整允许的电流水平。但是,用户必须对他们通过此功能修改的参数有透彻的理解,因为不正确的设置可能会导致 TMC ROS 驱动程序失败。因此,强烈建议通过TMCL-IDE执行任何配置。图 11 提供了调用此服务的示例,展示了指令类型为 208 的 DrvStatusFlags 的获取轴参数操作。
  通过 RQT 触发tmcl_custom_cmd服务。


  图 11:通过 RQT 触发的 tmcl_custom_cmd 服务
  访问所有 AP 值
  系统可以通过以下方式访问 TMC AP 的值:
  tmcl_gap (adi_tmcl/TmcGapGgpAll) 获取指定电机/轴的所有 TMC AP 的值。
  用户可以将他们的ROS系统与此功能集成,以满足其特定应用的需求。例如,该服务可以捕获 TMC 板的当前设置和状态,包括编码器步长、PI 调谐、换向模式等 AP。
  图 12 显示了一个部分输出示例。通过分析此结果,用户可以确认性配置是否正确保存在电路板的 E 中2舞会。

  图 13 显示了执行此服务后获得的部分输出。该结果使用户能够确认性配置是否已准确存储在电路板的 E 中2舞会。
  通过 RQT 触发tmcl_gap_all服务。
  图 12:通过 RQT 触发的 tmcl_gap_all 服务
  访问所有 GP 值
  系统可以通过以下方式访问 TMC GP 的值:
  tmcl_ggp (adi_tmcl/TmcGapGgpAll) 获取所有 TMC GP 的值。
  此功能允许检索 TMC 板的当前配置和状态。一些可以访问的GP包括CAN比特率、串行波特率和自动启动模式。
  通过 RQT 触发tmcl_ggp_all。
  图 13:通过 RQT 触发的tmcl_ggp_all
  多个 TMC 板设置
  对于可能需要多个 TMC 板(例如,机械臂)的大型系统,TMC ROS 驱动程序允许多个设备设置。
  多个 CAN 通道中的多个 TMC 板
  如图 14 所示,当用户在每个 TMC 板上有一个 CAN-USB 时,将添加命名空间以区分每个节点的实例。在这种特定用例中,需要相应地更新 comm_interface_name 参数,以确保与电路板的正确通信。
  多个CAN通道中多个TMC板的示例图。

  图 14:多个 CAN 通道中多个 TMC 板的示例图
  使用多个 CAN 通道运行多个 TMC ROS 驱动程序的代码片段。


  图 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 系统/应用程序中。
  单个CAN通道中多个TMC板的示例图。

  图 16:单个 CAN 通道中多个 TMC 板的示例图
  使用单个 CAN 通道运行多个 TMC ROS 驱动程序的代码片段。
  集成到AGV/AMR中
  说明了navigation_node如何通过发送 geometry_msg/Twist 格式的 /cmd_vel 来控制移动机器人。然后,motor_controller将通过 /wheel_velocity 以 geometry_msg/Twist 格式发送反馈,以便navigation_node可以相应地重新校准。
  通过了解navigation_node在哪里发布和订阅,tmcl_ros_node可以轻松更改motor_controller(图 19)。与TMC信息检索功能类似,adi_tmcl发布轮速的实时信息,wheel_velocity_node将轮速信息从adi_tmcl/TmcInfo转换为geometry_msg/Twist。由于新架构及其集成的 TMC 板符合正确的数据格式,因此移动机器人的工作方式应相同。
  集成到机械臂中
  为了将 TMC 板集成到带有机械臂的拾取和放置应用中,图 20 说明了如何需要多个电机来控制机械臂。与前面的用例类似,用户需要确保pick_and_place_node将订阅/发布预期的数据格式。
  带有通用电机控制器的机械臂(顶部);带有 TMC 板的机械臂(底部)。

上一篇:红外线接收组件引脚极性识别
下一篇:解决 9 个常见的 DC-DC 降压转换器问题

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料