實現機器人作業系統——ADI Trinamic馬達控制器ROS1驅動程式簡介

作者:ADI 軟體系統工程師Krizelle Paulene Apostol,資深軟體系統工程師Jamila Macagba及軟體系統設計工程經理Maggie Maralit


摘要

機器人作業系統(ROS)驅動程式是基於ADI產品而開發,因此可直接在ROS生態系統中使用這些產品。本文將概述如何在應用、產品和系統(例如,自主導航、安全氣泡地圖和資料採集機器人)中使用和整合這些驅動程式;以及如此將如何有助於迅速評估新技術,並避免出現與協力廠商產品的互通性問題。在本文探討的所有產品中,將重點關注最近發表用於ADI Trinamic™馬達控制器的ROS驅動程式,該驅動程式是用於嵌入式運動控制的完整板級模組,融合ADI Trinamic運動控制專業知識,以及ADI的類比技術和電源設計技能。1

什麼是ROS?

ROS是機器人中介軟體,包含一組軟體庫和強大的開發工具(從驅動程式到先進演算法),可作為機器人系統或應用的開發基礎。ROS涉及多領域(例如,消費性電子、工業、汽車等),支援多個平台(Linux、Windows、MacOS和一些嵌入式平台),而且100%開源,並提供商業選項。得益於來自全球技術社群的專用資源,ROS可獲得豐富的支援,進而幫助用戶簡化其設計和應用。

技術工作原理

ROS始於2007年,已成為自駕車、工業機器人、飛行器等領域備受歡迎的機器人開發原型製作平台。經過不斷發展,該技術現在已經有兩個版本:ROS1和ROS2。

ROS1和ROS2系統必須相互隔離,但通過ROS橋,這兩個系統之間可進行通訊和交換資料。有關更多資訊,請瀏覽 ros2/ros1_bridge頁面。

表1. ROS1和ROS2的主要區別2
因素 ROS1 ROS2
通訊協議 XMLRPC + TCPROS DDS
構建 ROS 主控制器 + 分散式 完全分散式
構建系統 Catkin (基於cmake) colcon/ament (基於cmake)
構建輸出 ros_ws/devel ros_ws/install
參數 全域參數伺服器
動態重新配置
每節點參數
發佈 XML Python (+XML、YAML 替代語言)
命令 roslaunch、rosrun、rostopic等 ros2 launch、 ros2 run、 ros2 topic等
平台 主要是ubuntu Linux、MacOS、 Windows

ROS支援的平台

ROS Noetic是ROS1的最終版本,將於2025年5月終止支援,而ROS2自2020年6月推出以來則不斷滾動更新發行版本。

如需獲取完整清單,請查看這些連結瞭解ROS1支援的平台ROS2支援的平台

ROS基本概念

圖1顯示了ROS的一些基本概念,包括功能包、節點、主題、服務和消息。

Figure 1. A ROS basic data flow.
圖1. ROS基本資料流程。

注:對ROS1和ROS2而言,下文討論的ROS基本概念相似。

功能包

ROS功能包是ROS程式或節點的主要組織系統。這是ROS中最核心的構建/發表項。創建ROS功能包時,請務必設定專用的ROS工作空間。該工作空間被稱為catkin工作空間,其中catkin是ROS的官方構建系統。

節點

ROS節點是在ROS中創建的可執行程式。它們是執行特定任務的進程。ROS節點可使用ROS用戶端庫(如Python用戶端庫rospy和C++ 用戶端庫roscpp)相互通訊。節點可以訂閱和/或發表主題,也可以提供或使用服務。3

主題

ROS主題是ROS節點生成(或者發表,以ROS術語而言)的資料通道。

在ROS中,發表者節點是主題的廣播者,而訂閱者節點是主題的收聽者。

在圖2中,generic_motor_control的節點是廣播者。/cmd_vel是velocity_ publisher發表的主題。這表示,velocity_publisher提供基於馬達控制(或命令速度)的速度資訊。

Figure 2. Publisher-subscriber.
圖2. 發表者-訂閱者。

而ros_application的節點是收聽者,velocity_subscriber訂閱主題/cmd_vel。這表示,velocity_subscriber存取或使用velocity_publisher提供的速度資訊。

消息

主題是資料通道,而消息是資料,採用與ROS相容、適用於不同感測器的格式。

