實現機器人作業系統ADI Trinamic 馬達控制器簡介

摘要

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

什麼是 ROS?

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

該技術的工作原理是什麼?

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

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

表 1. ROS1 和 ROS2 的主要差異

 

ROS 支援的平台

 

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

如需獲取完整列表,請查看這些連結,以了解 ROS1 支援的平台和 ROS2 支援的平台。

ROS 基本概念

圖 1 顯示了 ROS 的一些基本概念,包括封包 (Packages)、節點 (Nodes)、主題 (Topics)、服務 (Services) 和訊息 (Messages)。

圖 1. ROS 基本資料流。

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

封包 (Packages)

ROS 封包是 ROS 程式或節點的主要組織系統。這是 ROS 中最核心的建構/發布項目。建立 ROS 封包時,請務必設定專用的 ROS 工作區 (Workspace)。該工作區被稱為 catkin 工作區,其中 catkin 是 ROS 的官方建構系統。

節點 (Nodes)

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

主題 (Topics)

ROS 主題是 ROS 節點產生(或者發布,用 ROS 的術語來說)的資料通道。

在 ROS 中,發布者 (Publisher) 節點是主題的廣播者,而訂閱者 (Subscriber) 節點是主題的收聽者。

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

圖 2. 發布者-訂閱者。

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

訊息 (Messages)

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

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

  • 飛時測距 (ToF) 攝影機:sensor_msgs/Imagesensor_msgs/PointCloud

  • 慣性測量單元 (IMU) 感測器:sensor_msgs/Imu

  • 馬達控制:geometry_msgs/Twist

  • 車輪編碼器:geometry_msgs/TwistStampedgeometry_msgs/TwistWithCovarianceStamped

ROS 主題透過發送訊息(主題發布者)或接收訊息(主題訂閱者)進行通訊,並且必須採用相符的資料型態 (Data type)。

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

服務 (Services)

發布者-訂閱者通訊模式是開放式模式,不適用於分散式系統中通常需要的回覆互動 (Reply interactions)。4

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

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

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

圖 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)。

圖 4. ADAM。

ADAM:ADI 自主移動機器人

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

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

  • ADIS16470 或 IMU 感測器採用精密陀螺儀、加速度計、磁力計和壓力感測器的多軸組合,這些元件主要用作偵測回授,用於改善位置/方向估測。

  • ADBMS6948 是一款多芯電池監控器,可測量多達 16 個串聯連接的電池芯,在整個溫度範圍內具有較高的測量精度。

  • EVAL-ADTF3175D-NXZ 或 CMOS ToF 提供出色的高解析度,與深度計算和處理、雷射驅動器、電源管理以及具有參考韌體/軟體的開發工具相輔相成,可帶來更多優勢。

  • ADI Trinamic 馬達控制器是用於嵌入式運動控制的完整板級解決方案,融合 ADI Trinamic 運動控制專業知識,以及 ADI 的類比製程技術和電源設計技能

圖 5. ADAM 的高階硬體圖。

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

圖 6. ADAM 導航堆疊 (Navigation stack) 的簡化 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 使新型智慧致動器 (Smart actuators) 成為可能,並且隨著 ROS 日益普及,尤其是在機器人領域,我們針對這些模組開發了額外支援,如 ROS 驅動程式,從而進一步擴展製造業和工業自動化的用例。具體來說,預計這些 ROS 驅動程式將能夠:

  • 控制馬達的速度、位置或扭矩

  • 監控馬達控制器和馬達資訊

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

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

軟體架構

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

圖 7. adi_tmcl 的簡化軟體架構。

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

特性

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

  • 支援不同的 TMC 板

  • 使用 TMCL-IDE 對 TMC 模組進行一次性配置

  • 移動/停止馬達

  • 能夠獲取 TMC/馬達資訊

  • 執行自訂 TMC 命令

  • 能夠獲取所有軸參數值

  • 能夠獲取所有全域參數值

  • 支援多個 TMC 板設定

  • 輕鬆整合到 ROS 系統/應用中

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

結論

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

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

  • 提供附加價值,比如擴展工業應用;

  • 透過 ROS 通訊框架,與第三方產品可輕鬆實現互通性;

  • 提供更廣泛的選項,方便客戶在其系統中選用 ADI 產品;

  • 快速評估新技術並立即開始使用。欲了解更多資訊,請造訪 ADI 工業機器人頁面。

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