Mid360 与海康Mv-cs016多传感器联合标定

0.环境配置

博主系统:ubuntu20

相机:海康MV-CS016

激光雷达:Mid-360

ROS1

Sophus安装
SLAM系列之Fast Livo复现(一)_哔哩哔哩_bilibili

文档预览 - Gitee.com

Ubuntu 安装 RealSense SDK 及 RealSense-ROS 驱动程序-CSDN博客

这里的Realsense不必安装,顺带一起装了

Realsense ROS1 驱动安装

进入realsense文件夹

cd ~/realsense_ws

运行依赖项

source devel/setup.bash 

执行realsense节点

roslaunch realsense2_camera rs_camera.launch

新建终端执行

rosrun rviz rviz

PCL库安装

【PCL】Ubuntu22.04 安装 PCL 库_ubuntu安装pcl-CSDN博客

eigen一般默认安装好了,查看eigen版本,一般头文件就显示版本

cd /usr/include/eigen3/Eigen/src/Core/util
gedit Macros.h

opencv 安装

这里我没有记录,直接问豆包和Kimi

PCL && Eigen && OpenCV
PCL>=1.6
Eigen>=3.3.4
OpenCV>=3.2

Sophus安装

git clone https://github.com/strasdat/Sophus.git
cd Sophus
git checkout a621ff
mkdir build && cd build && cmake ..
make
sudo make install

Vikit安装

我的电脑安装路径为 ~/catkin_fl

cd catkin_ws/src
git clone https://github.com/xuankuzcr/rpg_vikit.git

livox_ros_driver2安装

我的安装路径在:~/livo_driver/src/ws_livox

海康MVS客户端安装

下载链接:https://www.hikrobotics.com/cn/machinevision/service/download/?module=0

安装

sudo dpkg -i xxxx.deb

启动MVS客户端

cd /opt/MVS/bin #进入软件目录
sudo ./MVS.sh #运行客户端

在MVS客户端查看是否能正常识别。

1.相机标定

新建终端执行下列命令:

roslaunch mvs_ros_driver mvs_camera_trigger.launch

另起终端,执行以下代码,参数自己改一改

rosrun camera_calibration cameracalibrator.py --size 9x6 --square 0.85 image:=/left_camera/image

标定结果可视化

 

以下是标定结果:

**** Calibrating ****
mono pinhole calibration...
D = [-0.0825793412579484, 0.18889546268346563, -0.0002599860454348438, 0.0009403060803430131, 0.0]
K = [1790.2637974341574, 0.0, 742.4372092570699, 0.0, 1790.8901983778176, 556.7092892509689, 0.0, 0.0, 1.0]
R = [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]
P = [1773.902587890625, 0.0, 742.850288264126, 0.0, 0.0, 1778.455322265625, 556.2129828573743, 0.0, 0.0, 0.0, 1.0, 0.0]
None
# oST version 5.0 parameters


[image]

width
1440

height
1080

[narrow_stereo]

camera matrix
1790.263797 0.000000 742.437209
0.000000 1790.890198 556.709289
0.000000 0.000000 1.000000

distortion
-0.082579 0.188895 -0.000260 0.000940 0.000000

rectification
1.000000 0.000000 0.000000
0.000000 1.000000 0.000000
0.000000 0.000000 1.000000

projection
1773.902588 0.000000 742.850288 0.000000
0.000000 1778.455322 556.212983 0.000000
0.000000 0.000000 1.000000 0.000000

注意:需要提前修改mvs_ros_drive配置文件config/left_camera_trigger.yaml里的riggerEnable: 0,原本为1图像出不来,记得标定好修改回去,为同步做准备

2.抓取ROS包

新建4个终端

第一个终端,打开相机ros终端

 roslaunch mvs_ros_driver mvs_camera_trigger.launch

第二个终端打开livox的rviz界面

roslaunch livox_ros_driver2 rviz_MID360.launch

第三个终端,启动点云滤波

rosrun pointcloud_filter pass_through_filter

第四个终端,打开rviz进行配置

rosrun rviz rviz

记得修改这个Rviz的Fixed_Frame为livox_frame

第五个终端,进入bag文件夹并进行录制bag文件(全部点云)

cd ~/Data/calib/
rosbag record /left_camera/camera_info /left_camera/image /livox/lidar

或者记录滤波点云(建议使用这个)

rosbag record /left_camera/camera_info /left_camera/image /livox/lidar_filtered

