技術分享:在Yocto開發環境部屬ROS

簡介

Robot Operating System (ROS)由數個軟體庫和工具程式組成,可協助使用者開發機器人應用系統。ROS 的設計適用於 Ubuntu 平台,且主要在 Ubuntu 上進行測試,因此,完整測試也都使用特定的 Ubuntu 版本進行,使用者可在任何基於 Unix 的平台上安裝和運行 ROS。

在整合開發機器人時,可能會出現與相容性或是資料庫無相容版本有關的問題。為確保一切順利運行的最佳方法,便是使用 ROSROS2 Distribution 所建議的正確 Ubuntu 版本,或是在硬體供應商提供的特定硬體和產品上,使用經過全面測試的 ROS。上述兩種方法,都能確保 ROS 的處理架構順利運行。

搭建環境

硬體簡介:

  • RSB-3720 透過 UIO40-Express 的擴充設計,滿足各種垂直應用需求。

  • NXP Arm® Cortex®-A53 i.MX8M Plus Quad/Dual up to 1.8 GHz

  • Onboard LPDDR4 4 GB/6 GB and 4000MT/s memory

  • HDMI 1920x1080 at 60Hz, 1 x Single or 1 x Dual Channel 24 bit LVDS (or 1 x 4-Lane MIPI-DSI by Software modification)

  • 1 x 4-wire RS-232/422/485, 1 x USB 3.2 Gen 1 By 1, 1 x USB2.0, 1 x Micro SD, 1 x Mic. in/Line out

  • 1 x mini-PCIe for 3G/4G, 1 x M.2 2230 Key E slot

  • Supports Yocto Project Linux and Android

  • Supports I/O expansion boards via UIO40-Express

使用 eMMC 或 SD 啟動系統

RSB-3720 啟動作業系統的方法共有兩種,其一是使用 SD 卡啟動,另一種方法是透過 eMMC 啟動。對 ROS 進行開發評估的使用者,可能會發現開發伺服器或 PC來產生運行系統的SD 卡 時,更新韌體會比較容易。

Boot strap SW1-1 SW1-2 SW1-3 SW1-4
SD ON ON OFF OFF
eMMC OFF ON OFF OFF

A. SD 啟動
image

B. eMMC 啟動
image

C. 連接和設定除錯埠

RSB-3720 的除錯埠與 COM1 共用。請連接除錯控制台的纜線,然後將 USB 轉 RS232 纜線連接到您的 PC 端子。將纜線接到 HDMI 接頭旁邊的 COM1 排針,RSB-3720 可透過序列傳輸纜線與主機伺服器通訊。HyperTerminal、Tera Term 或 PuTTY 等常見序列通訊程式,都適用此類應用。請將鮑率設至 115200。
image

BSP 的環境設定和構建說明

Advantech 已將構建環境和映像所需的流程,減少至 3 個步驟:

請造訪我們的 AIM-Linux 開發中心,並選擇基於RSB-3720相關的 BSP

跟著「User Guide」方法下載程式碼

將構建映像刷入 SD 卡,並將其從 SD 卡啟動

此舉減少了工程師在設定環境時的工作量,並在出現問題時協助解決問題。此項作業只需使用者擁有本地 PC 或雲端虛擬主機,其他所有必要素材都可以在網上找到。使用者應使用性能較強的 PC,或是帶 SSD 的虛擬主機加快流程。同理,如果使用者能存取 Azure VM 服務,透過 PC 或筆電在雲端完成作業,再下載映像至本地 SD 卡內。我們將在本簡介的後面,詳談如何在 Linux 和 Windows 上使用這些工具。

主機的 Docker 設定

使用者可在 Azure 雲端服務或本地構建主機設立附 Ubuntu 系統的虛擬構建主機。

Docker 安裝簡介

在構建主機上準備容器環境。選擇 Ubuntu 18.04,作為下述簡介的作業系統。

更新 APT 軟體包索引,並安裝軟體包讓 APT 透過 HTTPS 使用儲存庫:

$sudo apt-get update

$sudo apt-get install \

ca-certificates \

curl \

gnupg \

lsb-release

添加 Docker 的官方 GPG 金鑰

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

建立一個穩定的儲存庫,並安裝 Docker 引擎

$ echo \

"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \

$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

$ sudo apt-get update

$ sudo apt-get install docker-ce docker-ce-cli containerd.io

使用 Advantech 在 Docker Hub 製作的 Docker 映像。

$ docker pull advrisc/u18.04-imx8lbv

$ export CONTAINER_NAME=rsb-3720

$ mkdir adv-release-bsp

$ export WORKSPACE=~/adv-release-bsp

$ docker run --privileged -it --name ${CONTAINER_NAME} -v ${WORKSPACE}:/home/adv/adv-release-bsp -v /dev:/dev advrisc/u18.04-imx8lbv1 /bin/bash

構建簡介

進入 Docker 的容器環境殼層時,使用下列操作:

準備 BSP 並包含 ROS 元層

update CA certificates

