ROS 中 相机与雷达

该文详细介绍了在ROSNoetic环境下如何安装和标定相机及雷达。首先,通过源码编译安装相机驱动uvc_camera和usb_cam。接着,说明了如何校准摄像头并获取标定结果。然后,安装Livox雷达的SDK和ROS驱动,以及进行雷达驱动的配置。文章还涵盖了雷达与相机的标定过程,包括所需的多个依赖库的安装和特定功能包的编译。最后,提到了两个不同的相机与雷达标定方法来自不同的项目源码。

1. 相机驱动

  1. 在Noetic版本中,uvc_camera目前还没有提供二进制安装包,需要通过源码编译的方式安装
    源码编译前需要先安装依赖的软件

  2. 然后将源码克隆到你的工作空间src目录下,这里以catkin_ws工作空间为例

    sudo apt install libv4l-dev
    cd ~/catkin_ws/src/
    git clone https://github.com/ros-drivers/camera_umd.git
    git clone --branch=develop https://github.com/ros-drivers/usb_cam.git
    cd ..
    catkin_make
    

2. 校准摄像头

  1. 在Noetic中进行二进制安装
    sudo apt-get install ros-noetic-camera-calibration
    
  2. 查看相机的默认信息,默认的标定信息
    rosrun uvc_camera uvc_camera_node
    
  3. 进行标定,要先启动相机,注意图像的话题--square 单位是m--size 是角点,横竖
    rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.0255 image:=/usb_cam/image_raw
    
    绿色状态后,点击save,就在/tmp获得标定结果,是一个压缩包,现在把他移动到主目录,里面的yaml就是标定结果
    mv /tmp/calibrationdata.tar.gz  ~
    

3. 雷达驱动

  1. 参考:
  2. 这里是livox的安装环境
    # 随便找个位置安装sdk到系统
    git clone https://github.com/Livox-SDK/Livox-SDK2.git
    cd ./Livox-SDK2/
    mkdir build
    cd build
    cmake .. && make -j
    sudo make install
    # 安装ros驱动
    cd Livox_ws/src
    git clone https://github.com/Livox-SDK/livox_ros_driver2.git
    cd livox_ros_driver2/
    source /opt/ros/noetic/setup.sh
    ./build.sh ROS1
    # 测试运行,记得改 config/HAP_config.json 里面的IP
    

4. 雷达与相机的标定1

  1. 安装环境,依赖就建议在工作空间下放这些就行
    sudo apt install -y libglm-dev libglfw3-dev
    
    
    # 2. 依赖1
    mkdir temp_reply && cd temp_reply
    git clone https://github.com/koide3/iridescence --recursive
    cd iridescence
    mkdir build && cd build
    cmake ..
    make -j8
    sudo make install
    
    # 3. 依赖2
    git clone  https://github.com/fmtlib/fmt.git
    cd fmt
    # 修改这里面的cmakelists文件,一定添加:add_compile_options(-fPIC)
    mkdir build && cd build
    cmake ..
    make
    sudo make install
    
    # 依赖3,这个又依赖2
    git clone https://github.com/strasdat/Sophus.git
    cd Sophus
    mkdir build && cd build
    cmake ..
    make
    sudo make install
    
    # 依赖4
    git clone https://github.com/nlohmann/json.git
    cd json
    mkdir build && cd build
    cmake ..
    make
    sudo make install
    
  2. ROS功能包的安装, 如果编译有调用歧义的时候,需要更改源码为double:T_lidar_camera_gizmo.set_model_matrix(T_camera_lidar->inverse().matrix().cast<double>());
    # 3. 下面才是编译功能包,上面的是准备工作
    mkdir -p cal_lidar_cam_ws/src
    cd cal_lidar_cam_ws/src
    git clone https://github.com/koide3/direct_visual_lidar_calibration.git --recursive
    cd ..
    catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3 -j1
    
  3. 运行

5. 相机与雷达的标定2

  1. HKU的相机与雷达标定
    mkdir -p HKU_lidar_cam_ws/src
    cd HKU_lidar_cam_ws/src
    git clone https://github.com/hku-mars/livox_camera_calib.git
    cd ..
    catkin_make
    

参考

