簡介
Robot Operating System (ROS)由數個軟體庫和工具程式組成,可協助使用者開發機器人應用系統。ROS 的設計適用於 Ubuntu 平台,且主要在 Ubuntu 上進行測試,因此,完整測試也都使用特定的 Ubuntu 版本進行,使用者可在任何基於 Unix 的平台上安裝和運行 ROS。
在整合開發機器人時,可能會出現與相容性或是資料庫無相容版本有關的問題。為確保一切順利運行的最佳方法,便是使用 ROS 和 ROS2 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 啟動
B. eMMC 啟動
C. 連接和設定除錯埠
RSB-3720 的除錯埠與 COM1 共用。請連接除錯控制台的纜線,然後將 USB 轉 RS232 纜線連接到您的 PC 端子。將纜線接到 HDMI 接頭旁邊的 COM1 排針,RSB-3720 可透過序列傳輸纜線與主機伺服器通訊。HyperTerminal、Tera Term 或 PuTTY 等常見序列通訊程式,都適用此類應用。請將鮑率設至 115200。
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 版本。

針對 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 架構的開發成本和其他連帶問題。