以下是適用於ROS消息格式的示例感測器:

  • 飛時測距(ToF)攝影機:sensor_msgs/Image、sensor_msgs/PointCloud
  • 慣性測量單元(IMU)感測器:sensor_msgs/Imu
  • 馬達控制:geometry_msgs/Twist
  • 車輪編碼器:geometry_msgs/TwistStamped、 geometry_msgs/TwistWithCovarianceStampe

ROS主題透過發送消息(主題發佈者)或接收消息(主題訂閱者)進行通訊,並且必須採用匹配的資料類型。

例如,在圖2中,來自velocity_publisher節點的速度資訊(命令速度)希望被velocity_subscriber節點存取/使用。如果主題發佈者velocity_publisher使用資料類型geometry_msgs/Twist,則主題訂閱者velocity_subscriber也應使用相同的資料類型。

服務

發表者-訂閱者通訊模式是開放式模式,不適用於分散式系統中通常需要的回復交互。4

服務支援節點透過發送請求和接收回應進行通訊。發表者-訂閱者通訊模式使用.srv檔,在這些檔中,指定了請求和回應的消息類型等服務描述。

服務是雙向同步通訊模式,其中包含用戶端和伺服器。伺服器節點提供服務,而用戶端節點發送請求並等待伺服器節點做出回應。

例如,在圖3中,server_node提供服務SetVelocity.srv以更改命令速度vel。該服務接受float32格式的速度值,並以字串格式返回狀態;如果設置了請求的速度,則為"success";否則,為"FAIL"。

Figure 3. Sample use of service.
圖3. 使用服務示例

client_node發送請求,將命令速度設定為2.5 mbps。server_node收到請求後,立即發送"success"回應。

將ADI解決方案整合到ROS生態系統中

ADI是ROS-Industrial聯盟的正式成員,ROS-Industrial是一個開源專案,旨在將ROS軟體的先進功能擴展到與工業相關的硬體與應用中。 5作為該技術社群的一份子,ADI最初的目標是針對工業領域開發專用模組。

ADI針對不同的專用模組開發了ROS驅動程式。為了展示所開發的驅動程式並利用ROS的功能,ADI也開發了ADI自主移動機器人(ADAM)作為內部自主移動平台(參見圖4)。

Figure 4. The ADAM.
圖4. ADAM。

ADAM:ADI自主移動機器人

ADAM由ROS提供支援,並搭載ROS支援的不同元件。該平台展示了ADI的ROS驅動程式如何整合到移動機器人應用中,特別是自主導航應用。

圖5所示為具有不同模組的ADAM的簡化硬體圖。該ADAM主要連接以下元件:

  • ADIS16470IMU 感測器採用精密陀螺儀、加速度計、磁力計和壓力感測器的多軸組合,這些元件主要用作檢測回饋,用 於改善位置/方向估算。
  • ADBMS6948是一款多單元電池監控器,可測量多達16個串聯連接的電芯,在整個溫度範圍內具有較高的測量精度。
  • EVAL-ADTF3175D-NXZ 或 CMOS ToF提供出色的高解析度,與深度運算和處理、鐳射驅動器、電源管理以及具有參考韌體/軟體的開發工具相輔相成,可帶來更多優勢。
  • ADI Trinamic馬達控制器是用於嵌入式運動控制的完整板級解決方案,融合ADI Trinamic運動控制專業知識,以及ADI的模擬工藝技術和電源設計技能。1
Figure 5. A high level hardware diagram of the ADAM.
圖5. ADAM硬體圖

圖6所示為ADAM的簡化ROS架構,該ADAM使用ROS驅動程式和自主導航所需的多個應用/演算法節點。IMU資料 (/imu/data_raw)和ADI Trinamic馬達控制器回饋 (/tmc_info) 用作姿態估算的輸入,從而得到機器人的里程測量結果 (/odom)。雷射雷達資料(/scan)是用於生成地圖的同步定位與地圖繪製(SLAM)演算法的主要輸入;ToF資料 (/image_raw)還可用作其他SLAM演算法的輸入。然後,move_base節點 將等待使用者發出任何目標姿態,並向ADI Trinamic馬達控制器發送速度指令 (/cmd_vel) ,使機器人能夠移動。

Figure 6. A high level ROS architecture of the ADAM’s navigation stack.
圖6. ADAM導航堆疊的簡化ROS架構。

ADI Trinamic馬達控制器ROS驅動程式

