ROS & ROS2 机器人深度相机激光雷达多传感器标定工具箱

发布于:2025-04-20 ⋅ 阅读:(20) ⋅ 点赞:(0)

系列文章目录

目录

系列文章目录

前言

三、标定目标

3.1 使用自定义标定目标

四、数据处理

4.1 相机数据中的标定目标检测

4.2 激光雷达数据中的标定目标检测

输入过滤器:

正常估算:

区域增长:

尺寸过滤器:

RANSAC:

4.3 用于 2D-3D 姿态估计的透视点算法

4.4 用于 3D-3D 配准的 GICP

4.5 误差计算和标定确定性估计

五、工作区

5.1 机器人工作区

5.1.1 初始化新机器人工作区

六、节点、可组合节点和小节点

6.1 节点

6.1.1 multisensor_calibration

6.1.2 extrinsic_camera_lidar_calibration

6.1.3 extrinsic_lidar_lidar_calibration

6.1.4 extrinsic_camera_reference_calibration

6.1.5 extrinsic_lidar_reference_calibration

6.1.6 publish_pointcloud

6.1.7 initialize_robot_workspace

6.2 可组合节点/小节点

6.2.1 CameraTargetDetection / CameraDataProcessingNodelet


前言


三、标定目标

        对于外参的多传感器标定,工具箱的开发使用了非对称标定目标,如下图所示。非对称可以在传感器数据中检测到目标的完整 6-DOF 姿态,从而减少对应搜索中可能出现的歧义,使标定过程更加稳健。

图 1:用于外参标定的不对称标定图片。

        多传感器标定 "使用的默认标定目标具有以下属性:

  • 宽度: 1.2 米
  • 高度: 0.8 米
  • 三个圆形切口
    • 半径: 0.12 米
    • 位于中心周围 X-Y 方向正负 0.15 米处。
  • DICT_6X6_250 中的四个 ArUco 标记
    • ID 分别为:1、2、3、4(顺时针方向,从左上方开始排列)
    • 边缘长度:0.18 米
    • 在 X-Y 方向上,距离电路板各角正负 0.05 米的位置

3.1 使用自定义标定目标

        不过,多传感器标定工具箱允许通过编辑 yaml 文件来调整标定目标的参数: <repository>/mutlisensor_calibration/cfg/TargetWithCirclesAndAruco.yaml

%YAML:1.0
board_width: 1.2        # width of board in meters
board_height: 0.8       # height of board in meters
marker_size: 0.18       # side length of aruco markers in meters
marker_ids:             # ids of marker used as a single column matrix
    rows: 4
    cols: 1
    dt: i
    data: [1, 2, 3, 4]  # marker order goes clockwise, starting from top left of board
marker_positions:       # x,y marker positions (top-left) on board relative to center, stored row-by-row in meters. x: rightwards, y: upwards
    rows: 4
    cols: 2
    dt: f
    data: [-0.55, 0.35,
           0.37, 0.35,
           0.37, -0.17,
           -0.55, -0.17]
cutouts:                # Cutouts (id + parameters) stored as a single row matrix. x: rightwards, y: upwards
    rows: 1
    cols: 12
    dt: f
    data: [1, -0.15, 0.15, 0.12,    # Circular cutout: (id: 1, parameters: {X,Y,Radius})
           1, 0.15, -0.15, 0.12,    
           1, -0.15, -0.15, 0.12]   
min_marker_detection: 2 # minimum number of markers that need to be detected in the camera image
cad_model_mesh: "calibration_target_3holes_cad_mesh.ply" # relative file path to CAD model of the calibration target as mesh
cad_model_cloud: "calibration_target_3holes_cad_cloud.ply" # relative file path to CAD model of the calibration target as cloud

        CAD 模型网格/云通过 GICP 将模型数据与分割点云对齐,用于优化检测到的目标姿态。

四、数据处理

