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