ADI Trinamic馬達控制器(TMC)是用於嵌入式運動控制的完整板級解決方案,融合ADI Trinamic運動控制專業知識,以及ADI的類比技術和電源設計技能。1支援單軸/多軸步進馬達、無刷直流馬達(BLDC)等各類馬達,可用介面包括 CAN、 EtherCAT®、RS-232、RS-485 和USB,支援的協定涵蓋Trinamic運動控制語言(TMCL)、CANopen®、 over EtherCAT (CoE)、 CANopen 或 Modbus。1

名為 TMCL-IDE的IDE可協助用戶開發應用並對這些模組輕鬆重新編程。該IDE使用TMCL實現獨立操作,或使用標準化 CANopen®協議,允許使用者設定參數、即時針對資料進行視覺化處理,並開發/調試獨立應用。

由於TMC使新型智慧執行器成為可能,並且隨著ROS而日益普及,尤其是在機器人領域中,我們針對這些模組開發了額外的支援,如ROS驅動程式,進而進一步擴展製造業和工業自動化的用例。具體來說,預計這些ROS驅動程式將能夠:

  • 控制馬達的速度、位置或扭矩
  • 監控馬達控制器和馬達資訊

TMC ROS驅動程式與TMCL-IDE提供的功能相似,但其能夠讓支援ROS的系統節點輕鬆使用這些TMC,無需安裝任何其他驅動程式。截至本文發表之時,該驅動程式僅支援CAN介面(特別是SocketCAN),其他介面正在開發中,很快也將提供支援。

此處列出了目前支援的ADI Trinamic馬達控制器模組(TMCM)。

軟體架構

圖7所示為adi_tmcl的簡化軟體架構。

Figure 7. A high level software architecture of adi_tmcl.
圖7. adi_tmcl的簡化軟體架構。

如圖7所示,由於adi_tmcl使用大多數Linux系統預設支援的SocketCAN 驅動程式,所以不需要任何額外的驅動程式。此外,adi_tmcl具有自己的TMCL協議解析器,因而能夠理解用戶請求的符合TMCL的發送/接收指令。作為最後一層,tmcl_ros_node以發表者、訂閱者和服務的形式在ROS系統上提供直接介面。每種形式均提供特定的功能,這些功能可使用以下部分詳細介紹的一組參數進行配置。

特性

adi_tmcl提供一系列特性,包括:

  1. 支援不同的TMC板
  2. 使用TMCL-IDE對TMC模組進行一次性配置
  3. 移動/停止馬達
  4. 能夠獲取TMC/馬達資訊
  5. 執行自訂TMC命令
  6. 能夠獲取所有軸參數值
  7. 能夠獲取所有全域參數值
  8. 支援多個TMC板設定
  9. 輕鬆整合到ROS系統/應用中

敬請關注ADI《類比對話》文章"掌控搭載ROS1驅動程式的Trinamic馬達控制器",文中將詳細探討這些特性,並舉例說明如何使用這些特性。

結論

運用ADI Trinamic馬達控制器可實現新型智慧執行器。隨著ROS日益普及,尤其是在機器人領域,我們針對這些模組開發了額外支援,如ROS驅動程式,旨在進一步擴展製造業和工業自動化用例。

在本文中,我們展示了ROS如何擴展元件,並帶來以下的優勢:

  • 提供附加價值,例如擴展工業應用;
  • 透過ROS通訊框架,與協力廠商產品可輕鬆實現交互操作;
  • 提供更廣泛的選項,方便客戶在其系統中選用ADI產品;
  • 快速評估新技術並立即開始使用。欲瞭解更多資訊,請瀏覽ADI工業機器人頁面。

有關更多資訊,請瀏覽ADI的 工業機器人頁面。

接下來會怎樣?

  • 並請關注有關ADI Trinamic馬達控制器ROS1驅動程式的文章,深入瞭解相關資訊。
  • 敬請關注未來發表有關用於ADI Trinamic馬達控制器的ROS2的文章
  • 下載ADI Trinamic馬達控制器 ROS1ROS2 驅動程式
  • 購買ADI Trinamic 馬達馬達控制器評估版

參考電路

1用於馬達和運動控制的ADI Trinamic硬體。" ADI公司

2ros2/ros2_documentation。" GitHub, Inc.

3瞭解ROS節點。" ROS.org.

4服務。" ROS.org.

5ROS-Industrial。" ROS.org.

6適合運動控制應用的工業通訊協定和介面。" ADI