4.1 相机数据中的标定目标检测

        标定目标通过 ArUco 标记在图像数据中进行检测。在此过程中,利用 OpenCV 提供的功能来检测标记并计算标定目标相对于摄像机的姿态。为了从标记检测中推导出目标的姿态,该算法需要摄像机的固有参数,因此良好的固有标定至关重要。检测到的标记的图像点会被存储起来,随后作为 PnP 算法的一部分用作二维对应。此外,利用检测到的标记的图像位置和有关标定板几何形状的先验知识,还可以创建标定目标的三维点云。检测成功后,将公布检测结果、目标的 6-DOF Pose 以及重建的 3D 点云。其中,检测到的角所属的标记 ID 将存储在该点的强度值中。

4.2 激光雷达数据中的标定目标检测

        激光雷达云数据中标定目标的检测和姿态估计是通过多个连续步骤实现的。其中使用了点云库(PCL)中的多种算法。

  1. 首先,使用区域生长算法将输入点云分割成平面区域。该算法要求点云有法线向量,而法线向量是在区域生长之前计算出来的。
  2. 然后,每个分割的簇的大小和长宽比是否符合标定目标的几何形状。如果符合,则将该集群视为感兴趣区域(也作为预览发布),并在其中对目标进行详细检测和姿态估计。在此过程中,算法会将旋转边界框拟合到簇上,并检查其尺寸。
  3. 在进行实际的目标检测和姿态估计时,首先利用切口的排列将边界框的方向与标定目标的实际方向对齐。在此过程中,通过计算点云中位于切口假定位置的点,对所有可能的方向进行测试。累计点数最少的方位将作为目标的方位。
  4. 该姿态被用作 RANSAC 算法的初始化,该算法会尝试将标定目标的自定义样本共识 (SAC) 模型拟合到感兴趣的分割区域。在此过程中,该算法会根据集群中的随机点集计算电路板的法向量,并在每次 RANSAC 迭代中改变目标姿态的位置和旋转。最后,离群值最多的姿势将被选为 “赢家通吃 ”的解决方案。作为离群值,所有位于标定目标上的点都会被选中。每当有一个点落入圆形切口,当前估计值就会受到惩罚,离群值的数量会减少一定的系数。
  5. 当 RANSAC 找到一个姿态后,通过使用 GICP 将 CAD 模型拟合到点云中,对系数进行最优化。在此过程中,只使用从输入云中分割出的构成云凸壳的点。
  6. 最后,根据估计的木板姿态推导出标记角的三维坐标,并将其存储为三维对应关系。

        检测成功后,将公布检测结果以及目标的 6-DOF 姿态和分割后的三维点云。其中,检测到的角所属的标记 ID 将存储在该点的强度值中。

        上述算法的参数作为动态参数公开,可通过调用 rqt_reconfigure 或从用户界面(编辑->首选项)打开首选项进行调整。下面是这些参数的概述:

输入过滤器:

  • max_range: 在进行任何处理之前过滤输入点云的最大范围。范围(与传感器的绝对距离)大于 max_range 的任何点都将被丢弃。设置为 0 则关闭。

正常估算:

  • normal_estimation_search_method: 选择邻居搜索方法。(0 = 半径搜索,1 = 最近邻搜索)。
  • normal_estimation_search_radius(法线估计搜索半径): 搜索邻居的半径。如果使用 “RadiusSearch”,这是一个空间扩展。如果是 “NearestNeighborSearch”,则表示最近邻居的数量(截断为 int)。

区域增长:

  • region_growing_cluster_size_min:一个簇需要包含的最小点数,以便在区域生长中被视为有效。
  • region_growing_cluster_size_max: 为使区域生长有效,聚类所需包含的最大点数。
  • region_growing_number_neighbors: 区域生长过程中需要考虑的邻接点数量。
  • region_growing_angle_thresh(区域生长角度阈值): 作为法线偏差允许范围的角度(单位:度)。如果各点法线之间的偏差小于平滑度阈值,则建议将它们归入同一聚类。
  • 区域生长曲率阈值(region_growing_curvature_thresh): 区域生长的第二个标准。如果两个点的法线偏差较小,则测试它们之间的曲率差异。

