Jetson ORIn NX在(zài)ROS 2中(zhōng)的(de)部(bù)署(shǔ)指南(nán)

 公(gōng)司新(xīn)聞     |      2023-11-27 17:21:29    |      瀝拓

图(tú)片

Alp-609是(shì)瀝拓科技基于(yú)Jetson Orin NX核心板研發(fà)生(shēng)産的(de)一(yī)款高(gāo)性(xìng)能(néng)邊(biān)緣计算平台(tái),具有(yǒu)強(qiáng)大(dà)的(de)计算能(néng)力和(hé)低(dī)功耗設计,适用(yòng)于(yú)各(gè)種(zhǒng)需要(yào)實(shí)时(shí)邊(biān)緣计算的(de)應(yìng)用(yòng)场(chǎng)景。在(zài)ROS 2Robot Operating System 2)中(zhōng)部(bù)署(shǔ)Jetson ORIn NX可(kě)以为其(qí)提(tí)供先(xiān)進(jìn)的(de)感(gǎn)知、導航和(hé)控制功能(néng)。

本(běn)文(wén)将介紹在(zài)ROS 2中(zhōng)部(bù)署(shǔ)Jetson ORIn NX的(de)步驟,包(bāo)括安(ān)裝(zhuāng)ROS 2、配置Jetson ORIn NX、編写(xiě)和(hé)調試ROS 2應(yìng)用(yòng)程序等方(fāng)面(miàn)。

在(zài)jetson上(shàng)源碼編譯配置ROS2 humble,需使用(yòng)jetpack5.x版本(běn)的(de)系(xì)統,並(bìng)安(ān)裝(zhuāng)cmake-v3.24.1,還(huán)需要(yào)删除系(xì)統上(shàng)的(de)python3.9只(zhī)保留python3.8,以下(xià)是(shì)在(zài)Jetson Orin NX上(shàng)搭建环(huán)境與(yǔ)源碼編譯安(ān)裝(zhuāng)ROS2 Humble的(de)步驟:

一(yī)、安(ān)裝(zhuāng)ROS2 Humble

1.編譯安(ān)裝(zhuāng)cmake-v3.24.1

sudo apt-get install -y libssl-dev

wget https://github.com/Kitware/CMake/releases/download/v3.24.1/cmake-3.24.1.tar.gz

tar -zxvf cmake-3.24.1.tar.gz

cd cmake-3.24.1

./bootstrap

make -j

sudo make install

運行命令查看(kàn)當前(qián)cmake的(de)版本(běn)

图(tú)片

2.卸载(zài)jetpack上(shàng)的(de)python3.9

sudo apt remove *python3.9*

3.安(ān)裝(zhuāng)ROS2依賴庫

locale  # check for UTF-8

sudo apt update && sudo apt install locales

sudo locale-gen en_US en_US.UTF-8

sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8

export LANG=en_US.UTF-8

locale  # verify settings

 

sudo apt install software-properties-common

sudo add-apt-repository universe

 

sudo apt update && sudo apt install curl

sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg

 

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

 

sudo apt update && sudo apt install -\

  python3-flake8-docstrings \

  python3-pip \

  python3-pytest-cov \

  ros-dev-tools \

  git-lfs \

  wget

 

python3 -m pip install -\

   flake8-blind-except \

   flake8-builtins \

   flake8-class-newline \

   flake8-comprehensions \

   flake8-deprecated \

   flake8-import-order \

   flake8-quotes \

   "pytest>=5.3" \

   pytest-repeat \

   pytest-rerunfailures

4.安(ān)裝(zhuāng)ROS2环(huán)境並(bìng)源碼編譯ROS2 Humble


mkdir -p ros2_humble/src

cd ros2_humble

 

wget https://raw.githubusercontent.com/ros2/ros2/humble/ros2.repos

vcs import src < ros2.repos

 

sudo rosdep init

rosdep update

rosdep install --from-paths src --ignore-src ---skip-keys "fastcdr rti-connext-dds-6.0.1 urdfdom_headers"

 

colcon build --merge-install

5.設置自(zì)动加载(zài)ROS2 Humble环(huán)境

cd ros2_humble

echo "source $PWD/install/local_setup.bash" >> ~/.bashrc

6.測試是(shì)否配置成(chéng)功

運行ros2的(de)demo程序測試是(shì)否可(kě)用(yòng),新(xīn)開(kāi)一(yī)个(gè)終(zhōng)端運行talker demo

图(tú)片

再打(dǎ)開(kāi)另(lìng)一(yī)个(gè)終(zhōng)端運行listener demo

图(tú)片