$ sudo apt-get install apt-transport-https ca-certificates -y

$ sudo update-ca-certificates

$ export GIT_SSL_NO_VERIFY=1

$ repo init -u https://dev.azure.com/advcharles/IMX-Robot/_git/adv-arm-yocto-bsp -b imx-linux-zeus -m imx8LBVA0271_robot.xml

$ repo sync

$ ln -s sources/meta-robot-platform/imx/meta-robot/tools/setup-imx-robot.sh setup-imx-robot.sh

如您所見,元機器人平台已內含在 BSP 中。使用者可以使用指定的 ROS 版本,開始構建自己的機器人韌體。他們可以選擇如 ROS1 melodic 或 kinetic,或是 ROS2 foxy。

$ DISTRO=imx-robot-xwayland MACHINE=imx8mprsb3720a1 source setup-imx-robot.sh -r melodic -b imx8mprsb3720a1-robot-melodic

$ bitbake imx-robot-system

$ DISTRO=imx-robot-xwayland MACHINE=imx8mprsb3720a1 source setup-imx-robot.sh -r kinetic -b imx8mprsb3720a1-robot-kinetic

$ bitbake imx-robot-system

$ DISTRO=imx-robot-xwayland MACHINE=imx8mprsb3720a1 source setup-imx-robot.sh -r foxy -b imx8mprsb3720a1-robot-foxy

$ bitbake imx-robot-system

刷入映像並擴展 rootfs 空間

請複製映像至主機 PC 或筆電。

$ scp charles@desktop:~/adv-release-bsp/imx8mprsb3720a1-robot-melodic/tmp/deploy/images/imx8mprsb3720a1/imx-robot-system-melodic-imx8mprsb3720a1-20220309072100.rootfs.wic.bz2 .

A. Linux

選擇一個 uDisk 名稱替換 /dev/sdx。如 /dev/sdc 為例,使用者應避免使用到系統碟或重要的儲存碟。

$ sudo dd if=./imx-robot-system-melodic-imx8mprsb3720a1-20220309072100.rootfs.wic.bz2 of=/dev/sdx

B. Windows

使用者可以選擇 balenaEtcher 刷入映像至他們的 Windows 作業系統,或是他們也可以選擇 Linux 的版本。使用 Linux Desktop GUI 時,Linux 版本一的操作類似 Windows 版本。
![image|528x334](upload://vqyKwpi2KNSUfB6dDtkyC4BB4DS.png)

針對 nxp8987 SDK 構建失敗的提示和解決方法,會支援鏡像站設置並提供來源:

請同時加上 MACHINE_FEATURES_remove = " nxp8987 ",並移除構建資料夾的 local.conf 檔案內的 source mirror 部分,以防構建失敗。

請透過添加 IMAGE_INSTALL_append = " orb-slam2 usb-cam" 將 orb-slam2 包含至映像中,以便使用 slam 和 ROS 攝影機節點演示。

用戶可在 build 資料夾的 local.conf 檔案中,添加 INHERIT += “rm_work” 功能以保留硬碟空間。

在 ROS 中啟動攝影機 (僅限 USB 攝影機,目前尚未支援 MIPI 攝影機)

ROS1 仍是機器人應用系統的熱門選擇,因此我們將演示使用 ROS1。在本簡介中使用的版本,是基於 Melodic distribution,我們將演示啟動 USB 攝影機節點的方法。這次演示會將攝影機的預覽內容,顯示在您的 HDMI 螢幕上,它同時也是一個 ROS 節點。

$ source /opt/ros/melodic/setup.bash

$ roscore&

$ roslaunch usb_cam usb_cam-test.launch

SLAM 演示

您可以在下述連結,找到必要素材

https://codeload.github.com/raulmur/ORB_SLAM2/zip/refs/heads/master

http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/machine_hall/MH_02_easy/MH_02_easy.zip

$ mono_euroc/orb-slam2/Vocabulary/ORBvoc.txt

ORB_SLAM2/Examples/Monocular/EuRoC.yaml mav0/cam0/data ORB_SLAM2/Examples/Monocular/EuRoC_TimeStamps/MH01.txt

點擊下方按鈕觀看SLAM演示影片:
SLAM演示影片

結論

熟悉ROS開發環境 的使用者,會發現 ROS 能與 Ubuntu 系統良好整合。這是因為 ROS被廣泛應用於 Ubuntu x86 架構上,並用以開發機器人解決方案。反之,基於 Arm 架構的運算平台通常都會預先嵌入式Linux (如 Yocto OS),且因嵌入式 Linux 是以提供架構給終端使用者,使其可以構建模塊設計自己的作業系統而聞名,因此使用 ROS 平台安裝和開發會較為困難。Advantech 的 BSP 已完全整合 ROS,ROS 開發人員無需過度煩惱,可以專注於 ROS 應用程式開發,並將精力用在設計低功耗的機器人解決方案,這樣更能進一步降低基於 Arm 架構的開發成本和其他連帶問題。

3 Likes