ubuntu22.04 ros2 d435i双目视觉测距
时间: 2025-06-01 19:50:54 浏览: 20
### ROS 2 Humble下配置Intel D435i双目摄像头进行测距
在Ubuntu 22.04上使用ROS 2 Humble配置Intel RealSense D435i双目摄像头并实现测距功能,主要涉及以下几个方面:
#### 1. 安装依赖项
为了使RealSense相机正常工作,需先安装必要的驱动程序和库文件。可以通过以下命令完成:
```bash
sudo apt update && sudo apt install -y ros-humble-realsense2-camera ros-humble-cv-bridge python3-opencv
```
此命令会安装`realsense2_camera`包以及OpenCV相关工具[^1]。
#### 2. 配置udev规则
为了让Linux系统识别USB设备(如D435i),需要设置udev规则。执行以下脚本即可完成配置:
```bash
cd ~/Downloads/
wget https://raw.githubusercontent.com/IntelRealSense/librealsense/master/tools/uvc_backend/rules.d/99-realsense-libusb.rules
sudo cp 99-realsense-libusb.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && sudo udevadm trigger
```
#### 3. 启动Realsense节点
通过启动`realsense2_camera`中的launch文件来初始化D435i传感器。创建一个新的`.launch.py`文件或者直接调用默认的launch文件:
```python
from launch import LaunchDescription
from launch.actions import IncludeLaunchDescription
from launch.launch_description_sources import PythonLaunchDescriptionSource
from ament_index_python.packages import get_package_share_directory
import os
def generate_launch_description():
realsense_dir = get_package_share_directory('realsense2_camera')
rs_launch_file = os.path.join(realsense_dir, 'launch', 'rs_launch.py')
return LaunchDescription([
IncludeLaunchDescription(
PythonLaunchDescriptionSource(rs_launch_file),
launch_arguments={
'camera_name': 'd435i',
'enable_depth': 'true'
}.items()
)
])
```
保存上述代码到名为`start_realsense.launch.py`的文件中,并通过以下命令运行它:
```bash
ros2 launch start_realsense.launch.py
```
#### 4. 实现距离测量
利用`cv_bridge`将图像数据转换成OpenCV格式以便进一步处理。下面是一个简单的Python脚本来展示如何获取深度图并计算目标点的距离:
```python
#!/usr/bin/env python3
import rclpy
from sensor_msgs.msg import Image
from cv_bridge import CvBridge
import numpy as np
import cv2
class DistanceCalculator(rclpy.Node):
def __init__(self):
super().__init__('distance_calculator_node')
self.bridge = CvBridge()
self.subscription = self.create_subscription(Image,'/camera/depth/image_rect_raw',self.listener_callback,10)
def listener_callback(self,msg):
try:
depth_image = self.bridge.imgmsg_to_cv2(msg,"passthrough")
except Exception as e:
print(e)
return
height,width=depth_image.shape[:2]
center_x=int(width/2)
center_y=int(height/2)
distance=np.nanmean(depth_image[center_y-10:center_y+10,center_x-10:center_x+10])
if not np.isnan(distance):
self.get_logger().info(f'Distance at the image center is {round(distance,2)} meters.')
def main(args=None):
rclpy.init(args=args)
node = DistanceCalculator()
rclpy.spin(node)
node.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
```
确保已加载正确的环境变量后再尝试运行以上脚本:
```bash
source /opt/ros/humble/setup.bash
chmod +x your_script_path/distance_calculator.py
ros2 run your_package_name distance_calculator.py
```
#### 注意事项
- 如果遇到任何错误,请确认所有软件包均已正确安装并且权限已被授予给当前用户组。
- 对于更复杂的场景分析可能还需要额外的数据预处理步骤或机器学习模型的支持[^2].
阅读全文
相关推荐