可(kě)以看(kàn)到(dào)當前(qián)talker輸出(chū)的(de)數字(zì)與(yǔ)listener接收(shōu)的(de)數字(zì)一(yī)樣(yàng),證明(míng)ROS2安(ān)裝(zhuāng)成(chéng)功

一(yī)、在(zài)ROS2 Humble配置打(dǎ)開(kāi)imx-219 csi攝像头(tóu)步驟:

1.下(xià)载(zài)在(zài)ROS2上(shàng)調用(yòng)csi攝像头(tóu)的(de)代(dài)碼


1.下(xià)载(zài)用(yòng)于(yú)显示图(tú)像數據(jù)的(de)rqt_image_view工具源碼

mkdir -p ~/csi_camera_ws/src

cd ~/csi_camera_ws/src

git clone https://github.com/mechasolution/jetson_csi_camera_ros2_driver.git


2.下(xià)载(zài)用(yòng)于(yú)显示图(tú)像數據(jù)的(de)rqt_image_view工具源碼

git clone https://github.com/ros2-gbp/rqt_image_view-release

3.修改攝像头(tóu)配置

cd jetson_csi_camera_ros2_driver

vim param/csi_camera_ros2_driver.yaml

根(gēn)據(jù)接入(rù)的(de)csi攝像头(tóu)的(de)id号(hào)和(hé)分(fēn)辨率修改配置文(wén)件(jiàn),这(zhè)邊(biān)測試的(de)攝像头(tóu)配置如(rú)下(xià):


图(tú)片


4.編譯並(bìng)運行

cd ~/csi_camera_ws

colcon build --merge-install

source ~/csi_camera_ws/install/local_setup.bash

ros2 launch jetson_csi_camera_ros2_driver jetson_csi_camera_ros2_driver.launch.py

图(tú)片

可(kě)在(zài)另(lìng)一(yī)个(gè)終(zhōng)端里(lǐ)運行ros2 run rqt_image_view rqt_image_view打(dǎ)開(kāi)rqt工具,将topic配置为/image_raw可(kě)看(kàn)到(dào)當前(qián)攝像头(tóu)的(de)画面(miàn)

图(tú)片

二(èr)、在(zài)ROS2 Humble配置使用(yòng)realsense D415双(shuāng)目攝像头(tóu)

1.安(ān)裝(zhuāng)編譯librealsense所(suǒ)需的(de)依賴庫

sudo apt-get install git \

libssl-dev \

libusb-1.0-0-dev \

libudev-dev \

pkg-config \

libgtk-3-dev \

mesa-common-dev \

libgl1-mesa-dev \

libglu1-mesa-dev \

freeglut3-dev -y

2.下(xià)载(zài)librealsense源碼並(bìng)編譯安(ān)裝(zhuāng)

git clone https://github.com/IntelRealSense/librealsense.git

cd librealsense ./scripts/setup_udev_rules.sh

mkdir build && cd build

cmake .. -DBUILD_EXAMPLES=true -DCMAKE_BUILD_TYPE=release -DFORCE_RSUSB_BACKEND=false -DBUILD_WITH_CUDA=true

make -j$(($(nproc)-1)) && sudo make install

3.新(xīn)建ROS2工作(zuò)目录(lù)下(xià)载(zài)realsense-ros源碼並(bìng)編譯

mkdir -p ~/ros2_ws/src

cd ~/ros2_ws/src/

 

git clone https://github.com/IntelRealSense/realsense-ros.git -b ros2-development

cd ~/ros2_ws

 

colcon build --merge-install

4.配置realsense-ros环(huán)境並(bìng)運行

source ~/ros2_ws/install/local_setup.bash

ros2 launch realsense2_camera rs_launch.py depth_module.profile:=640x480x15 pointcloud.enable:=true

图(tú)片

打(dǎ)開(kāi)rqt工具,點(diǎn)擊Pluguns -> Visualization -> Image View添加显示框,在(zài)Image View中(zhōng)選擇/camera/color/image_raw實(shí)时(shí)显示图(tú)像數據(jù),同(tóng)樣(yàng)步驟添加另(lìng)一(yī)个(gè)Image View框選擇/camera/depth/image_rect_raw显示深度(dù)图(tú)像數據(jù)

图(tú)片

三(sān)、配置Oradar-MS200激光(guāng)雷(léi)达(dá)

1.創建工作(zuò)目录(lù)

源碼從雷(léi)达(dá)供貨商家(jiā)獲取(qǔ),或(huò)在(zài)github上(shàng)找(zhǎo)别人(rén)上(shàng)傳的(de)代(dài)碼,这(zhè)里(lǐ)使用(yòng)從雷(léi)达(dá)廠(chǎng)家(jiā)家(jiā)獲取(qǔ)的(de)源碼

mkdir -p ~/lidar_ros_ws/src

