使用ROS1驅動程序來操控ADI Trinamic電機控制器
2024-05-15
作者:Krizelle Paulene Apostol,軟件系統(tǒng)工程師,;Jamila Macagba,,高級軟件系統(tǒng)工程師;Maggie Maralit,,軟件系統(tǒng)設計工程經(jīng)理
來源:ADI
摘要
“實現(xiàn)機器人操作系統(tǒng)——電機控制器ROS1驅動程序簡介”一文中概述了新型ADI Trinamic? 電機控制器(TMC)驅動程序,,并討論了將電機控制器集成到機器人操作系統(tǒng)(ROS)生態(tài)系統(tǒng)中的方法。TMC ROS1驅動程序支持TMC驅動層和應用層之間在ROS框架內無縫通信,,且適用于它支持的各種TMC板,。本文將深入探討TMC ROS1驅動程序的功能,包括電機控制,、信息檢索,、命令執(zhí)行、參數(shù)獲取以及對多種設置的支持,。文中還概述了如何將電機控制器集成到嵌入式系統(tǒng)和應用中,,從而利用ROS框架提供的優(yōu)勢。
ADI Trinamic電機控制器ROS1驅動程序
ROS是一個機器人系統(tǒng)中間層,,包含一組軟件庫和強大的開發(fā)工具,,從驅動程序到最先進的算法,可以在此基礎上開發(fā)機器人系統(tǒng)或應用程序,。ADI Trinamic電機控制器支持新型智能執(zhí)行器,,并且隨著ROS變得越來越流行,尤其是在機器人領域,,為了擴展在制造和工業(yè)自動化應用中的適用性,,我們開發(fā)了ROS驅動程序等附加模塊支持。ADI公司的TMC ROS1驅動程序提供與Triaminic電機控制語言集成開發(fā)環(huán)境(TMCL-IDE)類似的功能,,但有一個關鍵區(qū)別:它允許支持ROS的系統(tǒng)中的節(jié)點使用TMC,,而無需額外安裝驅動程序。此外,,adi_tmcl集成了自己的TMCL協(xié)議解釋器,,因此能夠解釋符合TMCL標準的用戶請求的命令,。最后一層是tmcl_ros_node,它建立了與ROS系統(tǒng)的直接接口,,提供發(fā)布者,、訂閱者和服務等功能。每一個功能都可以使用一組參數(shù)進行自定義,,以下部分將詳細討論這些功能,。
功能
1.支持多種TMC模塊
TMC ROS驅動程序或adi_tmcl旨在支持所有遵守TMCL協(xié)議的商用TMC。截至本文發(fā)布,,它目前支持CAN接口(特別是SocketCAN),。但開發(fā)工作還在進行,不久的將來會支持其他接口,。這些TMC包含ADI Trinamic PANdrive?智能電機和模塊,可以支持步進電機和直流無刷伺服(BLDC)電機,。由于使用ROS參數(shù),,adi_tmcl能夠無縫支持不同的TMC模塊。只需配置tmcl_ros_node而無需重新構建整個控制包,。
在adi_tmcl/config目錄中,,每個ADI Trinamic電機控制器模塊(TMCM)都有兩個相關的YAML文件。這些文件以人類可讀的數(shù)據(jù)序列化語言編寫,,包含ROS參數(shù),,應在執(zhí)行期間加載:
▲adi_tmcl/config/autogenerated/TMCM-XXXX.yaml
此YAML文件是自動生成的,包含特定于模塊的參數(shù),,不建議修改,,以免導致節(jié)點行為異常。
▲adi_tmcl/config/TMCM-XXXX_Ext.yaml
此YAML文件包含用戶可以修改的所有參數(shù),,以便(1)與板通信(例如接口名稱),,(2)實現(xiàn)電機控制,以及(3)更改ROS主題名稱,。
例如,,如果您想使用TMCM-1636(圖3),只需運行圖1所示的代碼,。
圖1.啟動TMCM-1636,。
其中,adi_tmcl/launch/tmcm_1636.launch加載TMCM-1636專用的YAML文件,。
圖2.使用TMCM-1636運行TMC ROS驅動程序的代碼片段,。
圖3.(上)TMCM-1636硬件連接圖;(下)實際設置的參考圖片,。
要使用TMCM-1260(圖6),,請運行以下命令:
圖4.使用TMCM-1260啟動TMC ROS驅動程序的命令。
其中,adi_tmcl/launch/tmcm_1260.launch加載TMCM-1260專用的YAML文件,。
圖5.使用TMCM-1260運行TMC ROS驅動程序的代碼片段,。
圖6.(上)TMCM-1260硬件連接圖;(下)實際設置的參考圖片,。
2.使用TMCL-IDE一次性配置TMC模塊
在通過ROS使用TMC模塊之前,,需要根據(jù)所使用的電機完成配置。所有的配置使用TMCL-IDE完成,,并應存儲在EEPROM中(否則可能無法正確控制電機),。
▲BLDC電機模塊(如TMCM-1636)
■有關如何在TMCL-IDE中通過Wizard Pool工具完成電機校準的流程/教程。
■有關如何在TMCL-IDE中完成比例積分(PI)調諧功能的流程/教程,。
▲步進電機模塊(如TMCM-1260)
■有關如何在TMCL-IDE中通過Wizard Pool功能完成初始化配置的流程/教程,。
初始化和調諧后,務必將所有參數(shù)存儲在板的EEPROM中,。這可以通過如下方法來完成:(1)store參數(shù),,(2)STAP命令,以及/或者(3)創(chuàng)建和上傳TMCL程序并啟用自動啟動模式,。有些板僅支持其中的少數(shù)選項,。
TMC ROS驅動程序的設計得到了簡化,在完成TMC模塊和電機的初始化配置/調諧后,,基于使用TMCL-IDE的一次性配置即可控制電機,。
3.移動/停止電機
TMC ROS驅動程序通過在以下任一主題中發(fā)布命令來移動/停止電機:
▲/cmd_vel (geometry_msgs/Twist)—設置電機轉速
▲/cmd_abspos (std_msgs/Int32)—設置電機的絕對位置
▲/cmd_relpos (std_msgs/Int32)—設置電機的相對位置
▲/cmd_trq (std_msgs/Int32)—設置電機扭矩
注:多軸TMC設置中的不同電機有不同的地址。
用戶可以連接ROS系統(tǒng)來發(fā)送至這些特定指令,,從而控制電機的運動,。指令的選擇取決于具體應用、TMC設置以及所用電機的類型,。例如,,對于輪式機器人,用戶可以選擇設置速度,;而對于夾具,,設置位置會更合適。
作為說明性示例,,可以看看腳本adi_tmcl/scripts/fake_cmd_vel.sh,。這個簡單的腳本可以控制電機以順時針和逆時針兩個方向旋轉,并且逐漸提高轉速,。要執(zhí)行此腳本,,請按照圖7所示的命令進行操作。
圖7.用于測試TMC ROS驅動程序轉速控制的命令,。
注意:
▲2號終端窗口和3號終端窗口最好并排顯示,。
▲可以按Ctrl-C復制1號終端窗口中的命令,,完成后粘貼到2號終端窗口中。
▲3號終端窗口中的命令會自行停止,。
為了驗證電機是否已移動,,圖8顯示了來自TMC (/tmc_info_0)的實際轉速反饋圖。
圖8.使用RQT繪制的電機實際轉速圖(以m/s為單位),。
4.TMC/電機信息檢索
系統(tǒng)可以通過訂閱以下主題,,從TMC ROS驅動程序檢索信息:
▲/tmc_info (adi_tmcl/TmcInfo) - 提供電壓、TMC狀態(tài),、實際轉速,、實際位置和實際扭矩信息
注:多軸TMC設置中的不同電機有不同的主題。
用戶可以鏈接ROS系統(tǒng)來訂閱這些指定的主題,。這樣,,用戶就可以監(jiān)視參數(shù)值,并根據(jù)參數(shù)值采取行動,。例如,,在特定于應用的場景中,當檢測到TMC狀態(tài)出錯時,,操作員可能會選擇停止系統(tǒng),,或者在電機到達特定位置時執(zhí)行預編程的動作,。
作為例子,,adi_tmcl/scripts/fake_cmd_pos.sh是一個簡單的腳本,它讓電機先順時針旋轉,,再逆時針旋轉,,并且不斷提高位置幅度。請執(zhí)行圖9所示的命令,。
圖9.用于測試TMC ROS驅動程序位置控制的命令,。
為了驗證電機是否已移動,圖10顯示了來自TMC (/tmc_info_0)的實際位置回讀圖,。
圖10.使用RQT繪制的電機實際位置圖(以度為單位),。
5.執(zhí)行自定義TMC命令
系統(tǒng)可以通過執(zhí)行以下功能來訪問和調整TMC參數(shù):
▲tmcl_custom_cmd (adi_tmcl/TmcCustomCmd) - 獲取/設置TMC的軸參數(shù)AP和全局參數(shù)(GP)的值
用戶可以選擇將此服務集成到ROS系統(tǒng)中,以滿足特定應用需求,。此功能使用戶能夠直接從ROS驅動程序配置TMC板,。例如,用戶可以選擇設置軸參數(shù)(SAP)以獲得最大電流,,從而調整允許的絕對電流水平,。但是,用戶必須透徹了解他們要通過此功能修改的參數(shù),,不正確的設置可能會導致TMC ROS驅動程序故障,。因此,,強烈建議任何配置都通過TMCL-IDE執(zhí)行。圖11提供了調用此服務的示例,,展示了使用指令類型208對DrvStatusFlags進行獲取軸參數(shù)(GAP)操作,。
圖11.通過RQT觸發(fā)的tmcl_custom_cmd服務。
6.訪問所有軸參數(shù)值
系統(tǒng)可以通過以下方式訪問TMC軸參數(shù)值:
▲tmcl_gap (adi_tmcl/TmcGapGgpAll) - 獲取指定電機/軸的所有TMC軸參數(shù)(AP)的值
用戶可以將ROS系統(tǒng)與此功能集成,,以滿足特定應用的需求,。例如,此服務可以捕獲TMC板的當前設置和狀態(tài),,包括AP(例如編碼器步長,、PI調諧、換向模式等),。
圖12顯示了部分輸出示例,。通過分析該結果,用戶可以確認一次性配置是否正確保存在板的EEPROM中,。
圖12.通過RQT觸發(fā)的tmcl_gap_all服務,。
7.訪問所有全局參數(shù)值
系統(tǒng)可以通過以下方式訪問TMC全局參數(shù)值:
▲tmcl_ggp (adi_tmcl/TmcGapGgpAll) - 獲取所有TMC全局參數(shù)(GP)的值
此功能可以檢索TMC板的當前配置和狀態(tài)??稍L問的一些GP包括:CAN比特率,、串行波特率、自動啟動模式等,。
圖13顯示了執(zhí)行此服務后獲得的部分輸出,。此結果使用戶能夠確認一次性配置是否已正確存儲在板的EEPROM中。
圖13.通過RQT觸發(fā)的tmcl_ggp_all,。
8.多個TMC板設置
對于可能需要多個TMC模塊的較大系統(tǒng)(如機械臂),,TMC ROS驅動程序支持多個器件設置。
a.多個CAN通道中的多個TMC板
如圖14所示,,當用戶的每個TMC板都有一個CAN-USB時,,系統(tǒng)將添加命名空間以區(qū)分每個節(jié)點的實例。在此特定用例中,,需要相應更新comm_interface_name參數(shù),,以確保與板正確通信。
圖14.多個CAN通道中的多個TMC板的示例圖,。
圖15中的代碼是用于設置此用例的示例啟動文件,。在此示例中,電機A可以通過發(fā)布到/tmcm1/cmd_abspos來控制,,電機B可以通過發(fā)布到/tmcm2/cmd_abspos來控制,,電機C可以通過發(fā)布到/tmcm3/cmd_abspos來控制。
圖15.使用多個CAN通道運行多個TMC ROS驅動程序的代碼片段,。
a.單個CAN通道中的多個TMC板
TMC ROS驅動程序支持的另一種設置是單個CAN通道中有多個TMC板,,如圖16所示,。與上文所述的對多個TMC板的支持非常相似,系統(tǒng)引入命名空間來區(qū)分每個節(jié)點實例,。所有板的comm_interface_name保持一致,。調整comm_tx_id和comm_rx_id以確保與各板正確通信。
圖16.單CAN通道中的多個TMC板的示例圖,。
圖17顯示了用于設置此用例的示例啟動文件,。在此示例中,電機A可以通過發(fā)布到/tmcm1/cmd_abspos來控制,,電機B可以通過發(fā)布到/tmcm2/cmd_abspos來控制,,電機C可以通過發(fā)布到/tmcm3/cmd_abspos來控制。
圖17.使用單個CAN通道運行多個TMC ROS驅動程序的代碼片段,。
9.輕松集成到ROS系統(tǒng)/應用中
借助ROS提供的消息傳遞系統(tǒng),,即便是較大的系統(tǒng)也可以輕松地交換節(jié)點(例如驅動程序、算法等),。TMC ROS驅動程序將這一優(yōu)勢擴展到了TMC板,,允許它無縫集成到ROS系統(tǒng)/應用中。
a.集成到AGV/AMR中
圖18說明了navigation_node如何通過發(fā)送geometry_msg/Twist格式的/cmd_vel來控制移動機器人,。然后,,motor_controller通過Geometry_msg/ Twist格式的/wheel_velocity發(fā)送反饋,使得navigation_node可以相應地重新校準,。
圖18.AGV/AMR的簡化架構,。
通過了解navigation_node發(fā)布和訂閱的位置,tmcl_ros_node可以輕松更改motor_controller(圖19),。與TMC信息檢索功能類似,,adi_tmcl會發(fā)布關于車輪轉速的實時信息,,wheel_velocity_node會將車輪轉速信息從adi_tmcl/TmcInfo轉換為geometry_msg/Twist,。由于新架構及其集成的TMC板符合正確的數(shù)據(jù)格式,因此移動機器人預計以相同方式工作,。
圖19.帶有TMC ROS驅動程序的AGV/AMR簡化架構,。
a.集成到機械臂中
圖20說明了為將TMC板集成到采用機械臂的貼片應用中,控制機械臂需要使用多個電機,。與之前的用例類似,,用戶需要確保pick_and_place_node會訂閱/發(fā)布所預期的數(shù)據(jù)格式。
圖20.(上)帶有通用電機控制器的機械臂,;(下)帶有TMC板的機械臂,。
結論
ADI公司的TMC ROS1驅動程序支持TMC基礎驅動層和應用層之間在ROS管理的系統(tǒng)內無縫通信,且適用于它支持的各種TMC模塊,。
本文深入探討了ADI Trinamic電機控制器ROS1驅動程序提供的功能,,包括:
▲電機運動控制
▲檢索電機和控制器信息
▲執(zhí)行TMC命令
▲獲取軸和全局參數(shù)值
▲支持多個TMC模塊控制設置
所有這些功能都是利用ROS的消息傳遞系統(tǒng)實現(xiàn)的,,使得電機控制器可以輕松集成到基于ROS的系統(tǒng)和應用中。
更多精彩內容歡迎點擊==>>電子技術應用-AET<<