尺寸过滤器:

  • size_filter_width_min_tolerance: 根据集群大小过滤集群时,最小棋盘宽度的容差(单位:米)。
  • size_filter_width_max_tolerance: 根据群组大小筛选时,最大板宽的容差(单位:米)。
  • size_filter_height_min_tolerance(尺寸筛选高度最小容差): 根据群组尺寸筛选时的最小板高公差(单位:米)。
  • size_filter_height_max_tolerance(尺寸过滤最大高度容差): 根据集群大小过滤集群时的最大板高公差(单位:米)。

RANSAC:

  • ransac_distance_thresh: 在 RANSAC 过程中,将点视为离群值时与模型的距离阈值(单位:米)。
  • ransac_rotation_variance(旋转方差): 在 RANSAC 中计算新系数时采样的最大旋转角度(度)。
  • ransac_translation_variance(平移方差): 在 RANSAC 中计算新系数时采样的最大平移距离(米)。
  • ransac_optimize_coefficients(优化系数): 通过 ICP 激活系数优化的最优选项。
  • target_icp_variant: 选择用于优化系数的 ICP 变量。(0 = ICP,1 = PlaneICP,2 = GICP)。
  • target_icp_max_correspondence_distance: ICP 搜索点对应关系的最大距离。以与标定目标短边的比率表示。
  • target_icp_rotation_tolerance(ICP旋转公差): 用于收敛检查的旋转公差。单位为度。
  • target_icp_translation_tolerance(平移公差): 用于会聚检查的平移容差。单位为激光雷达点云,通常为米。

4.3 用于 2D-3D 姿态估计的透视点算法

        在使用 2D-3D 对应集(如相机-激光雷达标定)进行外参姿态估计时,会使用 OpenCV 的透视-n-点(PnP)算法。配置 PnP 算法的参数是动态参数,可通过调用 rqt_reconfigure 或从用户界面打开首选项(编辑->首选项)进行调整。下面是这些参数的概述:

  • limit_single_board_rpj_error: 在标定单个目标姿态时使用可接受的最大重投影误差。如果为假,“board_max_rpj_error ”将被忽略。
  • single_board_max_rpj_error(单板最大重投误差): 标定单个目标姿态时可接受的最大重投影误差限制。超过此限制的所有标定姿势都将被拒绝。
  • single_board_min_inliers(单板最小异常值): 标定单个目标姿态时可接受的最小异常值数量阈值。所有未达到此阈值的标定姿势都将被拒绝。
  • pnp_inlier_rpj_error_limit:在 PnP 过程中将点视为 RANSAC 离群值的最大重投影误差限值。

4.4 用于 3D-3D 配准的 GICP

        在对两个激光雷达传感器的三维点云进行配准(如激光雷达-激光雷达标定)时,会使用 “small_gicp ”的广义 ICP (GICP)。配置 GICP 算法的参数是动态参数,可通过调用 rqt_reconfigure 或从用户界面打开首选项(编辑->首选项)进行调整。下面是这些参数的概述:

  • registration_icp_variant: 选择用于注册的 ICP 变体。(0 = ICP,1 = PlaneICP,2 = GICP)
  • registration_icp_max_correspondence_distance: ICP 搜索点对应关系的最大距离。以相对于标定目标短边的比率表示。
  • registration_icp_rotation_tolerance(ICP 旋转公差): 用于收敛检查的旋转公差。单位为度。
  • registration_icp_translation_tolerance(注册_icp_平移公差): 收敛检查的平移容差。单位为激光雷达点云,通常为米。

