在Ubuntu 18.04上搞定奥比中光Astra乐视LeTMC-520的ROS驱动从编译到获取RGBD图像的全流程避坑第一次接触奥比中光Astra相机也就是乐视LeTMC-520的ROS驱动时我花了整整三天时间才搞定所有问题。从驱动编译失败到OpenCV版本冲突再到最后的RGBD图像获取每一步都踩了坑。这篇文章就是我的完整排坑记录希望能帮你省下这些时间。1. 环境准备Ubuntu 18.04与ROS Melodic在开始之前确保你的系统是Ubuntu 18.04。这个版本与ROS Melodic是官方推荐的组合其他版本可能会遇到各种兼容性问题。1.1 系统基础配置首先更新系统并安装必要工具sudo apt update sudo apt upgrade -y sudo apt install -y build-essential cmake git接下来是关键的换源操作。国内用户建议使用清华或阿里云的镜像源sudo sed -i s/archive.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list提示换源后记得执行sudo apt update刷新软件列表1.2 ROS Melodic安装ROS的安装有几个关键点需要注意设置正确的软件源sudo sh -c echo deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main /etc/apt/sources.list.d/ros-latest.list sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654安装完整版ROS包含所有工具sudo apt update sudo apt install ros-melodic-desktop-full初始化rosdep时可能会卡住这是正常现象sudo rosdep init rosdep update2. 驱动编译那些你可能遇到的坑奥比中光Astra的ROS驱动主要有两个版本官方驱动和社区维护版本。我推荐使用社区版本因为它更新更活跃。2.1 准备工作区首先创建工作空间mkdir -p ~/astra_ws/src cd ~/astra_ws/src catkin_init_workspace然后克隆驱动仓库git clone https://github.com/orbbec/ros_astra_camera.git git clone https://github.com/orbbec/ros_astra_launch.git2.2 编译时的常见错误第一次编译时我遇到了三个主要问题OpenCV版本冲突error: CV_BGR2GRAY was not declared in this scope解决方法是指定正确的OpenCV版本。修改CMakeLists.txtfind_package(OpenCV 3 REQUIRED)依赖缺失Could not find a package configuration file provided by astra_camera安装缺失的依赖sudo apt install ros-melodic-camera-info-manager ros-melodic-image-transportUSB权限问题[ERROR] [1560123456.789012]: Failed to open device: Permission denied创建udev规则echo SUBSYSTEMusb, ATTR{idVendor}2bc5, MODE0666 | sudo tee /etc/udev/rules.d/99-astra.rules sudo udevadm control --reload-rules3. 相机配置与校准驱动编译成功后还需要进行一些配置才能获得最佳效果。3.1 启动相机节点使用以下命令启动相机roslaunch astra_launch astra.launch如果一切正常你应该能看到类似下面的输出[ INFO] [1560123456.789012]: Initializing nodelet with 4 worker threads. [ INFO] [1560123456.789123]: RealSense Node Is Up!3.2 图像话题验证检查发布的图像话题rostopic list | grep camera应该能看到类似输出/camera/depth/image_raw /camera/rgb/image_raw /camera/ir/image_raw3.3 深度图像校准深度图像有时会出现偏移可以通过以下命令校准rosrun astra_camera astra_camera_calibration校准过程大约需要5分钟按照屏幕提示操作即可。4. 获取和处理RGBD图像现在到了最激动人心的部分——获取并处理RGBD图像。4.1 使用RViz查看图像启动RViz查看实时图像rosrun rviz rviz在RViz中添加以下显示点击Add按钮选择Image类型在Image Topic中选择/camera/rgb/image_raw重复上述步骤添加/camera/depth/image_raw4.2 使用Python处理图像数据下面是一个简单的Python脚本用于订阅并处理RGB和深度图像#!/usr/bin/env python import rospy from sensor_msgs.msg import Image from cv_bridge import CvBridge import cv2 bridge CvBridge() def rgb_callback(msg): cv_image bridge.imgmsg_to_cv2(msg, bgr8) cv2.imshow(RGB Image, cv_image) cv2.waitKey(1) def depth_callback(msg): cv_image bridge.imgmsg_to_cv2(msg, 32FC1) cv2.imshow(Depth Image, cv_image) cv2.waitKey(1) rospy.init_node(image_listener) rospy.Subscriber(/camera/rgb/image_raw, Image, rgb_callback) rospy.Subscriber(/camera/depth/image_raw, Image, depth_callback) rospy.spin()4.3 常见图像问题解决在使用过程中可能会遇到以下问题图像卡顿或延迟降低分辨率修改astra.launch文件中的depth_width和depth_height参数关闭不需要的流如不需要IR图像可以关闭IR发布深度图像噪声大rosrun dynamic_reconfigure dynparam set /camera/driver depth_registration TrueRGB和深度图像不同步rosrun rqt_reconfigure rqt_reconfigure在界面中调整depth_optical_frame和rgb_optical_frame的时间偏移参数5. 性能优化与高级配置要让Astra相机发挥最佳性能还需要一些额外配置。5.1 USB带宽管理Astra相机对USB带宽要求较高建议使用USB 3.0接口蓝色接口避免使用USB集线器独占USB控制器sudo apt install usbtop sudo usbtop5.2 内核参数调整对于高性能应用可以调整内核参数echo vm.swappiness10 | sudo tee -a /etc/sysctl.conf echo vm.dirty_ratio10 | sudo tee -a /etc/sysctl.conf echo vm.dirty_background_ratio5 | sudo tee -a /etc/sysctl.conf sudo sysctl -p5.3 多相机配置如果需要使用多个Astra相机需要为每个相机指定唯一序列号roslaunch astra_launch astra.launch camera:astra1 serial_number:ABC123 roslaunch astra_launch astra.launch camera:astra2 serial_number:DEF4566. 实际应用案例最后分享一个实际项目中的应用案例——使用Astra相机进行简单的物体检测。6.1 安装必要的ROS包sudo apt install ros-melodic-opencv3 ros-melodic-cv-bridge6.2 物体检测示例代码#!/usr/bin/env python import rospy import cv2 import numpy as np from sensor_msgs.msg import Image from cv_bridge import CvBridge bridge CvBridge() def detect_objects(cv_image): # 转换为HSV颜色空间 hsv cv2.cvtColor(cv_image, cv2.COLOR_BGR2HSV) # 定义红色物体的HSV范围 lower_red np.array([0,120,70]) upper_red np.array([10,255,255]) # 创建掩膜 mask cv2.inRange(hsv, lower_red, upper_red) # 查找轮廓 contours, _ cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) # 绘制检测结果 for cnt in contours: area cv2.contourArea(cnt) if area 1000: cv2.drawContours(cv_image, [cnt], -1, (0,255,0), 3) return cv_image def image_callback(msg): try: cv_image bridge.imgmsg_to_cv2(msg, bgr8) processed_image detect_objects(cv_image) cv2.imshow(Object Detection, processed_image) cv2.waitKey(1) except Exception as e: print(e) rospy.init_node(object_detector) rospy.Subscriber(/camera/rgb/image_raw, Image, image_callback) rospy.spin()6.3 结合深度信息要获取检测物体的深度信息可以订阅深度话题并同步处理from message_filters import ApproximateTimeSynchronizer, Subscriber def sync_callback(rgb_msg, depth_msg): rgb_image bridge.imgmsg_to_cv2(rgb_msg, bgr8) depth_image bridge.imgmsg_to_cv2(depth_msg, 32FC1) # 在这里添加你的处理逻辑 # ... rgb_sub Subscriber(/camera/rgb/image_raw, Image) depth_sub Subscriber(/camera/depth/image_raw, Image) ts ApproximateTimeSynchronizer([rgb_sub, depth_sub], queue_size10, slop0.1) ts.registerCallback(sync_callback)在实际项目中我发现Astra相机在室内环境下表现相当稳定但在强光直射时深度数据会有明显噪点。解决方法是调整相机角度或增加遮光罩。
在Ubuntu 18.04上搞定奥比中光Astra(乐视LeTMC-520)的ROS驱动:从编译到获取RGBD图像的全流程避坑
在Ubuntu 18.04上搞定奥比中光Astra乐视LeTMC-520的ROS驱动从编译到获取RGBD图像的全流程避坑第一次接触奥比中光Astra相机也就是乐视LeTMC-520的ROS驱动时我花了整整三天时间才搞定所有问题。从驱动编译失败到OpenCV版本冲突再到最后的RGBD图像获取每一步都踩了坑。这篇文章就是我的完整排坑记录希望能帮你省下这些时间。1. 环境准备Ubuntu 18.04与ROS Melodic在开始之前确保你的系统是Ubuntu 18.04。这个版本与ROS Melodic是官方推荐的组合其他版本可能会遇到各种兼容性问题。1.1 系统基础配置首先更新系统并安装必要工具sudo apt update sudo apt upgrade -y sudo apt install -y build-essential cmake git接下来是关键的换源操作。国内用户建议使用清华或阿里云的镜像源sudo sed -i s/archive.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list提示换源后记得执行sudo apt update刷新软件列表1.2 ROS Melodic安装ROS的安装有几个关键点需要注意设置正确的软件源sudo sh -c echo deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main /etc/apt/sources.list.d/ros-latest.list sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654安装完整版ROS包含所有工具sudo apt update sudo apt install ros-melodic-desktop-full初始化rosdep时可能会卡住这是正常现象sudo rosdep init rosdep update2. 驱动编译那些你可能遇到的坑奥比中光Astra的ROS驱动主要有两个版本官方驱动和社区维护版本。我推荐使用社区版本因为它更新更活跃。2.1 准备工作区首先创建工作空间mkdir -p ~/astra_ws/src cd ~/astra_ws/src catkin_init_workspace然后克隆驱动仓库git clone https://github.com/orbbec/ros_astra_camera.git git clone https://github.com/orbbec/ros_astra_launch.git2.2 编译时的常见错误第一次编译时我遇到了三个主要问题OpenCV版本冲突error: CV_BGR2GRAY was not declared in this scope解决方法是指定正确的OpenCV版本。修改CMakeLists.txtfind_package(OpenCV 3 REQUIRED)依赖缺失Could not find a package configuration file provided by astra_camera安装缺失的依赖sudo apt install ros-melodic-camera-info-manager ros-melodic-image-transportUSB权限问题[ERROR] [1560123456.789012]: Failed to open device: Permission denied创建udev规则echo SUBSYSTEMusb, ATTR{idVendor}2bc5, MODE0666 | sudo tee /etc/udev/rules.d/99-astra.rules sudo udevadm control --reload-rules3. 相机配置与校准驱动编译成功后还需要进行一些配置才能获得最佳效果。3.1 启动相机节点使用以下命令启动相机roslaunch astra_launch astra.launch如果一切正常你应该能看到类似下面的输出[ INFO] [1560123456.789012]: Initializing nodelet with 4 worker threads. [ INFO] [1560123456.789123]: RealSense Node Is Up!3.2 图像话题验证检查发布的图像话题rostopic list | grep camera应该能看到类似输出/camera/depth/image_raw /camera/rgb/image_raw /camera/ir/image_raw3.3 深度图像校准深度图像有时会出现偏移可以通过以下命令校准rosrun astra_camera astra_camera_calibration校准过程大约需要5分钟按照屏幕提示操作即可。4. 获取和处理RGBD图像现在到了最激动人心的部分——获取并处理RGBD图像。4.1 使用RViz查看图像启动RViz查看实时图像rosrun rviz rviz在RViz中添加以下显示点击Add按钮选择Image类型在Image Topic中选择/camera/rgb/image_raw重复上述步骤添加/camera/depth/image_raw4.2 使用Python处理图像数据下面是一个简单的Python脚本用于订阅并处理RGB和深度图像#!/usr/bin/env python import rospy from sensor_msgs.msg import Image from cv_bridge import CvBridge import cv2 bridge CvBridge() def rgb_callback(msg): cv_image bridge.imgmsg_to_cv2(msg, bgr8) cv2.imshow(RGB Image, cv_image) cv2.waitKey(1) def depth_callback(msg): cv_image bridge.imgmsg_to_cv2(msg, 32FC1) cv2.imshow(Depth Image, cv_image) cv2.waitKey(1) rospy.init_node(image_listener) rospy.Subscriber(/camera/rgb/image_raw, Image, rgb_callback) rospy.Subscriber(/camera/depth/image_raw, Image, depth_callback) rospy.spin()4.3 常见图像问题解决在使用过程中可能会遇到以下问题图像卡顿或延迟降低分辨率修改astra.launch文件中的depth_width和depth_height参数关闭不需要的流如不需要IR图像可以关闭IR发布深度图像噪声大rosrun dynamic_reconfigure dynparam set /camera/driver depth_registration TrueRGB和深度图像不同步rosrun rqt_reconfigure rqt_reconfigure在界面中调整depth_optical_frame和rgb_optical_frame的时间偏移参数5. 性能优化与高级配置要让Astra相机发挥最佳性能还需要一些额外配置。5.1 USB带宽管理Astra相机对USB带宽要求较高建议使用USB 3.0接口蓝色接口避免使用USB集线器独占USB控制器sudo apt install usbtop sudo usbtop5.2 内核参数调整对于高性能应用可以调整内核参数echo vm.swappiness10 | sudo tee -a /etc/sysctl.conf echo vm.dirty_ratio10 | sudo tee -a /etc/sysctl.conf echo vm.dirty_background_ratio5 | sudo tee -a /etc/sysctl.conf sudo sysctl -p5.3 多相机配置如果需要使用多个Astra相机需要为每个相机指定唯一序列号roslaunch astra_launch astra.launch camera:astra1 serial_number:ABC123 roslaunch astra_launch astra.launch camera:astra2 serial_number:DEF4566. 实际应用案例最后分享一个实际项目中的应用案例——使用Astra相机进行简单的物体检测。6.1 安装必要的ROS包sudo apt install ros-melodic-opencv3 ros-melodic-cv-bridge6.2 物体检测示例代码#!/usr/bin/env python import rospy import cv2 import numpy as np from sensor_msgs.msg import Image from cv_bridge import CvBridge bridge CvBridge() def detect_objects(cv_image): # 转换为HSV颜色空间 hsv cv2.cvtColor(cv_image, cv2.COLOR_BGR2HSV) # 定义红色物体的HSV范围 lower_red np.array([0,120,70]) upper_red np.array([10,255,255]) # 创建掩膜 mask cv2.inRange(hsv, lower_red, upper_red) # 查找轮廓 contours, _ cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) # 绘制检测结果 for cnt in contours: area cv2.contourArea(cnt) if area 1000: cv2.drawContours(cv_image, [cnt], -1, (0,255,0), 3) return cv_image def image_callback(msg): try: cv_image bridge.imgmsg_to_cv2(msg, bgr8) processed_image detect_objects(cv_image) cv2.imshow(Object Detection, processed_image) cv2.waitKey(1) except Exception as e: print(e) rospy.init_node(object_detector) rospy.Subscriber(/camera/rgb/image_raw, Image, image_callback) rospy.spin()6.3 结合深度信息要获取检测物体的深度信息可以订阅深度话题并同步处理from message_filters import ApproximateTimeSynchronizer, Subscriber def sync_callback(rgb_msg, depth_msg): rgb_image bridge.imgmsg_to_cv2(rgb_msg, bgr8) depth_image bridge.imgmsg_to_cv2(depth_msg, 32FC1) # 在这里添加你的处理逻辑 # ... rgb_sub Subscriber(/camera/rgb/image_raw, Image) depth_sub Subscriber(/camera/depth/image_raw, Image) ts ApproximateTimeSynchronizer([rgb_sub, depth_sub], queue_size10, slop0.1) ts.registerCallback(sync_callback)在实际项目中我发现Astra相机在室内环境下表现相当稳定但在强光直射时深度数据会有明显噪点。解决方法是调整相机角度或增加遮光罩。