记录在 Jetson Orin Nano Super 开发板的机器人组件环境配置测试、学习资料。
开源项目资料
刷机 官方板使用的是 SD card。
命令如下:
1 2 3 4 cd jp62-orin-nano-sd-card-image/ dmesg | tail | awk '$3 == "sd" {print}' sudo /bin/dd if =sd-blob.img of=/dev/sdc bs=1M status=progress
安装 jtop 1 2 3 4 sudo apt-get install python3-pip -ysudo pip3 install -U jetson-statssudo systemctl restart jtop.service jtop
目标识别组件 参考: YOLO环境搭建
遇到网络问题就在主机上下载好传到设备上手动下载。Github无法链接就下载zip包。
注意 torch 一定要支持 cuda
注意安装 GStreamer 和重新安装 OpenCV 需要的时间较久,可以提前下载好 opencv 4.10 的包
测试 yolo11 参考:Yolo CLI使用
1 2 3 4 5 cd ~/software/ultralytics/ultralytics/ yolo predict model=yolo11n source ='/home/sjl/software/ultralytics/ultralytics/assets' yolo predict model=yolo11n.pt source =0 save=False show
使用 tensorRT 加速 安装 onnxslim:
1 sudo pip3 install onnxslim -i https://mirrors.aliyun.com/pypi/simple/
代码:
可以保存 tensorrt 模型,使用 int8 量化 修改了相机输入的格式,以满足 30 fps 画面可以缩放 左上角显示帧数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 import cv2import timeimport osfrom ultralytics import YOLO onnx_model_path = "/home/sjl/software/ultralytics/ultralytics/yolo11n.pt" engine_model_path = "yolo11n.engine" output_path = "/home/sjl/software/ultralytics/ultralytics/output/01.detection_camera_usb.mp4" if os.path.exists(engine_model_path): print ("Loading existing TensorRT engine..." ) model = YOLO(engine_model_path)else : print ("Exporting TensorRT engine from ONNX..." ) initial_model = YOLO(onnx_model_path) initial_model.export(format ="engine" , int8=True ) model = YOLO(engine_model_path) cap = cv2.VideoCapture(0 ) cap.set (cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc(*"MJPG" )) cap.set (cv2.CAP_PROP_FRAME_WIDTH, 640 ) cap.set (cv2.CAP_PROP_FRAME_HEIGHT, 480 ) cap.set (cv2.CAP_PROP_FPS, 30 ) frame_width = int (cap.get(cv2.CAP_PROP_FRAME_WIDTH)) frame_height = int (cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) fps = cap.get(cv2.CAP_PROP_FPS)if fps == 0 : fps = 30 fourcc = cv2.VideoWriter_fourcc(*'mp4v' )print ("frame_width = {}, frame_height = {}" .format (frame_width, frame_height)) out = cv2.VideoWriter(output_path, fourcc, fps, (640 , 480 )) cv2.namedWindow("YOLO Inference" , cv2.WINDOW_NORMAL) prev_time = time.time()while cap.isOpened(): success, frame = cap.read() if not success: break results = model(frame) annotated_frame = results[0 ].plot() current_time = time.time() fps_display = 1 / (current_time - prev_time) prev_time = current_time fps_text = f"FPS: {fps_display:.2 f} " cv2.putText(annotated_frame, fps_text, (10 , 30 ), cv2.FONT_HERSHEY_SIMPLEX, 1 , (0 , 255 , 0 ), 2 ) out.write(annotated_frame) cv2.imshow("YOLO Inference" , annotated_frame) if cv2.waitKey(1 ) & 0xFF == ord ("q" ): break cap.release() out.release() cv2.destroyAllWindows()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 sjl@sjl-desktop:~$ v4l2-ctl --list-formats-ext -d /dev/video0 ioctl: VIDIOC_ENUM_FMT Type: Video Capture [0]: 'MJPG' (Motion-JPEG, compressed) Size: Discrete 1920x1080 Interval: Discrete 0.033s (30.000 fps) Size: Discrete 1280x720 Interval: Discrete 0.033s (30.000 fps) Size: Discrete 640x480 Interval: Discrete 0.033s (30.000 fps) [1]: 'YUYV' (YUYV 4:2:2) Size: Discrete 1920x1080 Interval: Discrete 0.200s (5.000 fps) Size: Discrete 1280x720 Interval: Discrete 0.100s (10.000 fps) Size: Discrete 640x480 Interval: Discrete 0.033s (30.000 fps)sudo python3 test_usb_camera_opt.py
ROS2
参考:ROS 2 安装指南
注意这一步:
1 2 sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o \ /usr/share/keyrings/ros-archive-keyring.gpg
如果网络不好,就下载 ros.key 传进设备。然后
1 sudo mv ros.key /usr/share/keyrings/ros-archive-keyring.gpg
上面安装 GStreamer 和重新安装 OpenCV 会卸载ros2的一些组件,因此后安装ros2
参考:小鱼的一键安装系列
注意是在 bash 下运行:
1 wget http://fishros.com/install -O fishros && . fishros
可以在安装 ROS2 的时候让它自动帮我们选择速度最快的源。然后安装 Humble(Ubuntu 22.04)。安装完成后:
1 2 3 source /opt/ros/humble/setup.bashwhich ros2
ros2 bookcode:
拓展资料:
Gazebo Gazebo是一个机器人仿真环境。因为 gazebo 官方源没有包含 arm64 版本,所以需要手动添加源并安装:
1 2 3 4 5 sudo add-apt-repository ppa:openrobotics/gazebo11-non-amd64sudo apt install gazebosudo apt install ros-humble-gazebo-* gazebo
Moveit2 MoveIt2 是基于 ROS2 的机器人操作平台,其集成了运动规划,操作,3D感知,运动学,控制和导航方面的最新技术与一体。
环境配置参考:
源教程有一些适配的错误,以下是在 Jetson Orin Nano Super 上验证步骤。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 git clone -b humble git@github.com:moveit/moveit2.git ~/moveit2_ws/src/moveit2cd ~/moveit2_ws rosdepc update rosdepc install --from-path src --ignore-src -r -ysudo fallocate -l 16G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile free -h colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release jtop
测试demo
1 2 3 cd moveit2_ws/source install/setup.zsh ros2 launch moveit_resources_panda_moveit_config demo.launch.py
测试 dummy2 1 2 3 4 5 6 git clone https://gitee.com/switchpi/dummy2.gitcd dummy2/ros2/dummy2_wssudo apt-get install ros-humble-ros2-controllers ros-humble-warehouse-ros ros-humble-moveit-ros-warehouse
这里有个包安装不了,参考:
主要的问题是,ros-humble-warehouse-ros-mongo 未在 jammy ubuntu 22.04 humble 上发行。为了编译通过,先将相关的库安装上。注意实测运行时,mongoDB 仍然不可用,因为缺少依赖。
1 colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release
这里有个库 dummy2_hw
依赖其他库,为了编译顺利通过,可以把 src/dummy2_hw
先移动到其他目录,将其余的 package 编译并安装,然后再复原 dummy2_hw
,重新编译:
1 2 3 4 5 6 mv src/dummy2_hw .. colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release . install/setup.zshmv ../dummy2_hw src/ colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release
测试:
1 2 3 4 5 ros2 launch dummy2-gripperv2_description display.launch.py ros2 launch dummy2-gripperv2_moveit_config demo.launch.py
深度相机
1 2 3 4 cd scriptsudo chmod +x install_udev_rules.shsudo ./install_udev_rules.shsudo udevadm control --reload-rules && sudo udevadm trigger
1 2 3 ros2 launch orbbec_camera gemini_330_series.launch.py rviz2
添加 topic:
显示深度:
附 mac 安装 ros2 jazzy 安装虚拟机 购买 UTM 软件,参考 MAC M2安装ubuntu虚拟机 .
注意:
安装完系统后,在 UTM 虚拟机 CD/DVD 中弹出 iso。
安装 desktop 会设置 snapd,一个非常垃圾的软件包,如果hang住多重启几次。
虚拟机扩容参考:MAC-VM虚拟机Ubuntu硬盘容量扩充
如果df查看没有成功扩容,参考如下方法
从你提供的信息来看,/dev/mapper/ubuntu--vg-ubuntu--lv
是一个逻辑卷(LV),而你提到的分区 /dev/vda3
有 54.9GB 的 Linux 文件系统,应该有足够的空间来扩展 ubuntu--vg-ubuntu--lv
。
然而,虽然物理磁盘有空间,但逻辑卷没有自动扩展,可能是因为你还没有在逻辑卷上执行扩展操作。具体来说,需要完成以下几个步骤:
扩展物理卷(PV): 首先,确保物理卷已经扩展到 /dev/vda3
中的新空间。如果没有扩展,可以使用以下命令来扩展物理卷: 扩展卷组(VG): 确保卷组 ubuntu-vg
已经包含了新的空间。你可以通过以下命令检查卷组的大小: 1 sudo vgdisplay ubuntu-vg
如果卷组已经包含新的空间,你就可以直接扩展逻辑卷了。
扩展逻辑卷(LV): 接下来,使用 lvextend
扩展逻辑卷 ubuntu--lv
: 1 sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
这将把所有可用的空间分配给该逻辑卷。如果你只想使用部分空间,可以调整 +100%FREE
为适当的大小。
扩展文件系统: 扩展逻辑卷之后,需要扩展文件系统才能使用新的空间。对于 ext4
文件系统,你可以使用: 1 sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
对于 xfs
文件系统,使用:
1 sudo xfs_growfs /dev/ubuntu-vg/ubuntu-lv
总结:
扩展物理卷(pvresize
)。 扩展卷组(vgextend
)。 扩展逻辑卷(lvextend
)。 扩展文件系统(resize2fs
或 xfs_growfs
)。 完成这些步骤后,应该就能看到你在 df -h
命令输出中获得的更多可用空间了。
安装 ros2 参考 fishros
安装 gazebo 这里我们从源码编译安装,因为 arm64 的二进制安装只支持到 ubuntu 22.04。参考
安装完成后,运行
安装 moveit2 参考官方最新版本:Create A Colcon Workspace and Download Tutorials
注意,编译时会报错这样的问题:aarch64 is not supported 解决办法如下,因为它官方不支持x86-64,我们进入这个仓库下,将 cmake 的检查注释掉,并且导入arch64版本的库:https://artifactory.kinovaapps.com:443/artifactory/generic-public/kortex/API/2.6.0/linux_aarch64_gcc_7.4.zip。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 @@ -1,13 +1,15 @@ cmake_minimum_required(VERSION 3.14) include(FetchContent) #include(ExternalProject)-FetchContent_Declare( - kinova_binary_api - URL https://artifactory.kinovaapps.com:443/artifactory/generic-public/kortex/API/2.5.0/linux_x86-64_x86_gcc.zip - URL_HASH MD5=64bd86e7ab8bda90ef1fc7d6a356e080 -) +# FetchContent_Declare( +# kinova_binary_api +# URL https://artifactory.kinovaapps.com:443/artifactory/generic-public/kortex/API/2.5.0/linux_x86-64_x86_gcc.zip +# URL_HASH MD5=64bd86e7ab8bda90ef1fc7d6a356e080 +# ) -FetchContent_MakeAvailable(kinova_binary_api) +# FetchContent_MakeAvailable(kinova_binary_api) + +set(KINOVA_BINARY_API_DIR "/home/sjl/workspace/src/ros2_kortex/linux_aarch64") project(kortex_api) @@ -19,12 +21,12 @@ project(kortex_api) # string(TOLOWER ${CMAKE_SYSTEM_NAME} URL_OS) # Linux -> linux #Current: only support Linux x86_64-if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") - set(API_URL https://artifactory.kinovaapps.com:443/artifactory/generic-public/kortex/API/2.5.0/linux_x86-64_x86_gcc.zip) -else() - set(API_URL "") - message(FATAL_ERROR "Unsupported System: currently support is for Linux x68_64. Detected ${CMAKE_SYSTEM_NAME} and ${CMAKE_SYSTEM_PROCESSOR}") -endif() +# if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") +# set(API_URL https://artifactory.kinovaapps.com:443/artifactory/generic-public/kortex/API/2.5.0/linux_x86-64_x86_gcc.zip) +# else() +# set(API_URL "") +# message(FATAL_ERROR "Unsupported System: currently support is for Linux x68_64. Detected ${CMAKE_SYSTEM_NAME} and ${CMAKE_SYSTEM_PROCESSOR}") +# endif() #ExternalProject_Add(kinova_binary_api # URL ${API_URL}@@ -37,10 +39,10 @@ find_package(ament_cmake REQUIRED) ament_export_include_directories(include/kortex_api) -install(DIRECTORY ${kinova_binary_api_SOURCE_DIR}/include/client/ DESTINATION include/kortex_api) -install(DIRECTORY ${kinova_binary_api_SOURCE_DIR}/include/common/ DESTINATION include/kortex_api) -install(DIRECTORY ${kinova_binary_api_SOURCE_DIR}/include/messages/ DESTINATION include/kortex_api) -install(DIRECTORY ${kinova_binary_api_SOURCE_DIR}/include/client_stubs/ DESTINATION include/kortex_api) -install(DIRECTORY ${kinova_binary_api_SOURCE_DIR}/include/google/protobuf DESTINATION include/kortex_api/google) +install(DIRECTORY ${KINOVA_BINARY_API_DIR}/include/client/ DESTINATION include/kortex_api) +install(DIRECTORY ${KINOVA_BINARY_API_DIR}/include/common/ DESTINATION include/kortex_api) +install(DIRECTORY ${KINOVA_BINARY_API_DIR}/include/messages/ DESTINATION include/kortex_api) +install(DIRECTORY ${KINOVA_BINARY_API_DIR}/include/client_stubs/ DESTINATION include/kortex_api) +install(DIRECTORY ${KINOVA_BINARY_API_DIR}/include/google/protobuf DESTINATION include/kortex_api/google) ament_package()@@ -1,11 +1,13 @@ cmake_minimum_required(VERSION 3.14) include(FetchContent)-FetchContent_Declare( - kinova_binary_api - URL https://artifactory.kinovaapps.com:443/artifactory/generic-public/kortex/API/2.5.0/linux_x86-64_x86_gcc.zip - URL_HASH MD5=64bd86e7ab8bda90ef1fc7d6a356e080 -) -FetchContent_MakeAvailable(kinova_binary_api) +# FetchContent_Declare( +# kinova_binary_api +# URL https://artifactory.kinovaapps.com:443/artifactory/generic-public/kortex/API/2.5.0/linux_x86-64_x86_gcc.zip +# URL_HASH MD5=64bd86e7ab8bda90ef1fc7d6a356e080 +# ) +# FetchContent_MakeAvailable(kinova_binary_api) + +set(KINOVA_BINARY_API_DIR "/home/sjl/workspace/src/ros2_kortex/linux_aarch64") project(kortex_driver) @@ -29,20 +31,20 @@ find_package(rclcpp REQUIRED) find_package(kortex_api REQUIRED) #Current: only support Linux x86_64-if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") - set(API_URL https://artifactory.kinovaapps.com:443/artifactory/generic-public/kortex/API/2.5.0/linux_x86-64_x86_gcc.zip) -else() - # TODO(future) to support ARM or other builds logic could go here to fetch the precompiled libKortexApiCpp.a - # see notes in kortex_api CMakeList.txt - message(WARNING "Detected ${CMAKE_SYSTEM_NAME} and ${CMAKE_SYSTEM_PROCESSOR}") - message(FATAL_ERROR "Unsupported System: currently support is for Linux x68_64.") -endif() +# if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") +# set(API_URL https://artifactory.kinovaapps.com:443/artifactory/generic-public/kortex/API/2.5.0/linux_x86-64_x86_gcc.zip) +# else() +# # TODO(future) to support ARM or other builds logic could go here to fetch the precompiled libKortexApiCpp.a +# # see notes in kortex_api CMakeList.txt +# message(WARNING "Detected ${CMAKE_SYSTEM_NAME} and ${CMAKE_SYSTEM_PROCESSOR}") +# message(FATAL_ERROR "Unsupported System: currently support is for Linux x68_64.") +# endif() # CMake does not allow IMPORTED libraries to be installed # The package kortex_api will download and setup the include directories add_library(KortexApiCpp STATIC IMPORTED) set_target_properties(KortexApiCpp PROPERTIES- IMPORTED_LOCATION ${kinova_binary_api_SOURCE_DIR}/lib/release/libKortexApiCpp.a + IMPORTED_LOCATION ${KINOVA_BINARY_API_DIR}/lib/release/libKortexApiCpp.a INTERFACE_LINK_LIBRARIES KortexApiCpp ) target_link_libraries(KortexApiCpp INTERFACE pthread)
编译成功后,运行:
1 ros2 launch moveit2_tutorials demo.launch.py
Mac 虚拟机运行 moveit 超级卡,需要更多的核心,更大的内存。
WSL ubuntu24.04 安装 ros2 jazzy 大体流程和上述 mac 安装相同,在使用升读相机时,需要注意在 powershell 中将相机 bind 到 wsl2 上。
WSL ubuntu22.04 安装 ros2 humble 测试 dummy2:
不要直接 rosdep 安装依赖,主要缺以下依赖:
1 2 3 sudo apt-get install ros-humble-ros2-controllers ros-humble-warehouse-ros ros-humble-moveit-ros-warehouse ros2 launch dummy2-gripperv2_moveit_config demo.launch.py