4.5 误差计算和标定确定性估计

        在使用 PnP 算法通过 2D-3D 对应对准两个传感器的标定过程中,标定质量由平均再投影误差(mean reprojection error.html)来衡量。对于良好的标定,典型的重投影误差在 2-4 像素之间。

        在两个三维传感器的标定中,传感器数据通过 GIPC 对齐,标定质量通过均方根误差(RMSE)来衡量。对于良好的标定,典型的均方根误差在视图厘米范围内。

        为了量化结果的确定性,还要计算各个目标姿势的标准偏差。其中,对于给定的外参标定,检测到的标定目标的姿态从源传感器的坐标系投影到参考传感器的坐标系。平移和旋转差的标准偏差可以很好地说明标定的一致性。

五、工作区

        标定使用工作区来存储设置和标定结果。这样做的目的是为每个机器人使用一个工作区(机器人工作区),其中为每个传感器和标定类型创建不同的子工作区(标定工作区)。

        典型的工作区结构如下:

<RobotName>
|   settings.ini
|   <SomeUrdfFile>.urdf   
|   <SomeUrdfFile>_<LastDateModified>.urdf 
|
|----<src_sensor_name>_<ref_sensor_name>_<intrinsic|extrinsic>_calibration
|   |   settings.ini
|   |   calibration_results.txt
|   |   urdf_snippet.txt
|   |   <calibration_target>.yaml
|   |   
|   |---observations
|   |---_backups
|   |   |   ...
|   
|----<src_sensor_name>_<ref_sensor_name>_<intrinsic|extrinsic>_calibration
|   |   ...
|
| ...

所有工作区的默认根文件夹都是 $HOME/multisensor_calibration

关于不同工作区内容的详细讨论见下文。

5.1 机器人工作区

        根目录(即机器人工作区)和每个子目录(即标定工作区)都有一个设置文件 (settings.ini),其中分别包含机器人和标定的特定设置。

        机器人设置包含以下参数:

  • name:机器人名称
  • urdf_model_path: 机器人 URDF 模型的可选路径。如果给出相对路径,则假定该路径与机器人工作区文件夹相对。

        如果提供了 URDF 模型,外参标定结果将直接写入 URDF 文件。此外,标定计算出的外参姿态如果可用,也会直接存储到 URDF 文件中。在这种情况下,现有文件将被重命名,并在文件名后附加上次修改的日期。即使没有提供 URDF 文件,标定仍可执行。但仍会发出警告信息。

5.1.1 初始化新机器人工作区

        要初始化新的机器人工作区,有两个选项:

  1. 运行标定配置器,开始标定并设置新工作区的参数。如果新工作区不存在,配置器将创建并初始化新工作区。
  2. 或者,也可以使用 initialize_robot_workspace 节点。只需运行
ros2 run multisensor_calibration initialize_robot_workspace --ros-args -p robot_ws_path:=<path_to_ws_dir> -p robot_name:=<robot_name> [-p urdf_model_path:=<path_to_file>]

5.2 标定工作区

        标定设置包括特定的标定设置,并与下文所述的不同标定例程的启动参数相对应。每次标定后,结果都会存储在相应子目录下的 calibration_results.txt 文件中。除标定结果外,还会在 urdf_snippet.txt 文件中写入一个 XML 块,其中包含可复制到 URDF 文件中的标定数据。

        如果在标定节点的启动配置中进行了指定,捕获的观测数据将存储在观测值中。在新标定开始时,之前的标定数据将被备份并移动到 _backups 中的一个新子文件夹中。

        如果在机器人设置中指定了 URDF 文件,且该文件中存在已标定传感器的条目,则外参标定结果将直接写入 URDF 文件。

