Astra 3D相机 - Python SDK使用手册
1. Astra S 3D相机
Astra S 是目前性价比很高的消费级单目结构光3D相机,适合入门3D点云处理使用。大家可以在我们的淘宝店铺 阿凯爱玩机器人 购买。
Astra S 淘宝购买链接 : 奥比中光深度相机3D机器视觉结构光立体摄像头三维点云体感摄影头
如果需要精度更高的工业3D相机,可以选购店铺中的 RVC X Mini 双目结构光3D相机 。
本课程的配套源码,可以联系阿凯老师获取。
2. 修改相机配置文件
配套实验代码路径:
02.Astra-3D相机-Python SDK/astra-camera-python/
阿凯开发了基于Open3D的Astra 3D相机的SDK,对OpenNI2的Python SDK做了二次封装。
需要注意的是,因为Windows下,必须填写OpenNI2动态链接库的安装路径,因此需要做一下相关配置。
通过VSCode或者其他文本编辑器,编辑相机的配置文件。
将
openni2_dll_path
变量,修改为自己的dll安装路径。
需要注意的是在Windows下,路径中文件夹与文件夹之间,需要使用两个反斜杠
\\
config/camera.yaml
#############################
## 相机的默认参数
#############################
# OpenNI动态链接库的安装路径
# 如果是Windows, 需要修改为OpenNI的安装路径
# 如果是Linux, 将openni2_dll_path赋值为空字符串
# openni2_dll_path = ""
openni2_dll_path: "D:\\KyleSoftware\\OpenNI2\\libs"
# 画面宽度
img_width: 640
# 画面高度
img_height: 480
# 相机帧率
fps: 30
3. RGB图与深度图预览
注意:如果你使用的是Windows,需要把命令行里的
python3
改为
python
。
python3 astra.py
效果视频,见
video/AstraS读取RGB图与深度图的效果.webm
4. 相机标定
4.1 制作标定板
将源码文件根目录的
Radon相机标定板.svg
按照原尺寸,打印到A4纸上,并粘至硬板上。
4.2 采集标定板图像
python3 astra.py --img_path data/caliboard
按
S
键保存图像,采集20-30张图像。在采集前,请先将
data/caliboard
文件夹里面的图像删除。
4.3 修改标定板参数
修改
config/camera_calibration.yaml
为实际值。
#############################
## 相机标定的参数
#############################
caliboard : # 标定板
row : 9 # 行数
column : 14 # 列数
ceil_size : 12.0 # 格子的尺寸,单位mm
type: "radon" # 标定板类型
cali_img_source_path: 'data/caliboard' # 标定图像的存储路径
cali_info_save_path : 'config' # 相机标定信息存储路径
注:只需要修改
ceil_size
,将其修改为实际测量尺寸。
4.4 相机标定
执行相机标定脚本
python3 camera_calibration.py
输出日志
a-camera-python$ python3 camera_calibration.py 检测到28张标定图像 相机内参 intrinsic [[517.838 0. 331.957] [ 0. 517.841 230.248] [ 0. 0. 1. ]] 畸变参数 distortion [[ 0.038 -0.178 -0.001 -0.001 0.088]]
5. 3D点云预览
执行下面的脚本,查看Astra 3D相机拍摄的3D点云图像。
python3 test_pcd_visualizer.py
6. 示例源码
test_pcd_visualizer.py
'''
PCD点云动态可视化
从Realsense中读取RGB图像与深度图
并将其转换为pcd格式的文件.
----------------------------------------------
@作者: 阿凯爱玩机器人
@QQ: 244561792
@微信: xingshunkai
@邮箱: [email protected]
@B站: https://space.bilibili.com/40344504
'''
import numpy as np
import cv2
import open3d as o3d
import time
# 自定义库
from astra import Astra
from pcd_visualizer import PCDVisualizer
# 创建Realsense
# 创建相机对象
camera = Astra()
# 初始相机
camera.init_video_stream()
# 读取相机参数(相机内参)
camera.load_cam_calib_data()
# 创建可视化窗口
visualizer = PCDVisualizer()
visualizer.create_window()
# 读取
pcd = None
for i in range(20):
camera.read()
try:
while True:
# 获取彩图与深度图
color_image, depth_image = camera.read()
# print("Cap image")
# 转换为点云
pcd = camera.get_pcd(color_image, depth_image)
# print("Get Pcd")
# 更新可视化器里面的PCD
visualizer.update_pcd(pcd)
# 可视化器迭代
visualizer.step()
except Exception as e:
# 关闭窗口
visualizer.destroy_window()
# 释放相机
camera.release()