以馬達控制器ROS1驅動(dòng)程序實(shí)現機器人操作系統
機器人操作系統(ROS)驅動(dòng)程序是基于ADI產(chǎn)品而開(kāi)發(fā),因此可直接在ROS生態(tài)系統中使用這些產(chǎn)品。本文概述如何在應用、產(chǎn)品和系統(例如自主導航、安全氣泡地圖和數據采集機器人)中使用和整合這些驅動(dòng)程序;以及如此將如何有助于迅速評估新技術(shù),并避免出現與第三方產(chǎn)品的互操作性問(wèn)題。
在本文探討的所有產(chǎn)品中,將重點(diǎn)關(guān)注用于ADI Trinamic馬達控制器的ROS驅動(dòng)程序,該驅動(dòng)程序是用于嵌入式運動(dòng)控制的完整板級模塊,融合ADI Trinamic運動(dòng)控制專(zhuān)業(yè)知識,以及ADI的模擬技術(shù)和電源設計技能。
什么是ROS?
ROS是機器人中間件,包含一組軟件庫和強大的開(kāi)發(fā)工具(從驅動(dòng)程序到先進(jìn)算法),可作為機器人系統或應用的開(kāi)發(fā)基礎。ROS涉及多領(lǐng)域(例如消費性電子、工業(yè)、汽車(chē)等),支持多個(gè)平臺(Linux、Windows、MacOS和一些嵌入式平臺),而且100%開(kāi)源。得益于來(lái)自全球技術(shù)社群的專(zhuān)用資源,ROS可獲得豐富的支持,進(jìn)而幫助用戶(hù)簡(jiǎn)化其設計和應用。
技術(shù)工作原理
ROS始于2007年,已成為自駕車(chē)、工業(yè)機器人、飛行器等領(lǐng)域備受歡迎的機器人開(kāi)發(fā)原型制作平臺。經(jīng)過(guò)不斷發(fā)展,該技術(shù)現在已經(jīng)有兩個(gè)版本:ROS1和ROS2。ROS1和ROS2系統必須相互隔離,但通過(guò)ROS橋,這兩個(gè)系統之間可進(jìn)行通訊和交換數據。
表一:ROS1和ROS2的主要區別
因素 | ROS1 | ROS2 |
通訊協(xié)議 | XMLRPC + TCPROS | DDS |
構建 | ROS 主控制器 + 分布式 | 完全分布式 |
構建系統 | Catkin (基于cmake) | colcon/ament (基于cmake) |
構建輸出 | ros_ws/devel | ros_ws/install |
參數 | 全局參數服務(wù)器 | 每節點(diǎn)參數 |
發(fā)布 | XML | Python (+XML、YAML 替代語(yǔ)言) |
命令 | roslaunch、rosrun、rostopic等 | ros2 launch、 ros2 run、 ros2 topic等 |
平臺 | 主要是ubuntu | Linux、MacOS、 Windows |
ROS支援的平臺
ROS Noetic是ROS1的最終版本,將于2025年5月終止支持,而ROS2自2020年6月推出以來(lái)則不斷滾動(dòng)更新發(fā)行版。
ROS基本概念
圖一顯示了ROS的一些基本概念,包括功能包、節點(diǎn)、主題、服務(wù)和消息。
圖一 : ROS基本數據流。
注:對ROS1和ROS2而言,下文討論的ROS基本概念相似。
功能包
ROS功能包是ROS程序或節點(diǎn)的主要組織系統。這是ROS中最核心的構建/發(fā)表項。創(chuàng )建ROS功能包時(shí),請務(wù)必設定專(zhuān)用的ROS工作空間。該工作空間被稱(chēng)為catkin工作空間,其中catkin是ROS的官方構建系統。
節點(diǎn)
ROS節點(diǎn)是在ROS中創(chuàng )建的可執行程序。它們是執行特定任務(wù)的進(jìn)程。ROS節點(diǎn)可使用ROS客戶(hù)端庫(如Python客戶(hù)端庫rospy和C++ 客戶(hù)端庫roscpp)相互通訊。節點(diǎn)可以訂閱和/或發(fā)表主題,也可以提供或使用服務(wù)。
主題
ROS主題是ROS節點(diǎn)生成(或者發(fā)表,以ROS術(shù)語(yǔ)而言)的數據信道。
在ROS中,發(fā)表者節點(diǎn)是主題的廣播者,而訂閱者節點(diǎn)是主題的收聽(tīng)者。
在圖二中,generic_motor_control的節點(diǎn)是廣播者。/cmd_vel是velocity_ publisher發(fā)表的主題。這表示,velocity_publisher提供基于馬達控制(或命令速度)的速度信息。
圖二 : 發(fā)表者-訂閱者
而ros_application的節點(diǎn)是收聽(tīng)者,velocity_subscriber訂閱主題/cmd_vel。這表示,velocity_subscriber存取或使用velocity_publisher提供的速度信息。
消息
主題是數據信道,而消息是數據,采用與ROS兼容、適用于不同傳感器的格式。
以下是適用于ROS消息格式的示例傳感器:
? 飛時(shí)測距(ToF)攝影機:sensor_msgs/Image、sensor_msgs/PointCloud
? 慣性測量單元(IMU)傳感器:sensor_msgs/Imu
? 馬達控制:geometry_msgs/Twist
? 車(chē)輪編碼器:geometry_msgs/TwistStamped、geometry_msgs/TwistWithCovarianceStampe
ROS主題透過(guò)發(fā)送消息(主題發(fā)布者)或接收消息(主題訂閱者)進(jìn)行通訊,并且必須采用匹配的數據類(lèi)型。
例如,在圖二中,來(lái)自velocity_publisher節點(diǎn)的速度信息(命令速度)希望被velocity_subscriber節點(diǎn)存取/使用。如果主題發(fā)布者velocity_publisher使用數據類(lèi)型geometry_msgs/Twist,則主題訂閱者velocity_subscriber也應使用相同的數據類(lèi)型。
服務(wù)
發(fā)表者-訂閱者通訊模式是開(kāi)放式模式,不適用于分布式系統中通常需要的回復交互。服務(wù)支持節點(diǎn)透過(guò)發(fā)送請求和接收響應進(jìn)行通訊。發(fā)表者-訂閱者通訊模式使用.srv檔,在這些檔中,指定了請求和響應的消息類(lèi)型等服務(wù)描述。
服務(wù)是雙向同步通訊模式,其中包含客戶(hù)端和服務(wù)器。服務(wù)器節點(diǎn)提供服務(wù),而客戶(hù)端節點(diǎn)發(fā)送請求并等待服務(wù)器節點(diǎn)做出回應。
例如,在圖三中,server_node提供服務(wù)SetVelocity.srv以更改命令速度vel。該服務(wù)接受float32格式的速度值,并以字符串格式返回狀態(tài);如果設置了請求的速度,則為"success";否則,為"FAIL"。
圖三 : 使用服務(wù)示例
client_node發(fā)送請求,將命令速度設定為2.5 mbps。server_node收到請求后,立即發(fā)送"success"響應。
將解決方案整合至ROS生態(tài)系統
ADI是ROS-Industrial聯(lián)盟的正式成員,ROS-Industrial是一個(gè)開(kāi)源項目,旨在將ROS軟件的先進(jìn)功能擴展到與工業(yè)相關(guān)的硬件與應用中。作為該技術(shù)社群的一份子,ADI最初的目標是針對工業(yè)領(lǐng)域開(kāi)發(fā)專(zhuān)用模塊。
ADI針對不同的專(zhuān)用模塊開(kāi)發(fā)了ROS驅動(dòng)程序。為了展示所開(kāi)發(fā)的驅動(dòng)程序并利用ROS的功能,ADI也開(kāi)發(fā)了ADI自主移動(dòng)機器人(ADAM)作為內部自主移動(dòng)平臺(參見(jiàn)圖四)。
圖四 : ADAM
ADAM:ADI自主移動(dòng)機器人
ADAM由ROS提供支持,并搭載ROS支持的不同組件。該平臺展示了ADI的ROS驅動(dòng)程序如何整合到移動(dòng)機器人應用中,特別是自主導航應用。
圖五所示為具有不同模塊的ADAM的簡(jiǎn)化硬件圖。該ADAM主要連接以下組件:
? ADIS16470或IMU傳感器采用精密陀螺儀、加速度計、磁力計和壓力傳感器的多軸組合,這些組件主要用作檢測回饋,用 于改善位置/方向估算。
? ADBMS6948是一款多單元電池監控器,可測量多達16個(gè)串聯(lián)連接的電芯,在整個(gè)溫度范圍內具有較高的測量精度。
? EVAL-ADTF3175D-NXZ或 CMOS ToF提供出色的高分辨率,與深度運算和處理、激光驅動(dòng)器、電源管理以及具有參考韌體/軟件的開(kāi)發(fā)工具相輔相成,可帶來(lái)更多優(yōu)勢。
? ADI Trinamic馬達控制器是用于嵌入式運動(dòng)控制的完整板級解決方案,融合ADI Trinamic運動(dòng)控制專(zhuān)業(yè)知識,以及ADI的仿真工藝技術(shù)和電源設計技能。1
圖五 : ADAM硬件圖
圖六所示為ADAM的簡(jiǎn)化ROS架構,該ADAM使用ROS驅動(dòng)程序和自主導航所需的多個(gè)應用/算法節點(diǎn)。IMU數據(/imu/data_raw)和ADI Trinamic馬達控制器回饋(/tmc_info)用作姿態(tài)估算的輸入,從而得到機器人的里程測量結果(/odom)。激光雷達數據(/scan) 是用于生成地圖的同步定位與地圖繪制(SLAM)算法的主要輸入;ToF數據(/image_raw) 還可用作其他SLAM算法的輸入。然后,move_base節點(diǎn) 將等待用戶(hù)發(fā)出任何目標姿態(tài),并向ADI Trinamic馬達控制器發(fā)送速度指令(/cmd_vel),使機器人能夠移動(dòng)。
圖六 : ADAM導航堆棧的簡(jiǎn)化ROS架構。
ADI Trinamic馬達控制器ROS驅動(dòng)程序
ADI Trinamic馬達控制器(TMC)是用于嵌入式運動(dòng)控制的完整板級解決方案,融合ADI Trinamic運動(dòng)控制專(zhuān)業(yè)知識,以及ADI的模擬技術(shù)和電源設計技能。支援單軸/多軸步進(jìn)馬達、無(wú)刷直流馬達(BLDC)等各類(lèi)馬達,可用接口包括 CAN、 EtherCAT、RS-232、RS-485 和USB,支持的協(xié)議涵蓋Trinamic運動(dòng)控制語(yǔ)言(TMCL)、CANopen、 over EtherCAT (CoE)、 CANopen 或 Modbus。
名為T(mén)MCL-IDE的IDE可協(xié)助用戶(hù)開(kāi)發(fā)應用并對這些模塊輕松重新編程。該IDE使用TMCL實(shí)現獨立操作,或使用標準化CANopen協(xié)議,允許用戶(hù)設定參數、實(shí)時(shí)針對資料進(jìn)行可視化處理,并開(kāi)發(fā)/調試獨立應用。
由于TMC使新型智慧執行器成為可能,并且隨著(zhù)ROS而日益普及,尤其是在機器人領(lǐng)域中,我們針對這些模塊開(kāi)發(fā)了額外的支持,如ROS驅動(dòng)程序,進(jìn)而進(jìn)一步擴展制造業(yè)和工業(yè)自動(dòng)化的用例。具體來(lái)說(shuō),預計這些ROS驅動(dòng)程序將能夠控制馬達的速度、位置或扭矩,以及監控馬達控制器和馬達信息。
TMC ROS驅動(dòng)程序與TMCL-IDE提供的功能相似,但其能夠讓支持ROS的系統節點(diǎn)輕松使用這些TMC,無(wú)需安裝任何其他驅動(dòng)程序。截至本文發(fā)表之時(shí),該驅動(dòng)程序僅支持CAN接口(特別是SocketCAN),其他接口正在開(kāi)發(fā)中,很快也將提供支持。此處列出目前支持的ADI Trinamic馬達控制器模塊(TMCM)。
軟件架構
圖七所示為adi_tmcl的簡(jiǎn)化軟件架構。
圖七 : adi_tmcl的簡(jiǎn)化軟件架構
如圖七所示,由于adi_tmcl使用大多數Linux系統默認支持的SocketCAN 驅動(dòng)程序,所以不需要任何額外的驅動(dòng)程序。此外,adi_tmcl具有自己的TMCL協(xié)議解析器,因而能夠理解用戶(hù)請求的符合TMCL的發(fā)送/接收指令。作為最后一層,tmcl_ros_node以發(fā)表者、訂閱者和服務(wù)的形式在ROS系統上提供直接接口。每種形式均提供特定的功能,這些功能可選擇使用一組參數進(jìn)行配置。
結論
運用ADI Trinamic馬達控制器可實(shí)現新型智慧執行器。隨著(zhù)ROS日益普及,尤其是在機器人領(lǐng)域,針對這些模塊開(kāi)發(fā)額外支持,如ROS驅動(dòng)程序,旨在進(jìn)一步擴展制造業(yè)和工業(yè)自動(dòng)化用例。
本文展示ROS如何擴展組件,其帶來(lái)的優(yōu)勢為提供附加價(jià)值,例如擴展工業(yè)應用;透過(guò)ROS通訊框架,與第三方產(chǎn)品可輕松實(shí)現互操作;提供更廣泛的選項,方便客戶(hù)在其系統中選用產(chǎn)品;快速評估新技術(shù)并立即開(kāi)始使用。
(本文作者為ADI軟件系統工程師Krizelle Paulene Apostol,資深軟件系統工程師Jamila Macagba及軟件系統設計工程經(jīng)理Maggie Maralit)
評論