cp -ar oradar_ros ~/lidar_ros_ws/src/ 


2.将編譯選项修改为ROS2

cd ~/lidar_ros_ws/src/oradar_ros

cp package_ros2.xml package.xml

vim CMakeLists.txt 

COMPILE_METHOD修改成(chéng)COLCON

图(tú)片

3.配置雷(léi)达(dá)參數

修改oradar_ros/launch/ms200_scan.launch.py文(wén)件(jiàn)

參數名(míng)

數據(jù)类型

描述

frame_id

string

激光(guāng)雷(léi)达(dá)坐标(biāo)系(xì)名(míng)稱。 默認为laser_frame

scan_topic

string

LaserScan主(zhǔ)题名(míng)。默認为scan

port_name

string

激光(guāng)雷(léi)达(dá)串口名(míng)稱。 默認值为/dev/ttyACM0

baudrate

int

雷(léi)达(dá)串口波(bō)特(tè)率.。默認值为230400

angle_min

double

最(zuì)小角(jiǎo)度(dù),單位(wèi)度(dù),取(qǔ)值範围[0, 360]。默認值为0

angle_max

double

最(zuì)大(dà)角(jiǎo)度(dù),單位(wèi)度(dù),取(qǔ)值範围[0, 360]。默認值为360

range_min

double

最(zuì)小距離,單位(wèi)米(mǐ),默認值为0.05

range_max

double

最(zuì)大(dà)距離,單位(wèi)米(mǐ),默認值为20.0

clockwise

bool

配置點(diǎn)雲(yún)方(fāng)向(xiàng),true为順时(shí)針(zhēn), false为逆时(shí)針(zhēn)。默認为false

motor_speed

int

雷(léi)达(dá)轉(zhuǎn)速,單位(wèi)Hz,取(qǔ)值範围为5~15Hz。默認值为10Hz

4.編譯並(bìng)運行

cd ~/lidar_ros_ws

colcon build --merge-install

source install/setup.bash

ros2 launch oradar_lidar ms200_scan_view.launch.py

程序運行成(chéng)功会(huì)自(zì)动打(dǎ)開(kāi)一(yī)个(gè)rviz2窗(chuāng)口

图(tú)片

在(zài)rviz2中(zhōng)可(kě)看(kàn)到(dào)實(shí)时(shí)显示ms200獲取(qǔ)的(de)點(diǎn)雲(yún),若不(bù)显示需根(gēn)據(jù)配置修改左(zuǒ)側的(de)frame和(hé)topic

五(wǔ)、調試和(hé)優化(huà)

完成(chéng)應(yìng)用(yòng)程序編写(xiě)後(hòu),需要(yào)進(jìn)行調試和(hé)優化(huà),以确保其(qí)能(néng)夠在(zài)Jetson ORIn NX上(shàng)正(zhèng)确運行並(bìng)达(dá)到(dào)預期的(de)性(xìng)能(néng)。可(kě)以通(tòng)过(guò)觀察ROS 2的(de)日(rì)志信(xìn)息和(hé)Jetson ORIn NX的(de)狀态信(xìn)息来(lái)進(jìn)行調試。在(zài)優化(huà)方(fāng)面(miàn),可(kě)以通(tòng)过(guò)調整配置參數、優化(huà)代(dài)碼算法(fǎ)等手(shǒu)段(duàn)来(lái)提(tí)高(gāo)系(xì)統的(de)性(xìng)能(néng)和(hé)穩定(dìng)性(xìng)。

六、、總(zǒng)結

本(běn)文(wén)介紹了(le)在(zài)ROS 2中(zhōng)部(bù)署(shǔ)Jetson ORIn NX的(de)步驟,包(bāo)括安(ān)裝(zhuāng)ROS 2、配置Jetson ORIn NX、編写(xiě)ROS 2應(yìng)用(yòng)程序和(hé)調試優化(huà)等方(fāng)面(miàn)。通(tòng)过(guò)按照这(zhè)些(xiē)步驟進(jìn)行操作(zuò),可(kě)以成(chéng)功地(dì)将Jetson ORIn NX與(yǔ)ROS 2集成(chéng)在(zài)一(yī)起(qǐ),並(bìng)为其(qí)提(tí)供先(xiān)進(jìn)的(de)感(gǎn)知、導航和(hé)控制功能(néng)。需要(yào)注意(yì)的(de)是(shì),在(zài)部(bù)署(shǔ)过(guò)程中(zhōng)需要(yào)仔细(xì)檢查每个(gè)步驟的(de)正(zhèng)确性(xìng),並(bìng)根(gēn)據(jù)實(shí)際應(yìng)用(yòng)需求進(jìn)行相應(yìng)的(de)調整和(hé)優化(huà)。

图(tú)片