查看bag文件

rosbag info 2025-11-22-23-48-36.bag 

3.direct visual lidar calibration进行标定

注意,该方法需要适配(多传感器联合标定--direct_visual_lidar_calibration),不然会报错

标定预处理

rosrun direct_visual_lidar_calibration preprocess ~/Data/calib ~/catkin_fl/src/direct_visual_lidar_calibration/result -av

初始估计

 rosrun direct_visual_lidar_calibration initial_guess_manual ~/catkin_fl/src/direct_visual_lidar_calibration/result

优化估计

rosrun direct_visual_lidar_calibration calibrate ~/catkin_fl/src/direct_visual_lidar_calibration/result

优化配准

rosrun direct_visual_lidar_calibration viewer ~/catkin_fl/src/direct_visual_lidar_calibration/result

标定参数

{
  "camera": {
    "camera_model": "plumb_bob",
    "distortion_coeffs": [
      -0.0825793412579484,
      0.18889546268346563,
      -0.0002599860454348438,
      0.0009403060803430131,
      0.0
    ],
    "intrinsics": [
      1790.2637974341574,
      1790.8901983778176,
      742.4372092570699,
      556.7092892509689
    ]
  },
  "meta": {
    "bag_names": [
      "2025-11-22-23-48-36.bag"
    ],
    "camera_info_topic": "/left_camera/camera_info",
    "data_path": "/home/wisdom/Data/calib",
    "image_topic": "/left_camera/image",
    "intensity_channel": "intensity",
    "points_topic": "/livox/lidar_filtered"
  },
  "results": {
    "T_lidar_camera": [
      0.04040893983177123,
      -0.0003016413283030992,
      -0.11782197698838458,
      -0.5189411728685212,
      0.48017297233895034,
      -0.48250621050814646,
      0.5170316552766282
    ],
    "init_T_lidar_camera": [
      0.05825143679976463,
      -0.016030732542276382,
      -0.1090027391910553,
      -0.5192230367835269,
      0.4779940593907771,
      -0.4793294806661294,
      0.5217014086975291
    ]
  }
}

我们可以取T_lidar_camera的标定外参格式内容为
TUM [tx ty tz qx qy qz qw]]
即:【X轴平移、y轴平移、z轴平移、四元数_x、四元数_y、四元数_z、四元数_w】

使用以下链接进行转换:https://staff.aist.go.jp/k.koide/workspace/matrix_converter/matrix_converter.html

转换矩阵为:

0.07324   0.00058   0.99731   0.04041   
-0.99731  -0.00422  0.07325   -0.00030  
0.00426   -0.99999  0.00027   -0.11782  
0.00000   0.00000   0.00000   1.00000   

在这里感谢赵博士对我的大力支持^u^!

浪里镖客-CSDN博客

 

 

