使用 ROS1 驅(qū)動程序掌握 ADI Trinamic 電機控制器
機器人操作系統(tǒng) ( ROS ) 是一種機器人中間件,包含一組軟件庫和強大的開發(fā)工具,從驅(qū)動程序到最先進的算法,可用于開發(fā)機器人系統(tǒng)或應用程序。Analog Devices Inc. (ADI) 的 Trinamic 電機控制器支持一種新型智能執(zhí)行器,隨著 ROS 變得越來越流行,尤其是在機器人領(lǐng)域,開發(fā)了額外的模塊支持(如 ROS 驅(qū)動程序),以擴展制造和工業(yè)自動化應用的可用性。
ADI 的 TMC ROS1 驅(qū)動程序提供的功能類似于該公司的 Trinamic 電機控制語言集成開發(fā)環(huán)境 ( TMCL-IDE ),但有一個關(guān)鍵區(qū)別:它允許支持 ROS 的系統(tǒng)內(nèi)的節(jié)點使用 TMC,而無需安裝額外的驅(qū)動程序。此外,adi_tmcl 集成了自己的 TMCL 協(xié)議解釋器,使其能夠解釋符合 TMCL 標準的用戶請求命令。最后一層 tmcl_ros_node 與 ROS 系統(tǒng)建立直接接口,提供發(fā)布者、訂閱者和服務等功能。這些功能中的每一個都可以使用一組參數(shù)進行定制,這將在以下章節(jié)中詳細討論。
支持多種TMC板
TMC ROS 驅(qū)動程序或 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 文件相關(guān)聯(lián)。這些文件以人類可讀的數(shù)據(jù)序列化語言編寫,包含 ROS 參數(shù),應在執(zhí)行期間加載:
adi_tmcl/config/自動生成/TMCM-XXXX.yaml
此 YAML 文件是自動生成的,包含特定于模塊的參數(shù),不建議修改,因為它可能會導致節(jié)點執(zhí)行不同。
adi_tmcl/配置/TMCM-XXXX_Ext.yaml
該 YAML 文件包含用戶可以修改以便與開發(fā)板通信的所有參數(shù)(例如,接口名稱)、啟用電機控制和更改 ROS 主題名稱。
舉例來說,如果您想使用TMCM-1636(圖 3),只需啟動圖 1 所示的代碼,其中 adi_tmcl/launch/tmcm_1636.launch 加載專用于 TMCM-1636 的 YAML 文件。
圖 1:啟動 TMCM-1636
圖 2:使用 TMCM-1636 運行 TMC ROS 驅(qū)動程序的代碼片段
圖 3:TMCM-1636 硬件連接圖(頂部);實際設置參考圖(底部)
要使用TMCM-1260(圖 6),請啟動圖 4 所示的代碼,其中 adi_tmcl/launch/tmcm_1260.launch 加載專用于 TMCM-1260 的 YAML 文件。
圖 4:使用 TMCM-1260 啟動 TMC ROS 驅(qū)動程序的命令
圖 5:使用 TMCM-1260 運行 TMC ROS 驅(qū)動程序的代碼片段
圖 6:TMCM-1260 硬件連接圖(頂部);實際設置參考圖(底部)
啟動目錄包括所有受支持的 TMC 板,可以在此處查看。
使用 TMCL-IDE 對 TMC 模塊進行一次性配置
在通過 ROS 使用 TMC 板之前,需要使用電機校準板。所有校準都應使用 TMCL-IDE 進行,并應存儲在 E 2 PROM 中(否則,電機可能無法正確控制)。
· 對于 BLDC 電機模塊(例如 TMCM-1636):
· 有關(guān)如何通過 TMCL-IDE 的向?qū)С毓δ苓M行電機校準的演示/教程,請查看本教程。
· 有關(guān)如何通過 TMCL-IDE 中的 PI 調(diào)整功能進行比例積分 (PI) 調(diào)整的演示/教程,請查看本教程。
· 對于步進電機模塊(例如 TMCM-1260):
· 有關(guān)如何通過 TMCL-IDE 的向?qū)С毓δ苓M行校準的演示/教程,請查看本教程。
校準和調(diào)整后,請確保將所有參數(shù)存儲在電路板的 E 2 PROM 中。這可以通過存儲參數(shù)、STAP 命令和/或創(chuàng)建和上傳 TMCL 程序并啟用自動啟動模式來完成。有些電路板僅支持其中幾個選項。
在配置/調(diào)整 TMC 和電機后,TMC ROS 驅(qū)動程序的設計得到簡化,以便基于使用 TMCL-IDE 的一次性配置來控制電機。
移動/停止電機
TMC ROS 驅(qū)動程序通過發(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。這個簡單的腳本可以控制電機順時針和逆時針旋轉(zhuǎn),并逐步增加速度。要執(zhí)行此操作,請按照圖 7 中所示的命令進行操作。
圖 7:測試 TMC ROS 驅(qū)動程序速度控制的命令
筆記:
· 2 號航站樓和 3 號航站樓并排放置時視野最佳。
· 完成后,您可以在終端 1 中按 Ctrl+C 執(zhí)行命令,然后在終端 2 中按 Ctrl+C 執(zhí)行命令。
· 3號航站樓的指令自動停止。
為了驗證電機是否移動,圖 8 顯示了從 TMC(/tmc_info_0)讀回的實際速度圖。
圖 8:使用 RQT 繪制的電機實際速度(以米/秒為單位)
檢索 TMC/電機信息
系統(tǒng)可以通過訂閱以下主題從 TMC ROS 驅(qū)動程序檢索信息:
· /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 是一個簡單的腳本,它將使電機順時針旋轉(zhuǎn),然后逆時針旋轉(zhuǎn),位置逐漸增加。執(zhí)行圖 9 中所示的命令。
圖 9:測試 TMC ROS 驅(qū)動程序位置控制的命令
為了驗證電機是否移動,圖 10 顯示了從 TMC(/tmc_info_0)讀回的實際位置圖表。
圖 10:使用 RQT 繪制的電機實際位置(以度為單位)
執(zhí)行自定義 TMC 命令
系統(tǒng)可以通過執(zhí)行以下功能來訪問和調(diào)整TMC參數(shù):
· tmcl_custom_cmd (adi_tmcl/TmcCustomCmd) 獲取/設置 TMC 軸參數(shù) (AP) 和全局參數(shù) (GP) 的值。
用戶可以選擇將此服務集成到他們的 ROS 系統(tǒng)中以滿足特定的應用需求。此功能使用戶能夠直接從 ROS 驅(qū)動程序配置 TMC 板。例如,用戶可以選擇設置最大電流的軸參數(shù),從而調(diào)整允許的絕對電流水平。但是,用戶必須徹底了解他們通過此功能修改的參數(shù),因為不正確的設置可能會導致 TMC ROS 驅(qū)動程序故障。因此,強烈建議通過 TMCL-IDE 執(zhí)行任何配置。圖 11 提供了調(diào)用此服務的示例,展示了指令類型為 208 的 DrvStatusFlags 的獲取軸參數(shù)操作。
圖11:通過RQT觸發(fā)tmcl_custom_cmd服務
訪問所有 AP 值
系統(tǒng)可以通過以下方式訪問 TMC AP 的值:
· tmcl_gap (adi_tmcl/TmcGapGgpAll) 獲取指定電機/軸的所有 TMC AP 的值。
用戶可以將他們的 ROS 系統(tǒng)與此功能集成,以滿足其特定應用的需求。例如,此服務可以捕獲 TMC 板的當前設置和狀態(tài),包括編碼器步驟、PI 調(diào)諧、換向模式等 AP。
圖 12 顯示了部分輸出示例。通過分析此結(jié)果,用戶可以確認一次性配置是否正確保存在板的 E2PROM中。
圖 13 顯示了執(zhí)行該服務后獲得的部分輸出。該結(jié)果可讓用戶確認一次性配置是否已準確存儲在電路板的 E2PROM中。
圖12:通過RQT觸發(fā)tmcl_gap_all服務
訪問所有 GP 值
系統(tǒng)可以通過以下方式訪問 TMC GP 的值:
· tmcl_ggp (adi_tmcl/TmcGapGgpAll) 獲取所有 TMC GP 的值。
此功能可以檢索 TMC 板的當前配置和狀態(tài)??梢栽L問的一些 GP 包括 CAN 比特率、串行波特率和自動啟動模式。
圖13:通過RQT觸發(fā)tmcl_ggp_all
多個 TMC 板設置
對于可能需要多個 TMC 板的大型系統(tǒng)(例如機械臂),TMC ROS 驅(qū)動程序允許多個設備設置。
多個 CAN 通道中的多個 TMC 板
如圖 14 所示,當用戶每個 TMC 板都有一個 CAN-USB 時, 會添加命名空間來區(qū)分每個節(jié)點的實例。在此特定用例中,需要相應更新comm_interface_name參數(shù)以確保與板正確通信。
圖14:多個 CAN 通道中的多個 TMC 板的示例圖
圖 15:使用多個 CAN 通道運行多個 TMC ROS 驅(qū)動程序的代碼片段
圖 15 中的代碼是用于設置此用例的示例啟動文件。在此示例中,可以通過發(fā)布到/tmcm1/cmd_abspos來控制電機 A ,通過發(fā)布到/tmcm2/cmd_abspos來控制電機 B,通過發(fā)布到/tmcm3/cmd_abspos來控制電機C。
單個 CAN 通道中有多個 TMC 板
TMC ROS 驅(qū)動程序支持的另一種設置是單個 CAN 通道中的多個 TMC 板,如圖 16 所示。與描述的對多個 TMC 板的支持非常相似,引入了命名空間來區(qū)分每個節(jié)點實例。保持所有板的comm_interface_name一致。調(diào)整comm_tx_id和comm_rx_id以確保與每個板準確通信。
圖 17 顯示了用于設置此用例的示例啟動文件。在此示例中,可以通過發(fā)布到/tmcm1/cmd_abspos來控制電機 A ,通過發(fā)布到/tmcm2/cmd_abspos來控制電機 B,通過發(fā)布到 /tmcm3/ cmd_abspos來控制電機C。
輕松集成到 ROS 系統(tǒng)/應用程序
借助 ROS 提供的消息傳遞系統(tǒng),大型系統(tǒng)可以輕松交換節(jié)點(例如驅(qū)動程序和算法)。TMC ROS 驅(qū)動程序的開發(fā)將這一優(yōu)勢擴展到 TMC 板,從而可以無縫集成到 ROS 系統(tǒng)/應用程序中。
圖 16:單個 CAN 通道中多個 TMC 板的示例圖
圖 17:使用單個 CAN 通道運行多個 TMC ROS 驅(qū)動程序的代碼片段
集成至 AGV/AMR
圖 18 說明了navigation_node如何通過發(fā)送 geometry_msg/Twist 格式的 / cmd_vel來控制移動機器人。然后, motor_controller將通過geometry_msg/Twist 格式的/wheel_velocity發(fā)送反饋,以便navigation_node可以相應地重新校準。
圖 18:AGV/AMR 的簡化架構(gòu)
通過了解navigation_node發(fā)布和訂閱的位置,tmcl_ros_node可以輕松更改motor_controller(圖 19)。與 TMC 信息檢索功能類似,adi_tmcl 發(fā)布有關(guān)車輪速度的實時信息,wheel_velocity_node將車輪速度信息從 adi_tmcl/TmcInfo 轉(zhuǎn)換為 geometry_msg/Twist。由于新架構(gòu)及其集成的 TMC 板符合正確的數(shù)據(jù)格式,因此移動機器人有望以相同的方式工作。
圖 19:帶有 TMC ROS 驅(qū)動程序的 AGV/AMR 的簡化架構(gòu)
集成到機械臂中
為了將 TMC 板集成到帶有機械臂的拾放應用中,圖 20 說明了如何需要多個電機來控制機械臂。與上一個用例類似,用戶需要確保 pick_and_place_node 將訂閱/發(fā)布預期的數(shù)據(jù)格式。
圖 20:帶有通用電機控制器的機械臂(頂部);帶有 TMC 板的機械臂(底部)