當前位置: 華文問答 > 科學

ros系統對於機器人開發的作用是什麽?

2020-06-02科學

開發機器人硬件時面臨的挑戰之一是處理與電機的通訊,以及根據即時生成的軌跡向其發送命令。由於接受軌跡的電機應遵守時間限制,所以電機驅動器和控制器之間的無縫通訊變得至關重要。此外,控制器還應從電機接收最新的關節狀態(位置、速度、力)資訊,從而能夠驗證軌跡執行情況。然後剩下的最後一項挑戰是實際生成軌跡並將其發送給電機驅動器。

為了滿足這些要求,ROS(機器人作業系統)框架為我們提供了ROS-control和ROS-Moveit等多款工具。ROS (機器人作業系統)是一種軟件框架,實施了最先進的演算法和工具,能夠以最低的工作量簡化機器人硬件和軟件開發。

控制關節作動器的方法可能有多種,例如指定關節位置、關節速度或關節作用力,完全依賴於套用所需的控制水平。由於速度和扭矩控制環路等所有低階處理都是在驅動硬件內執行的,如果關節位置直接用於命令執行器,事情就變得比較簡單。但是,如果使用關節或關節作用力命令執行器,那麽就必須透過執行命令器材上的控制環路來生成位置介面,在我們的例子中為執行ROS control例項的linux機器。

ROS-CONTROL

ROS-control是一個ROS package,能夠與以上所述的多種硬件例項對接。為了實作以上目的,ROS-control提供對控制環路實作的抽象表示,從而可以控制任意電機或執行器,而不必考慮其硬件介面。

根據官方檔,ROS-control可原生支持4種類別的硬件介面:

1.關節命令介面

  • 作用力關節介面
  • 速度關節介面
  • 位置關節介面
  • 2.關節狀態介面

  • 透過下圖能夠很好地理解該介面。
  • 【ROS硬件介面記憶體概念圖。來源:ros_control】

    從圖中可以看出,ROS control使用記憶體位元置與執行器及電機通訊。例如,如果必須使用位置介面命令電機,ROS control只需在記憶體位元置「pos_cmd_」寫入位置要求值,該值將被透過電機的通訊介面傳輸到電機。以帶有Landungsbrücke的TMC4671評估套件為例,這些介面可以是RS232、USB串口或RN171XV/RN42XV無線模組。類似地,對於速度和作用力介面,要求值也被寫入到預先定義的相應記憶體位元置。現在,剩下的問題是,如何從電機讀取關節狀態。與關節命令介面類似,關節值被讀入到記憶體位元置「pos_」、「vel_」和「eff_」。現在,只需以一定的間隔更新這些記憶體位元置,即可命令和讀取關節介面。利用以下的程式碼片段很容易解釋這一過程:

    class trinamic: public hardware_interface::RobotHW{ public: trinamic(); void read(); void write();};

    這裏,可利用建構函式初始化,比如,通訊介面(在我們使用Landungsbrücke的實作中為串口)。更進一步,在迴圈中定期呼叫trinamic::read()和trinamic::write()函數,從而以固定間隔更新記憶體位元置。

    ROS控制器

    硬件介面啟動並執行後,我們可以生成許多控制器之一,例如position_controllers、velocity_controllers、joint_state_controller、joint_trajectory_controller。這些控制器僅僅是硬件介面作為ROS topics的抽象表示。如上所述,這裏可以使用速度關節介面啟動position_controller,使控制環路在主機上執行。此外,joint_trajectory_controller相容所有類別的關節命令介面。值得註意的是,我們應始終檢查沖突,確保沒有兩個控制器同時存取相同的硬件介面。

    建立ROS CONTROL和TMC4671之間的通訊

    得益於TMCL API,利用Landungsbrücke可以毫不費力地建立ROS和TMC4671之間的通訊。如上所述,透過USB串口建立通訊,支持命令位置(因為我們正在建立硬件介面)和傳輸關節位置。Landungsbrücke接收到該命令位置後,透過SPI將該值寫入到寄存器0x68, PID_POSITION_TARGET。此外,從寄存器0x6B, PID_POSITION_ACTUAL獲取當前位置並透過USB串口傳輸。由於所有這些值都是32位元有符號整數,數據被編組為4個單字節無符號整數進行發送和接收。

    德國電機驅動芯片領導者TRINAMIC品牌中國區總代理商銷售經理-陳先生13714330775