[導(dǎo)讀]開發(fā)機(jī)器人硬件時面臨的挑戰(zhàn)之一是處理與電機(jī)的通信,以及根據(jù)實時生成的軌跡向其發(fā)送命令。由于接受軌跡的電機(jī)應(yīng)遵守時間限制,所以電機(jī)驅(qū)動器和控制器之間的無縫通信變得至關(guān)重要。此外,控制器還應(yīng)從電機(jī)接收最新的關(guān)節(jié)狀態(tài)(位置、速度、力)信息,從而能夠驗證軌跡執(zhí)行情況。然后剩下的最后一項挑...
開發(fā)機(jī)器人硬件時面臨的挑戰(zhàn)之一是處理與電機(jī)的通信,以及根據(jù)實時生成的軌跡向其發(fā)送命令。由于接受軌跡的電機(jī)應(yīng)遵守時間限制,所以電機(jī)驅(qū)動器和控制器之間的無縫通信變得至關(guān)重要。此外,控制器還應(yīng)從電機(jī)接收最新的關(guān)節(jié)狀態(tài)(位置、速度、力)信息,從而能夠驗證軌跡執(zhí)行情況。然后剩下的最后一項挑戰(zhàn)是實際生成軌跡并將其發(fā)送給電機(jī)驅(qū)動器。
為了滿足這些要求,ROS(機(jī)器人操作系統(tǒng))框架為我們提供了ROS-control和ROS-Moveit等多款工具。ROS (機(jī)器人操作系統(tǒng))是一種軟件框架,實施了最先進(jìn)的算法和工具,能夠以最低的工作量簡化機(jī)器人硬件和軟件開發(fā)。
控制關(guān)節(jié)作動器的方法可能有多種,例如指定關(guān)節(jié)位置、關(guān)節(jié)速度或關(guān)節(jié)作用力,完全依賴于應(yīng)用所需的控制水平。由于速度和扭矩控制環(huán)路等所有低級處理都是在驅(qū)動硬件內(nèi)執(zhí)行的,如果關(guān)節(jié)位置直接用于命令執(zhí)行器,事情就變得比較簡單。但是,如果使用關(guān)節(jié)或關(guān)節(jié)作用力命令執(zhí)行器,那么就必須通過運(yùn)行命令設(shè)備上的控制環(huán)路來生成位置接口,在我們的例子中為運(yùn)行ROS control實例的linux機(jī)器。
ROS-CONTROL
ROS-control是一個ROS package,能夠與以上所述的多種硬件實例對接。為了實現(xiàn)以上目的,ROS-control提供對控制環(huán)路實現(xiàn)的抽象表示,從而可以控制任意電機(jī)或執(zhí)行器,而不必考慮其硬件接口。
根據(jù)官方文件,ROS-control可原生支持4種類型的硬件接口:1.關(guān)節(jié)命令接口
-
作用力關(guān)節(jié)接口
-
速度關(guān)節(jié)接口
-
位置關(guān)節(jié)接口
2.關(guān)節(jié)狀態(tài)接口
【ROS硬件接口存儲器概念圖。來源:ros_control】
從圖中可以看出,ROS control使用存儲器位置與執(zhí)行器及電機(jī)通信。例如,如果必須使用位置接口命令電機(jī),ROS control只需在存儲器位置“pos_cmd_”寫入位置要求值,該值將被通過電機(jī)的通信接口傳輸?shù)诫姍C(jī)。以帶有Landungsbrücke的TMC4671評估套件為例,這些接口可以是RS232、USB串口或RN171XV/RN42XV無線模塊。類似地,對于速度和作用力接口,要求值也被寫入到預(yù)先定義的相應(yīng)存儲器位置?,F(xiàn)在,剩下的問題是,如何從電機(jī)讀取關(guān)節(jié)狀態(tài)。與關(guān)節(jié)命令接口類似,關(guān)節(jié)值被讀入到存儲器位置“pos_”、“vel_”和“eff_”。現(xiàn)在,只需以一定的間隔更新這些存儲器位置,即可命令和讀取關(guān)節(jié)接口。利用以下的代碼片段很容易解釋這一過程:
class trinamic: public hardware_interface::RobotHW{ public: trinamic(); void read(); void write();};
這里,可利用構(gòu)造函數(shù)初始化,比如,通信接口(在我們使用Landungsbrücke的實現(xiàn)中為串口)。更進(jìn)一步,在循環(huán)中定期調(diào)用trinamic::read()和trinamic::write()函數(shù),從而以固定間隔更新存儲器位置。
ROS控制器
硬件接口啟動并運(yùn)行后,我們可以生成許多控制器之一,例如position_controllers、velocity_controllers、joint_state_controller、joint_trajectory_controller。這些控制器僅僅是硬件接口作為ROS topics的抽象表示。如上所述,這里可以使用速度關(guān)節(jié)接口啟動position_controller,使控制環(huán)路在主機(jī)上運(yùn)行。此外,joint_trajectory_controller兼容所有類型的關(guān)節(jié)命令接口。值得注意的是,我們應(yīng)始終檢查沖突,確保沒有兩個控制器同時訪問相同的硬件接口。
建立ROS CONTROL和TMC4671之間的通信
得益于TMCL API,利用Landungsbrücke可以毫不費力地建立ROS和TMC4671之間的通信。如上所述,通過USB串口建立通信,支持命令位置(因為我們正在建立硬件接口)和傳輸關(guān)節(jié)位置。Landungsbrücke接收到該命令位置后,通過SPI將該值寫入到寄存器0x68, PID_POSITION_TARGET。此外,從寄存器0x6B, PID_POSITION_ACTUAL獲取當(dāng)前位置并通過USB串口傳輸。由于所有這些值都是32位有符號整數(shù),數(shù)據(jù)被編組為4個單字節(jié)無符號整數(shù)進(jìn)行發(fā)送和接收。
如何設(shè)置
【視頻硬件伺服控制芯片TMC4671配置過程指導(dǎo)】
最初利用TMCL-IDE根據(jù)電機(jī)設(shè)置TMC4671,具體過程說明請觀看硬件伺服控制芯片TMC4671配置過程指導(dǎo)視頻。更新在ROS_control.c中的init_motor()函數(shù)中從IDE接收的寄存器設(shè)置?,F(xiàn)在,在任意工作區(qū)下載ROSpackage,并利用啟動文件啟動硬件接口??梢噪S啟動文件中的ROS control節(jié)點生成任意兼容的ROS控制器??稍赾ontroller.yaml中配置控制器。
使用TMC4671進(jìn)行位置控制時,最重要的部分是調(diào)節(jié)速度和位置控制環(huán)路的PI增益??墒褂眉拇嫫?x58和0x5A手動調(diào)節(jié)這些環(huán)路。但強(qiáng)烈建議不要這么做。
參考
1. S.Chitta, E. Marder-Eppstein, W. Meeussen, V. Pradeep, A. RodríguezTsouroukdissian, J. Bohren, D. Coleman, B. Magyar, G. Raiola, M. Lüdtke and E. Fernandez Perdomo
-
“ros_control: A generic and simple control framework for ROS”
原文轉(zhuǎn)自TRINAMIC電機(jī)驅(qū)動控制系統(tǒng)
本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。