<think>首先,用户的问题是关于如何使用MV-CS016-10GC相机实现实时图像数据采集。用户提到了海康机器人的工业相机型号MV-CS016-10GC,并询问实现方法。 从系统指令中,我需要参考提供的引用内容。引用[1]提到了在Ubuntu 20.04上使用海康机器人相机(型号MV-CS016-10UC)通过MVS软件进行图像抓取的基本步骤。引用[2]讨论了其他型号的摄像头在EPICS下的使用情况,但用户的问题聚焦于MV-CS016-10GC。 关键点: - 用户使用的是MV-CS016-10GC,可能MV-CS016-10UC类似。 - 引用[1]展示了在Ubuntu上使用MVS软件运行相机。 - 用户需要实时图像采集,而不仅仅是静态图像抓取。 我的回答需要: - 使用中文。 - 结构清晰,逐步解决问题。 - 确保LaTeX语法正确:行内数学表达式用$...$,独立公式用$$...$$。 - 生成相关问题。 - 在引用的段落末尾添加引用标识。 步骤: 1. **理解用户需求**:用户想实现实时图像数据采集,可能用于实时处理或流式传输。 2. **参考引用**: - 引用[1]:在Ubuntu上使用MVS软件运行相机,配置参数,拍摄图片。提到运行MVS的方法是进入目录并执行命令:`cd /opt/MVS/bin` 然后 `./MVS`。 - 引用[2]:涉及其他摄像头在EPICS下的使用,但用户的问题不直接相关,所以可能忽略或简要提及。 3. **扩展实现方法**: - 实时采集通常涉及连续抓取帧并处理。 - MVS软件可能支持实时预览或流式传输。 - 可能需要编程接口(如SDK)来实现自定义实时采集。 4. **结构回答**: - 介绍基本方法:使用MVS软件。 - 详细步骤:如何安装、配置、运行。 - 编程实现:使用海康提供的SDK进行实时采集。 - 示例代码:如果可能,提供简单代码片段(如Python或C++)。 5. **生成相关问题**:在末尾添加相关问题。 6. **添加引用标识**:如果引用内容,在末尾加[^1]。 详细回答大纲: - **引言**:解释实时图像采集的概念和重要性。 - **方法1:使用MVS软件**:基于引用[1],描述如何通过MVS实现实时预览。 - 步骤:安装MVS,连接相机,运行软件,配置实时模式。 - **方法2:使用SDK编程**:更灵活的方式,使用海康的SDK(如MVViewer或API)进行实时采集。 - 安装SDK。 - 示例代码:用Python或C++写一个简单采集程序。 - **注意事项**:如驱动程序安装、系统兼容性(Ubuntu)、实时性优化。 - **相关问题**:生成3-5个相关问题。 确保LaTeX: - 如果有数学表达式,如帧率计算,用$...$。例如,帧率$fps$。 最终回答结构: 1. 介绍实时图像采集。 2. 使用MVS软件的方法。 3. 使用SDK编程的方法。 4. 注意事项。 5. 相关问题。 生成相关问题: 1. 如何优化MV-CS016-10GC相机的实时采集性能? 2. 在Windows系统下如何实现MV-CS016-10GC的实时图像采集? 3. 如何处理实时采集的图像数据?</think>### MV-CS016-10GC 相机实时图像数据采集实现方法 实时图像数据采集涉及连续捕获和处理相机帧数据,通常用于工业检测、机器视觉等场景。MV-CS016-10GC 是海康机器人的工业相机(GigE接口型号),支持高帧率传输。以下基于引用内容(Ubuntu环境下的MVS软件使用)和扩展方法,分步说明实现方案。系统以Ubuntu为例(类似引用[1]的MV-CS016-10UC配置),其他系统可类比调整。 --- ### 一、基础准备:安装驱动和软件 1. **安装相机驱动和MVS软件** 海康相机需先安装官方驱动和MVS(Machine Vision Software)套件,支持实时预览和采集。 - 下载地址:访问[海康机器人官网](https://www.hikrobotics.com/),选择“服务支持”->“下载中心”,搜索MV-CS016-10GC驱动包。 - 安装步骤(Ubuntu): ```bash # 解压下载的安装包(假设为MVS.tar.gz) tar -zxvf MVS.tar.gz cd MVS sudo ./setup.sh # 运行安装脚本 ``` 安装后,软件默认路径为`/opt/MVS/bin`,运行MVS GUI:`cd /opt/MVS/bin && ./MVS`[^1]。 2. **连接相机** - 通过GigE网线连接相机和主机,确保IP在同一子网(相机默认IP可查手册)。 - 在Ubuntu中,使用`ifconfig`配置主机IP,或通过MVS自动识别相机。 --- ### 二、实时采集实现方法 #### 方法1:使用MVS软件实现实时预览(快速上手) MVS提供GUI工具,可直接实现实时图像流和基础采集。 1. **启动MVS并配置相机** - 运行命令:`cd /opt/MVS/bin && ./MVS`。 - 在GUI中选择MV-CS016-10GC相机,设置参数: - **采集模式**:切换到“连续采集”或“实时流”模式。 - **帧率设置**:根据需求调整(例如,最大帧率$fps_{\text{max}} = 60$,受分辨率和带宽限制)。 - **触发方式**:若需外部触发,选择“硬件触发”;否则用“软件触发”实现连续采集[^1]。 - 配置后,点击“开始采集”即可实时显示图像。 2. **保存实时数据** -MVS中,启用“录像”功能,将流保存为视频文件(如AVI格式)。 - 或使用“快照”功能定时保存帧序列。 此方法简单但灵活性低,适合快速测试。 #### 方法2:使用SDK编程实现自定义实时采集(推荐) 海康提供SDK(C++/Python API),支持编程控制实时采集,适用于嵌入式或自动化系统。SDK包含在MVS安装包中。 1. **安装SDK依赖** - Ubuntu安装编译工具: ```bash sudo apt-get install build-essential cmake ``` - Python用户安装PyMV库(若SDK支持): ```bash pip install hikrobotics-mv # 假设库名,以实际SDK文档为准 ``` 2. **C++ 示例代码(实时采集并显示帧)** 使用OpenCV处理图像,确保先安装OpenCV:`sudo apt-get install libopencv-dev`。 ```cpp #include <MvCameraControl.h> #include <opencv2/opencv.hpp> #include <iostream> int main() { // 初始化相机 void* handle = nullptr; MV_CC_DEVICE_INFO_LIST deviceList; MV_CC_EnumDevices(MV_GIGE_DEVICE | MV_USB_DEVICE, &deviceList); if (deviceList.nDeviceNum == 0) { std::cerr << "未检测到相机" << std::endl; return -1; } // 打开相机(以第一个设备为例) MV_CC_CreateHandle(&handle, deviceList.pDeviceInfo[0]); MV_CC_OpenDevice(handle); // 设置实时采集参数 MV_CC_SetEnumValue(handle, "AcquisitionMode", MV_ACQ_MODE_CONTINUOUS); // 连续采集模式 MV_CC_SetFloatValue(handle, "AcquisitionFrameRate", 30.0); // 帧率30fps // 开始采集 MV_CC_StartGrabbing(handle); // 循环读取帧 MV_FRAME_OUT frameInfo; cv::namedWindow("Real-Time Image", cv::WINDOW_AUTOSIZE); while (true) { MV_CC_GetImageBuffer(handle, &frameInfo, 1000); // 超时1000ms cv::Mat img(frameInfo.stFrameInfo.nHeight, frameInfo.stFrameInfo.nWidth, CV_8UC3, frameInfo.pBufAddr); // 转换为OpenCV格式 cv::cvtColor(img, img, cv::COLOR_BayerRG2RGB); // 转换色彩格式(根据相机) cv::imshow("Real-Time Image", img); if (cv::waitKey(1) == 'q') break; // 按'q'退出 MV_CC_FreeImageBuffer(handle, &frameInfo); // 释放缓冲区 } // 停止采集并清理 MV_CC_StopGrabbing(handle); MV_CC_CloseDevice(handle); MV_CC_DestroyHandle(handle); return 0; } ``` - **编译运行**:`g++ -o realtime_capture realtime_capture.cpp -lMvCameraControl -lopencv_core -lopencv_highgui`。 - 此代码实现连续采集并实时显示,帧率可调(通过$fps$参数控制)。 3. **Python 替代方案** 如果SDK提供Python绑定,使用PyMV简化代码: ```python import cv2 from hikrobotics.mv import Camera # 假设库名,参考SDK文档 # 初始化相机 cam = Camera() cam.open() # 自动检测设备 cam.set_param("AcquisitionMode", "Continuous") # 连续采集 cam.set_param("AcquisitionFrameRate", 30.0) # 设置帧率 # 开始实时采集 cam.start_grabbing() while True: frame = cam.grab_frame(timeout=1000) # 获取帧 img = cv2.cvtColor(frame.data, cv2.COLOR_BAYER_RG2RGB) # 转换格式 cv2.imshow("Live Feed", img) if cv2.waitKey(1) == ord('q'): # 按'q'退出 break cam.stop_grabbing() cam.close() ``` --- ### 三、关键注意事项 1. **实时性优化** - **带宽管理**:GigE接口带宽限制帧率,计算最大帧率公式: $$ fps_{\text{max}} = \frac{\text{带宽 (bps)}}{\text{分辨率} \times \text{像素深度} \times 8} $$ 例如,1080p分辨率(1920x1080)下,10-bit像素深度时,$fps_{\text{max}} \approx 30$。 - **降低延迟**:在SDK中启用“零拷贝”模式或硬件加速。 - **触发同步**:如需精准时序,使用外部硬件触发(如GPIO)。 2. **系统兼容性** - **Ubuntu**:如引用[1],优先用MVS;SDK支持Ubuntu 18.04/20.04。 - **Windows**:类似步骤,下载Windows版MVS/SDK。 - **EPICS集成**:如引用[2]所述,海康相机可能需自定义驱动;测试时参考其他型号(如CA016)的EPICS模块。 3. **常见问题** - 相机未识别:检查IP配置或USB权限(Ubuntu中运行`sudo chmod 666 /dev/bus/usb/*`)。 - 帧丢失:优化网络或减少分辨率。 - 实时处理:结合OpenCV或深度学习框架(如TensorFlow)处理图像流。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值