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