ubuntu20.04 d455相机标定
时间: 2025-05-03 19:44:52 浏览: 17
### Ubuntu 20.04 上 D455 相机标定教程
在 Ubuntu 20.04 中进行 Intel RealSense D455 相机的标定时,可以遵循以下方法完成操作。Intel 提供了官方支持库 `librealsense` 来帮助开发者实现这一目标。
#### 安装依赖项
首先需要确保系统已安装必要的开发工具和依赖包:
```bash
sudo apt update && sudo apt upgrade -y
sudo apt install build-essential git cmake libusb-1.0-0-dev pkg-config libgtk-3-dev \
libglfw3-dev libgl1-mesa-dev libegl1-mesa-dev python3-pip python3-numpy -y
```
#### 下载并编译 librealsense 库
下载最新的 `librealsense` 源码,并按照说明进行构建:
```bash
git clone https://github.com/IntelRealSense/librealsense.git
cd librealsense
mkdir build && cd build
cmake ../ -DBUILD_EXAMPLES=true -DBUILD_WITH_CUDA=false
make -j$(nproc)
sudo make install
```
上述命令会启用示例程序的支持[^1]。
#### 配置 udev 规则
为了使非 root 用户能够访问设备,需加载相应的udev规则:
```bash
sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && udevadm trigger
```
#### 进行相机标定
对于 D455 的标定过程,推荐使用 OpenCV 或者 ROS(Robot Operating System)。以下是两种常见方式:
##### 方法一:基于 OpenCV 的标定流程
OpenCV 是一种强大的计算机视觉库,提供了内置函数用于摄像头内外参计算。具体步骤如下:
1. **准备棋盘格图案图像**
打印标准尺寸的黑白相间棋盘纸板作为校准模板。
2. **采集多角度图片序列**
利用 Python 调用 Realsense SDK 获取 RGB 流数据保存成一组静态帧文件夹下。
```python
import pyrealsense2 as rs
import cv2
import numpy as np
pipeline = rs.pipeline()
config = rs.config()
# Configure depth and color streams...
config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)
pipeline.start(config)
try:
i = 0
while True:
frames = pipeline.wait_for_frames()
color_frame = frames.get_color_frame()
if not color_frame:
continue
image_np = np.asanyarray(color_frame.get_data())
cv2.imshow('Color Stream', image_np)
key = cv2.waitKey(1) & 0xFF
if key == ord('s'): # Press 's' to save frame.
filename = f'image_{i}.png'
cv2.imwrite(filename, image_np)
print(f'Saved {filename}')
i += 1
except KeyboardInterrupt:
pass
finally:
pipeline.stop()
cv2.destroyAllWindows()
```
3. **执行内参数估计脚本**
调用 opencv-contrib-python 包含的功能来处理这些照片集得到最终结果矩阵形式表示。
```python
import glob
from matplotlib import pyplot as plt
import cv2.aruco as aruco
import cv2
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
objp = np.zeros((7*9,3), np.float32)
objp[:,:2] = np.mgrid[0:9,0:7].T.reshape(-1,2)*25
axis = np.float32([[3,0,0], [0,3,0], [0,0,-3]]).reshape(-1,3)
images = glob.glob('./calibration_images/*.jpg')
for fname in images:
img = cv2.imread(fname)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,corners=cv2.findChessboardCorners(gray,(9,7),None)
if ret==True:
objpoints.append(objp)
corners2 = cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),criteria)
imgpoints.append(corners2)
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints,gray.shape[::-1], None,None)
np.savez_compressed("camera_params.npz",mtx=mtx,dist=dist,rvecs=rvecs,tvecs=tvecs)
print(mtx,dist)
```
##### 方法二:借助 ROS 实现自动化标定服务节点
如果项目涉及机器人领域应用,则可考虑集成 ROS 平台下的 realsense2_camera 插件组件简化工作量。详情查阅文档链接地址[^2].
---
阅读全文
相关推荐

