5.3 工作区模板

        标定配置器还允许安装工作区模板。这在首次运行标定时尤其有用。默认情况下,标定配置器有一个示例机器人的工作区模板。不过,如果从源代码构建并安装了多传感器标定工具箱,则可以为配置器提供更多自定义工作区模板。具体方法如下

  1. 在文件系统中创建一个文件夹结构,其中包含(多个)机器人工作区,每个工作区都包含所需的标定工作区,如上图所示。
  2. 在每个机器人工作区文件夹中,根据该模板创建一个 “settings.ini ”文件。
  3. 在每个标定工作区内,根据相应的模板创建一个 “settings.ini ”文件:
    1. extrinsic_camera_lidar_workspace_settings_template
    2. 外置激光雷达工作区设置模板
    3. 外置相机参考工作空间设置模板
    4. 外置激光雷达参考工作区设置模板
    5. 注:在此,重要的是所述工作区类型与标定类型相对应
  4. 在构建 “multisensor_calibration ”之前,以自定义工作区结构根目录的路径为参数,调用资源库中名为 “scripts/populate_robot_workspaces_qrc.sh ”的脚本。这将复制自定义工作区并填充相应的资源文件,以便标定配置器访问它们进行安装。

六、节点、可组合节点和小节点

6.1 节点

6.1.1 multisensor_calibration

        启动多传感器标定的主要用户友好入口点。它将启动标定配置器,通过该配置器可对任何标定进行参数化并启动标定。这不需要任何启动参数,只需像这样启动即可:

ros2 run multisensor_calibration multisensor_calibration

6.1.2 extrinsic_camera_lidar_calibration

        用于在照相机和激光雷达传感器之间进行外参标定的节点,具有用户友好的用户界面。

        它包括

  • 执行实际标定的 ExtrinsicCameraLidarCalibration(Nodelet)、
  • 负责引导用户放置标定目标的 GuidedCameraLidarTargetPlacement(Nodelet),以及
  • CameraLidarCalibrationGui" 实例作为图形用户界面。

启动参数:

robot_ws_path: 存放机器人工作区的文件夹路径。如果该文件夹不存在,则不会创建。请参阅 “初始化新的机器人工作区 ”一节,了解如何创建新的工作区。
类型: 字符串 字符串