ROS小课堂:使用usb_cam软件包调试usb摄像头
优快云:ROS掉包侠修炼计划

### ROS相机激光雷达标定方法及教程 在ROS中,相机激光雷达标定是一项关键任务,用于实现多传感器融合和协同工作。以下是一些常见的标定方法、教程和校准节点示例。 #### 1. CamLaserCalibraTool CamLaserCalibraTool 是一个专门用于相机2D激光雷达外参标定的工具[^1]。它提供了从环境配置到数据采集、标定计算以及结果验证的一整套流程。用户可以通过该项目完成相机内参的标定,并结合棋盘格角点进行高精度的外参标定。 - **项目地址**: https://gitcode.com/gh_mirrors/ca/CamLaserCalibraTool - **特点**: 支持手动标定,利用棋盘格作为标定目标,适合需要高精度的应用场景。 #### 2. Livox LiDAR相机外参标定 Livox LiDAR 提供了一种手动标定方法,适用于Mid-40、Horizon 和 Tele-15 系列激光雷达[^2]。该方法基于棋盘格角点检测,利用LiDAR的非重复扫描特性,提高了标定精度。 - **步骤**: - 校准相机内参。 - 获取标定数据(通常包括棋盘格图像和LiDAR点云)。 - 计算LiDAR相机之间的外参数。 - 验证标定结果并进行融合应用。 - **优势**: 提供了预处理的数据集,方便用户快速上手。 #### 3. 多激光雷达校准器 (Multiple Lidar Calibration) 对于多激光雷达系统的标定,`Multiple Lidar Calibration` 提供了一个灵活的框架[^3]。通过调节配置文件中的参数(如 `params.yaml`),用户可以控制标定过程的关键环节: - **关键参数**: - **LiDAR设置**: 指定参校准的激光雷达话题名或数据文件路径。 - **初始化姿态**: 提供初始猜测值,对收敛速度至关重要。 - **算法参数**: 使用 GICP 或 RANSAC 等算法进行优化。 - **特殊校准模式**: 如目标到地面的校准,可能需要特定的参数配置。 #### 4. Ceres Solver 优化结果 Ceres Solver 是一种常用的非线性最小二乘优化工具,广泛应用于相机激光雷达标定中[^4]。以下是一个典型的标定流程: - **初步配准**: 使用 RANSAC 和最小二乘法估计变换矩阵 \( T_{\text{camera\_lidar}} \)。 - **初始猜测**: 手动设置初始猜测值,例如通过 `ros2 run direct_visual_lidar_calibration initial_guess_manual livox_preprocessed`。 - **精细配准**: 运行优化节点以提高标定精度,例如 `ros2 run direct_visual_lidar_calibration calibrate bag_files_preprocessed2`。 - **结果检查**: 输出优化前后的成本值和迭代次数,确保标定结果满足要求。 #### 5. 基于点云距离最小化的标定方法 这种方法的核心思想是通过最小化点云其最近邻点之间的距离来优化标定参数[^5]。具体步骤如下: 1. 设置激光雷达位姿传感器之间的转换。 2. 将所有激光雷达点融合成一个点云。 3. 计算每一点其最近邻点云之间的距离之和。 4. 在优化过程中调整转换矩阵,以最小化上述距离。 以下是基于该方法的一个简单代码示例: ```python import numpy as np from scipy.spatial import KDTree def optimize_transformation(lidar_points, pose_points): # 创建KDTree以加速最近邻搜索 tree = KDTree(pose_points) # 初始化转换矩阵 transformation = np.eye(4) # 优化循环 for _ in range(100): # 最大迭代次数 distances, indices = tree.query(lidar_points) cost = np.sum(distances) # 更新转换矩阵(此处省略具体更新逻辑) transformation = update_transformation(transformation, lidar_points, pose_points[indices]) # 检查收敛条件 if cost < 1e-6: break return transformation def update_transformation(transformation, lidar_points, nearest_points): # 示例更新逻辑:使用最小二乘法 A = np.hstack([lidar_points, np.ones((len(lidar_points), 1))]) B = nearest_points X = np.linalg.lstsq(A, B, rcond=None)[0] return np.vstack([X, [0, 0, 0, 1]]) ``` ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酸奶可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值