target_config_file(目标配置文件): 标定目标配置文件的路径。
例如,“$(find multisensor_calibration)/config/TargetWithCirclesAndAruco.yaml” ($(find multisensor_calibration)/config/TargetWithCirclesAndAruco.yaml
类型: 字符串

camera_sensor_name:要标定的摄像机传感器名称。
类型: 字符串 字符串

camera_image_topic(图像主题 相应摄像机图像的话题名称。
类型: 字符串 字符串

lidar_sensor_name:要标定摄像机的激光雷达传感器名称。
类型: 字符串 字符串

lidar_cloud_topic: 相应激光雷达云的话题名称。
类型: 字符串 字符串

camera_info_topic: 摄像机信息话题名称。如果省略此参数,摄像机信息主题名称将由指定的 camera_image_topic 生成。
类型: 字符串 字符串
默认值:"”

image_state: 所用摄像机图像的状态。
类型: 字符串 字符串
默认值: 'DISTORTED
可能的值:
DISTORTED(扭曲)": 来自摄像机的图像,即图像失真尚未校正,在进行立体声处理时也未校正。
未扭曲": 图像没有失真,但未进行立体处理校正。
'stereo_rectified'(已校正): 为立体处理而矫正的图像,即外极线水平对齐。

is_stereo_camera: 如果要将摄像机标定为立体摄像机,则设置为 “true”。如果设置为 “true”,则还需要设置 “right_camera_sensor_name ”和 “right_camera_info_topic”。
类型: bool
默认值:false

right_camera_sensor_name:当摄像机作为立体摄像机系统进行标定时,右侧摄像机传感器的名称。如果 is_stereo_camera == true 则为必填项。
类型: 字符串
默认值: "”

right_camera_info_topic: 与右侧摄像机相对应的摄像机信息的话题名称。将摄像机标定为立体摄像机系统时需要使用此名称。在 is_stereo_camera == true 时必须填写。
类型: 字符串 字符串
默认值:"”

rect_suffix: 右侧传感器名称的后缀以及整流图像的坐标系 id。如果输入图像的 “image_state”(图像状态)为 DISTORTED 或 UNDISTORTED,则会将其添加到修正后的坐标系图像 ID 中。如果 imageState_ 为 STEREO_RECTIFIED,则会从坐标系图像 ID 中移除。
类型: 字符串 字符串
默认值:"_rect

base_frame_id: 如果指定,外参姿态将根据给定帧 ID 的帧来计算。这不会改变参考传感器(即激光雷达传感器)的坐标系 ID,但会将估计的外参姿态执行后验变换到指定的坐标系。如果未指定或留空,外参姿态将根据参考传感器的坐标系计算。
类型: 字符串
默认值:"”

use_initial_guess(使用初始猜测): 从 TF 树中使用外参传感器姿态初始猜测(如果有)的选项。
类型: bool
默认值:false

save_observations(保存观测数据): 将用于标定的记录观测值保存到工作区的选项
类型:bool
默认值:false

sync_queue_size: 用于同步摄像机图像和激光雷达云图信息的队列大小
类型:int
默认值:100

use_exact_sync 如果要在摄像机图像信息和激光雷达云信息之间实现精确时间同步,则设为 true。
类型: bool
默认值:false

6.1.3 extrinsic_lidar_lidar_calibration

        用于在两个激光雷达传感器之间进行外参标定的节点,具有用户友好的用户界面。

        它包括

  • 执行实际标定的 ExtrinsicLidarLidarCalibration(节点节点)、
  • 负责引导用户放置标定目标的 GuidedLidarLidarTargetPlacement(Nodelet),以及
  • 作为图形用户界面的 “LidarLidarCalibrationGui ”实例。

        启动参数:

robot_ws_path: 存放机器人工作区的文件夹路径。如果该文件夹不存在,则不会创建。请参阅 “初始化新的机器人工作区 ”一节,了解如何创建新的工作区。
类型: 字符串 字符串

target_config_file(目标配置文件): 标定目标配置文件的路径。
例如,“$(find multisensor_calibration)/config/TargetWithCirclesAndAruco.yaml” ($(find multisensor_calibration)/config/TargetWithCirclesAndAruco.yaml
类型: 字符串

src_lidar_sensor_name:要标定的源激光雷达传感器名称。
类型: 字符串 字符串

src_lidar_cloud_topic: 相应激光雷达云的话题名称。
类型: 字符串 字符串

ref_lidar_sensor_name:要标定源激光雷达传感器的参考激光雷达传感器的名称。
类型: 字符串 字符串

ref_lidar_cloud_topic: 相应激光雷达云的话题名称。
类型: 字符串 字符串

base_frame_id: 如果指定,外参姿态将以给定帧 ID 的帧为基准进行计算。这不会改变参考传感器(即激光雷达传感器)的坐标系 ID,但会将估计的外参姿态执行后验变换到指定的坐标系。如果未指定或留空,外参姿态将根据参考传感器的坐标系计算。
类型: 字符串
默认值:"”

use_initial_guess(使用初始猜测): 从 TF 树中使用外参传感器姿态初始猜测(如果有)的选项。
类型: bool
默认值:false

align_ground_planes: 设置为 “true”,可额外对齐传感器数据中的地面平面。此外,还要指定直立坐标系 ID。类型:bool 默认值:false

upright_frame_id: Z 轴向上的坐标系 ID。用于检测传感器数据中的地平面。类型:字符串 字符串 默认值:"”

save_observations(保存观测数据): 将用于标定的记录观测值保存到工作区的选项
类型: bool
默认值: false

sync_queue_size: 用于同步摄像机图像和激光雷达云图信息的队列大小
类型:int
默认值:100

use_exact_sync 如果要在摄像机图像信息和激光雷达云信息之间实现精确时间同步,则设为 true。
类型: bool
默认值:false

6.1.4 extrinsic_camera_reference_calibration

        该节点用于通过用户友好的用户界面,引导摄像机相对于参照物进行外参标定。

        它包括

  • 执行实际标定的 ExtrinsicCameraReferenceCalibration(Nodelet)、
  • 负责引导用户放置标定目标的 GuidedCameraLidarTargetPlacement(Nodelet),以及
  • 作为图形用户界面的 “CameraReferenceCalibrationGui ”实例。

        启动参数:

robot_ws_path: 存放机器人工作区的文件夹路径。如果该文件夹不存在,则不会创建。请参阅 “初始化新的机器人工作区 ”一节,了解如何创建新的工作区。
类型: 字符串 字符串

target_config_file(目标配置文件): 标定目标配置文件的路径。
例如,“$(find multisensor_calibration)/config/TargetWithCirclesAndAruco.yaml” ($(find multisensor_calibration)/config/TargetWithCirclesAndAruco.yaml
类型: 字符串

camera_sensor_name:要标定的摄像机传感器名称。
类型: 字符串 字符串

camera_image_topic(图像主题 相应摄像机图像的话题名称。
类型: 字符串 字符串

reference_name: 标定的基准名称。
类型: 字符串 字符串

reference_frame_id: 提供基准数据的坐标系 ID。
类型: 字符串 字符串

camera_info_topic:摄像机信息主题的名称: 摄像机信息话题名称。如果省略此参数,摄像机信息主题名称将由指定的 camera_image_topic 生成。
类型: 字符串 字符串
默认值:"”

image_state: 所用摄像机图像的状态。
类型: 字符串 字符串
默认值: 'DISTORTED
可能的值:
DISTORTED(扭曲)": 来自摄像机的图像,即图像失真尚未校正,在进行立体声处理时也未校正。
未扭曲": 图像没有失真,但未进行立体处理校正。
'stereo_rectified'(已校正): 为立体处理而矫正的图像,即外极线水平对齐。

is_stereo_camera: 如果要将摄像机标定为立体摄像机,则设置为 “true”。如果设置为 “true”,则还需要设置 “right_camera_sensor_name ”和 “right_camera_info_topic”。
类型: bool
默认值:false

right_camera_sensor_name:当摄像机作为立体摄像机系统进行标定时,右侧摄像机传感器的名称。如果 is_stereo_camera == true 则为必填项。
类型: 字符串
默认值: "”

right_camera_info_topic: 与右侧摄像机相对应的摄像机信息的话题名称。将摄像机标定为立体摄像机系统时需要使用此名称。在 is_stereo_camera == true 时必须填写。
类型: 字符串 字符串
默认值:"”

rect_suffix: 右侧传感器名称的后缀以及整流图像的坐标系 id。如果输入图像的 “image_state”(图像状态)为 DISTORTED 或 UNDISTORTED,则会将其添加到修正后的坐标系图像 ID 中。如果 imageState_ 为 STEREO_RECTIFIED,则会从坐标系图像 ID 中移除。
类型: 字符串 字符串
默认值:"_rect

base_frame_id: 如果指定,外参姿态将根据给定帧 ID 的帧来计算。这不会改变参考传感器(即激光雷达传感器)的坐标系 ID,但会将估计的外参姿态执行后验变换到指定的坐标系。如果未指定或留空,外参姿态将根据参考传感器的坐标系计算。
类型: 字符串
默认值:"”

save_observations(保存观测数据): 将用于标定的记录观测值保存到工作区的选项
类型: bool
默认值: false

6.1.5 extrinsic_lidar_reference_calibration

        该节点用于引导激光雷达传感器相对于参照物进行外参标定,具有用户友好的用户界面。

        它包括

  • 执行实际标定的 ExtrinsicLidarReferenceCalibration(Nodelet)、
  • 负责引导用户放置标定目标的 GuidedLidarLidarTargetPlacement(Nodelet),以及
  • 作为图形用户界面的 “LidarReferenceCalibrationGui ”实例。

        启动参数:

robot_ws_path: 存放机器人工作区的文件夹路径。如果该文件夹不存在,则不会创建。请参阅 “初始化新的机器人工作区 ”一节,了解如何创建新的工作区。
类型: 字符串 字符串

target_config_file(目标配置文件): 标定目标配置文件的路径。
例如,“$(find multisensor_calibration)/config/TargetWithCirclesAndAruco.yaml” ($(find multisensor_calibration)/config/TargetWithCirclesAndAruco.yaml
类型: 字符串

src_lidar_sensor_name:要标定的源激光雷达传感器名称。
类型: 字符串 字符串

src_lidar_cloud_topic: 相应激光雷达云的话题名称。
类型: 字符串 字符串

reference_name:标定参考的名称。
类型: 字符串 字符串

reference_frame_id: 提供基准数据的坐标系 ID。
类型: 字符串 字符串

base_frame_id:基准帧 ID: 如果指定,外参姿态将以给定帧 ID 的帧为基准进行计算。这不会改变参考传感器(即激光雷达传感器)的坐标系 ID,但会将估计的外参姿态执行后验变换到指定的坐标系。如果未指定或留空,外参姿态将根据参考传感器的坐标系计算。
类型: 字符串
默认值:"”

save_observations(保存观测数据): 将用于标定的记录观测值保存到工作区的选项
类型: bool
默认值: false

6.1.6 publish_pointcloud

        节点,用于从指定的 PLY 文件加载点云,并以给定的 frame_id 将其发布到给定的话题上。

  • 这有助于在外参激光雷达-车辆标定的情况下发布模型云。

        启动参数:

point_cloud_file(云点文件): 加载点云的 PLY 文件。
类型: 字符串
默认值:"”

topic_name:发布点云的话题名称。
类型: 字符串 字符串
默认值: "”

frame_id: 要在其上发布点云的坐标系 ID。
类型: 字符串 字符串
默认值: "”

6.1.7 initialize_robot_workspace

        根据给定信息初始化不存在的机器人工作区的节点。

        启动参数:

robot_ws_path: 机器人工作区的初始化路径。
类型: 字符串 字符串
默认值: "”

robot_name: 工作区对应的机器人名称。
类型: 字符串 字符串
默认值: "”

urdf_model_path:(可选)与机器人相关联的 URDF 模型的路径。
类型: 字符串 字符串
默认值: "”

6.2 可组合节点/小节点

6.2.1 CameraTargetDetection / CameraDataProcessingNodelet

        该节点小程序用于运行相机数据处理,进而检测相机数据中与其他数据隔离的标定目标。这对开发和调试摄像机数据中的标定目标检测特别有帮助。

        启动参数

相机: 摄像机的命名空间。
类型:字符串 字符串
默认: "/camera

image: 图像主题的名称: 摄像机命名空间中图像话题的名称。
类型: 字符串 字符串
默认值: "image_color

image_state(图像状态): 所用摄像机图像的状态。
类型: 字符串 字符串
默认值: "DISTORTED
可能的值:
DISTORTED(扭曲)": 来自摄像机的图像,即图像失真尚未校正,在进行立体声处理时也未校正。
未扭曲": 图像没有失真,但未进行立体处理校正。
'stereo_rectified'(已校正): 为立体处理而矫正的图像,即外极线水平对齐。

target_config_file(目标配置文件): 标定目标配置文件的路径。
例如:“$(find multisensor_calibration)/config/TargetWithCirclesAndAruco.yml”。

发布的话题:

~/annotated_image: 照相机图像,其中注有标定目标的检测标记。

~/target_pattern: 在摄像机中检测到的标定目标云,并重新投影到三维云中。只有在激光雷达云中检测到标定目标后才能使用。

~/marker_corners: 根据检测到的目标姿态推导出的标定目标上 ArUco 标记的角。标记角的每个点都用强度场内 ArUco 标记的 ID 增强。只有在激光雷达云中检测到标定目标后才能使用。

~/board_pose:检测到的标定目标的 6-DOF 姿态。只有在激光雷达云中检测到标定目标后才可用。

广告服务:

~/request_camera_intrinsics: 请求加载相机传感器内在元件的服务。
~/capture_target: 触发目标捕捉的服务。
~/request_processor_state: 获取处理器初始化状态的服务


网站公告

今日签到

点亮在社区的每一天
去签到