ROS ROS2 机器人深度相机激光雷达多传感器标定工具箱入门教程(一)

系列文章目录

目录

系列文章目录

前言

一、安装

1.1 ROS 2 官方软件包

二、教程

2.1 标定配置器

2.1.1 机器人选项

2.1.2.1 外参相机-激光雷达标定

2.1.2.2 外参激光雷达-激光雷达标定

2.1.2.3 外参相机参照标定

2.1.2.4 外参激光雷达-参考标定

2.2 外参照相机-激光雷达标定

2.3 外参激光雷达-激光雷达标定

2.4 外参照相机参照标定

2.5 外参激光雷达-参考标定


前言

通过图形用户界面,多传感器标定工具箱可指导用户完成相机-激光雷达传感器设置的标定。

        multisensor_calibration 是一个积极维护的通用标定工具箱,用于辅助基于目标的多传感器标定,支持 ROS 1 和 ROS 2。它提供了多种方法和应用来标定复杂的多传感器系统,例如

  • 外参相机-激光雷达标定、
  • 外参相机-参考标定、
  • 外参激光雷达-激光雷达标定、
  • 外参激光雷达-参考标定,以及
  • 外参激光雷达-车辆标定(原型)。


一、安装

        多传感器标定工具箱作为 ROS 2 的官方软件包发布,名为 multisensor_calibration。由于 ROS 1 即将报废,因此 ROS 1 将不会有官方版本。

        除了官方发布的版本外,multisensor_calibration 还可以从 ROS 1 和 ROS 2 的源代码中构建,如下所述。

1.1 ROS 2 官方软件包

sudo apt install ros-$ROS_DISTRO-multisensor-calibration

二、教程

为了有一个统一的起点,“multisensor_calibration ”提供了一个标定配置器,可以选择并设置所需的标定参数。只需调用

ros2 run multisensor_calibration multi_sensor_calibration

        标定配置器提供了一个图形用户界面,用于配置和运行下列传感器标定之一:

  • 外参相机-激光雷达标定
  • 外参激光雷达-激光雷达标定
  • 外参相机-参考标定
  • 外参激光雷达-参考标定

        另外,单个标定也可作为独立节点启动,无需标定器。在这种情况下,用户必须手动指定适当的启动参数,因此建议使用标定配置器。有关详细信息,请参阅节点部分。

        标定配置和标定结果都存储在工作区中。其中,每个传感器标定都会生成一个单独的工作区文件夹,而属于单个机器人的所有标定工作区又会被归入一个机器人工作区。

2.1 标定配置器

        标定配置器提供了一个图形用户界面,用于配置和运行不同的传感器标定。

图 1:标定配置器的图形用户界面。

        正如在工作区页面中进一步讨论的那样,各个传感器标定的配置和结果是在由机器人和标定工作区组成的工作区结构中进行组织的。因此,除了单个标定配置外,还需要设置一些机器人设置。

        标定配置器还允许安装工作区模板。这在首次运行标定时尤其有用。有关如何添加新模板的详细信息,请参阅相应章节

2.1.1 机器人选项

  • 工作区文件夹: 选择要打开的机器人工作区文件夹。如果输入的文件夹不存在,则将生成一个新的工作区。

        所有不同的机器人工作区文件夹都位于根目录下(默认: $HOME/multisensor_calibration),该目录列在相应组合框下方。要选择不同的根目录,请按下工作区文件夹组合框旁边的按钮。要将工作区模板安装到根目录,请按右侧相应的按钮。这将打开另一个对话框,可在其中选择机器人和相应的传感器标定。

  • 机器人名称: 机器人名称。
  • URDF 模型: 可选的机器人 URDF 模型。

2.1.2 标定选项

        选择机器人后,可通过相应的组合框选择要执行的标定类型:

  • 标定类型: 要执行的标定类型。根据所选的标定类型,将提供不同的标定选项。开始时,组合框和文本编辑将使用可用数据填充,即主题名称或帧 ID。

        如果所选的 “标定类型”、“源传感器名称 ”和 “参考传感器名称 ”配置已经过标定,且在标定工作区中找到了相应的设置文件,则其余选项将根据设置文件中的数据进行设置。

        下文将介绍不同标定类型的可用选项。

2.1.2.1 外参相机-激光雷达标定
  • 相机传感器名称: 源相机传感器名称。
  • 图像话题: 发布摄像机图像的话题名称。
  • 摄像机信息话题: 发布摄像机图像的话题名称。
  • 图像状态: 选择图像数据的状态。在标定过程中,需要用它来从摄像机信息信息中选择正确的数据。
    • 扭曲: 直接来自传感器的图像,即包含镜头失真。
    • 未扭曲: 图像已消除镜头失真。
    • STEREO_RECTIFIED(立体校正): 来自立体相机的图像经过校正,使两台相机的图像水平对齐。
  • Is Stereo Camera?如果要将摄像机标定为立体摄像机,则设置为 “true”。如果激活,还需要设置 “右传感器名称 ”和 “右信息话题”。
  • 右传感器名称: 将摄像机标定为立体摄像机系统时,右侧摄像机传感器的名称。
  • 右信息话题: 与右侧摄像机相对应的摄像机信息的话题名称。将摄像机标定为立体摄像机系统时需要使用此名称。
  • 右后缀: 右传感器名称的后缀,也是校正图像的坐标系 ID。如果输入图像的 “Image State(图像状态)”为 DISTORTED 或 UNDISTORTED,则会将其添加到修正后的坐标系图像 ID 中。如果 “图像状态 ”为 STEREO_RECTIFIED,则会从坐标系 ID 中移除。
  • 激光雷达传感器名称: 参考 LiDAR 传感器的名称。
  • 点云话题: 发布点云的话题名称。
  • 标定目标: 标定目标的配置文件。目前不可编辑。
  • 根据坐标系标定?根据基准坐标系标定源传感器的姿态。
  • 基准坐标系 ID:标定姿势所依据的基准坐标系的坐标系 ID。
  • 使用 TF 树的初始猜测?使用 TF-Tree 提供的数据提取标定的初始猜测。
  • 保存观测数据?将用于标定的观测数据保存到标定工作区。
  • 信息同步策略: 选择用于同步传感器信息的时间同步类型。
  • 同步队列大小: 用于时间同步的队列大小。
2.1.2.2 外参激光雷达-激光雷达标定
  • 源激光雷达传感器名称: 源激光雷达传感器名称。
  • 源点云话题: 发布源点云的话题名称。
  • 参考激光雷达传感器名称: 参考 LiDAR 传感器名称。
  • 参考点云话题: 发布参考点云的话题名称。
  • 标定目标: 标定目标的配置文件。目前不可编辑。
  • 是否额外对齐地面平面?设置为 “true”,可额外对齐传感器数据中的地面平面。如果为 “true”,则还需要直立坐标系的 ID,以便找到地平面的方向。
  • 直立坐标系 ID:- Z 轴向上的坐标系 ID。用于检测传感器数据中的地平面。
  • 根据坐标系标定?根据基准坐标系标定源传感器的姿态。
  • 基准坐标系 ID:标定姿态所依据的基准坐标系的坐标系 ID。
  • 使用 TF 树的初始猜测?使用 TF-Tree 提供的数据提取标定的初始猜测。
  • 保存观测数据?将用于标定的观测数据保存到标定工作区。
  • 信息同步策略: 选择用于同步传感器信息的时间同步类型。
  • 同步队列大小: 用于时间同步的队列大小。
2.1.2.3 外参相机参照标定
  • 摄像机传感器名称: 源相机传感器的名称。
  • 图像话题: 发布摄像机图像的话题名称。
  • 摄像机信息话题: 发布摄像机图像的话题名称。
  • 图像状态: 选择图像数据的状态。在标定过程中,需要用它来从摄像机信息信息中选择正确的数据。
  • 扭曲: 直接来自传感器的图像,即包含镜头失真。
  • 未扭曲: 图像已消除镜头失真。
  • STEREO_RECTIFIED(立体校正): 来自立体相机的图像经过校正,使两台相机的图像水平对齐。
  • Is Stereo Camera?如果要将摄像机标定为立体摄像机,则设置为 “true”。如果激活,还需要设置 “右传感器名称 ”和 “右信息话题”。
  • 右传感器名称: 将摄像机标定为立体摄像机系统时,右侧摄像机传感器的名称。
  • 右信息话题: 与右侧摄像机相对应的摄像机信息的话题名称。将摄像机标定为立体摄像机系统时需要使用此名称。
  • Rect Suffix(矩形后缀): 右传感器名称的后缀,也是修正图像的坐标系 ID。如果输入图像的 “图像状态 ”为 DISTORTED(扭曲)或 UNDISTORTED(未扭曲),则会将其添加到修正后的坐标系图像 ID 中。如果 “图像状态 ”为 STEREO_RECTIFIED,则会从坐标系图像 ID 中移除。
  • 参考名称: 参考名称。
  • 参考坐标系 ID:提供参考数据的坐标系 ID。
  • 标定目标: 标定目标的配置文件。目前不可编辑。
  • 根据坐标系标定?相对于基准坐标系标定源传感器的姿态。
  • 基准坐标系 ID:标定姿势所依据的基准坐标系的坐标系 ID。
  • 使用 TF 树的初始猜测?使用 TF-Tree 提供的数据提取标定的初始猜测。
  • 保存观测数据?将用于标定的观测数据保存到标定工作区。
2.1.2.4 外参激光雷达-参考标定
  • 源激光雷达传感器名称: 源 LiDAR 传感器名称。
  • 源点云话题: 发布源点云的话题名称。
  • 参照物名称: 参照物名称。
  • 参考坐标系 ID:提供参考数据的坐标系 ID。
  • 标定目标: 标定目标的配置文件。目前不可编辑。
  • 根据坐标系标定?相对于基准坐标系标定源传感器的姿态。
  • 基准坐标系 ID:标定姿势所依据的基准坐标系的坐标系 ID。
  • 使用 TF 树的初始猜测?使用 TF-Tree 提供的数据提取标定的初始猜测。
  • 保存观测数据?将用于标定的观测值保存到标定工作区。

2.2 外参照相机-激光雷达标定

        相机-激光雷达标定包括估算给定相机传感器相对于给定激光雷达传感器的相对变换。标定是在一系列 2D-3D 点对应关系的帮助下,通过解决透视-点(P-n-P)问题来完成的。

图 1:在相机图像和激光雷达点云中检测到标定目标后的外参相机-激光雷达标定图形用户界面。其中,相机图像上标注了 ArUco 标记的角,探测到的目标结构在激光雷达点云中以黄色突出显示。

        启动后,将出现图 1 所示的图形用户界面。它由以下部分组成: - 控制窗口(A); - 摄像机图像中的目标检测视图(B); - 激光雷达云中的目标检测视图(C);以及 - 用于指导用户放置标定目标的对话框视图(D)(目前正在开发中)。

        标定节点可在相机图像中持续检测和跟踪 ArUco 标记,并在激光雷达云中选择标定目标的潜在候选对象。在此过程中,标记会被坐标系化,对于点云中的候选目标点,会显示相应的强度值。

        要执行外参标定,请按照以下步骤操作:

  1. 首先将标定目标放置在相机图像的中心,并与图像平面平行。将目标放置在与摄像机保持一定距离的位置,使其宽度约占图像宽度的一半。
  2. 确保在相机图像中检测到标记,并在激光雷达云中突出显示目标结构。
  3. 如果至少检测到 3 个标记,且目标结构突出显示,请单击按钮 1 “捕捉目标观测”,以在传感 器数据中对标定目标进行全面检测和精确估算,并将检测结果添加到观测列表中。完成后,相应的传感器数据将标注检测结果,如图 1 所示。其中
    1. 在相机图像上标注检测到的 ArUco 标记的边角(根据标记 ID 用彩虹色图标注)。
    2. 与检测到的标定目标相对应的激光雷达云点用黄色标出。此外,根据目标的估计姿态,ArUco 标记的角也会以与相机图像相同的配色方案绘制。
  4. 目测激光雷达云中标定目标的方位是否估算正确。这一点非常重要,因为 P-n-P 算法需要相机图像中的标记角与激光雷达云之间精确的 2D-3D 对应关系,才能估算出传感器的外参姿态。
  5. 如果方位估计不正确,或者激光雷达云中的错误结构被假定标记为标定目标,或者出现其他 故障,您可以点击按钮 2 “删除最后一个观测点”,从堆栈中删除最后一个观测点。此操作可重复多次,因为它始终会移除堆栈中最上面的观测值,直到没有观测值为止。
  6. 继续添加(6-7 个)不同姿态的标定目标,将其放置在堆栈的顶部和/或底部边缘。在每个位置,稍微向内旋转目标。理想情况下,将目标在图像空间中的 5 个位置上放置成 “+”形。如果不可能,则尽量将目标至少放置在 “L ”形的 3 个位置上,这样各位置就不会相交。
    1. 图像的顶部和/或底部边缘、
    2. 图像左侧和/或右侧边缘,以及
    3. 更远的位置。
  7. 每个位置重复步骤 2-5。
  8. 收集到足够多的标定目标的不同观测数据后,点击按钮 4 “标定 ”即可完成标定。这将进行最终标定,并打印出标定后的外参参数、总体平均重投影误差以及将目标位置从源传感器转换到参考传感器时的标准偏差。对于良好的最终标定,典型的平均重投影误差在 2-4 像素之间,平移(XYZ)标准偏差为 1-3 厘米,旋转(RPY)标准偏差为 0.1-1.5 度。
  9. 标定完成后
    1. 可视化当前标定"按钮 3。这将打开一个新的对话框,其中显示了激光雷达云在摄像机图像中的投影,并根据其与摄像机的距离进行了着色。因此,如果标定结果良好,那么激光雷达扫描中的结构(可从深度着色中得出)应与图像中的物体对齐。
    2. 标定结果以及 URDF 文件的片段会被写入标定工作区。可通过程序菜单 “文件”->“打开”->“标定工作区 ”直接打开包含结果文件的工作区文件夹。

        要调整运行时参数,例如检测标定目标或执行实际标定算法的算法参数,可以通过 “编辑” -> “首选项 ”打开 “rqt_reconfigure”。

2.3 外参激光雷达-激光雷达标定

        激光雷达-激光雷达标定包括估算给定源激光雷达传感器相对于给定参考激光雷达传感器的相对变换。标定是通过 GICP 将源传感器的云对准参考传感器的云来进行的,参考传感器的云中有标定目标的探测结果,而源传感器的云中有相同的观测结果。

图 2:在激光雷达扫描仪的数据中检测到标定目标后,进行外参激光雷达-激光雷达标定的图形用户界面。其中,探测到的目标结构在激光雷达点云中以黄色突出显示。

        启动后,将出现图 2 所示的图形用户界面。它由以下部分组成:- 控制窗口(A),- 源激光雷达云中的目标检测视图(B),- 参考激光雷达云中的目标检测视图(C),以及- 用于指导用户放置标定目标的对话框视图(D)(目前正在开发中)。

        标定节点在激光雷达云中不断选择潜在的标定目标候选点。在此过程中,点云中候选目标的点会显示出相应的强度值。

        要执行外参标定,请按照以下步骤操作:

  1. 首先将标定目标放置在需要标定外参姿态的传感器(即源传感器)前方,同时确保从参考传感器也能看到它。目标放置的距离应能很好地识别标定目标上的圆形切口。在这方面,一个经验法则是,如果可能,2-3 条扫描线应穿过或接触一个切口。
  2. 确保标定目标的结构在两个传感器的数据中都突出显示,即在窗口 B 和窗口 C 中。
  3. 如果目标结构在两个激光雷达扫描仪的数据中都突出显示,请单击按钮 1 “捕捉目标观测”,以触发传感器数据中标定目标的全面检测和精确估算,并将检测结果添加到观测列表中。完成后,相应的传感器数据将标注检测结果,如图 2 所示。其中,激光雷达云中与检测到的标定目标相对应的点用黄色标出。此外,根据目标的估计姿态,ArUco 标记的边角也会以与相机图像相同的颜色绘制。
  4. 目测激光雷达云中标定目标的方向是否估算正确。
  5. 如果方位估算不正确,或者将激光雷达云中的错误结构标注为标定目标,或者出现任何其他 故障,您可以点击按钮 2 “删除最后一个观测点”,从堆栈中删除最后一个观测点。此操作可重复多次,因为它始终会移除堆栈中最上面的观测值,直到没有观测值为止。
  6. 继续添加(3-5 个)不同姿态的标定目标,将其置于 在这种情况下,这些位置应构成 “L ”形,以便建立垂直和水平差异。确保这些位置不平行。在每个位置上,稍微向内转动目标。
    1. 在源传感器前的较高或较低位置。
    2. 在参考检查器前面,以及
    3. 更远的位置。
  7. 每个位置重复步骤 2-5。
  8. 当对标定目标进行了足够多的不同观测后,可点击按钮 4 “标定 ”完成标定。这将进行最终标定,并打印出标定后的外参参数、GICP 的总体均方根误差以及将目标位置从源传感器转换到参考传感器时的标准偏差。对于良好的最终标定,典型的均方根误差在 3-8 厘米之间,平移(XYZ)标准偏差为 0.5-5 厘米,旋转(RPY)标准偏差为 0.3-2 度。
  9. 标定完成后、
    1. 可视化标定 "按钮 3。这将打开一个新对话框,显示两个点云之间的点间距。其中,点间距以彩虹色图(红色 -> 黄色 -> 绿色 -> 蓝色 -> 紫色)显示。这意味着,如果标定结果良好,重叠区域的点间距应该较小,相应的点最好用红色突出显示。
    2. 标定结果以及 URDF 文件片段将被写入标定工作区。可通过程序菜单 “文件” -> “打开” -> “标定工作区 ”直接打开包含结果文件的工作区文件夹。

        要调整运行时参数,例如检测标定目标或执行实际标定算法的算法参数,可以通过 “编辑” -> “首选项 ”打开 “rqt_reconfigure”。

2.4 外参照相机参照标定

        照相机参照标定包括估算给定照相机传感器相对于参照物的相对变换。与照相机-激光雷达标定类似,变换的计算方法是借助一系列 2D-3D 点对应关系解决透视-n-点(P-n-P)问题。不过,可以通过提供 ArUco 标记左上角相对于给定坐标系 ID 的三维坐标来手动输入三维对应关系,而不是通过检测激光雷达数据中的标定目标来找到三维对应关系。

图 3:在照相机数据中检测到标定目标后进行外参照相机参照标定的图形用户界面。其中,摄像机图像上标注了 ArUco 标记的角。

        启动后,将出现图 3 所示的图形用户界面。它由以下部分组成: - 控制窗口(A); - 摄像机图像中的目标检测视图(B); - 表格视图(C),可输入左上角标记角的 XYZ 坐标;以及 - 用于指导用户放置标定目标的对话框视图(D)(目前正在开发中)。

        标定节点会持续检测和跟踪摄像机图像内的 ArUco 标记,并将 ArUco 标记坐标系化。

        要执行外参标定,请按照以下步骤操作:

  1. 首先将标定目标放置在摄像机图像的中心,并与图像平面平行。将目标放置在与摄像机保持一定距离的位置,使其宽度约占图像宽度的一半。
  2. 确保在摄像机图像中检测到标记。
  3. 如果至少检测到 3 个标记,请单击按钮 1 “捕捉目标观测”,以触发传感器数据中标定目标的全面检测和精确估算,并将检测结果添加到观测列表中。完成后,相应的传感器数据将标注检测结果,如图 3 所示。其中,摄像机图像将标注检测到的 ArUco 标记的边角(根据标记 ID 用彩虹色图标注)。
  4. 如果检测有误,您可以点击按钮 2 “移除最后一个观测点”,从堆栈中移除最后一个观测点。此操作可重复多次,因为它总是会移除堆栈中最上面的观测点,直到没有观测点为止。
  5. 继续添加(6-7 个)不同姿态的标定目标,将其放置在堆栈的顶部和/或底部边缘。在每个位置,稍微向内旋转目标。理想情况下,将目标在图像空间中的 5 个位置上放置成 “+”形。如果不可能,则尽量将目标至少放置在 “L ”形的 3 个位置上,这样各位置就不会相交。
    1. 图像的顶部和/或底部边缘、
    2. 图像左侧和/或右侧边缘,以及
    3. 更远的位置。
  6. 对于每个位置,重复步骤 2-4。
  7. 在摄像机图像中捕捉到所有目标姿势后,在相应的表格中填写左上角标记角的参考坐标,以及相应的目标姿势 ID 和相应的标记 ID。为此,假定观察到的目标姿态以连续的顺序输入,从 ID 1 开始。也就是说,第一个目标位置的 ID 为 1,第二个位置的 ID 为 2,以此类推。此外,每个目标姿势都有 4 个标记。您也可以在移动目标时连续输入参考坐标,但重要的是,只有在输入所有坐标后,才能在最后 “应用 ”一次观测结果。
  8. 收集到足够多的标定目标的不同观测数据,并输入和 “应用 ”左上角标记角的参考坐标后,点击按钮 4 “标定 ”即可完成标定。这将进行最终标定,并打印出标定后的外参参数、总体平均重投影误差以及将目标姿态从源传感器转换到参考传感器时的标准偏差。

        要调整运行时参数,例如检测标定目标或执行实际标定算法的算法参数,可以通过 “编辑” -> “偏好设置 ”打开 “rqt_reconfigure”。

2.5 外参激光雷达-参考标定

        标定是通过 GICP 将源传感器云(包含标定目标的探测结果)与参照传感器云(包含相同的观测结果)进行对齐。

        激光雷达-参照物标定包括估算给定源激光雷达传感器相对于参照物的相对变换。与激光雷达-激光雷达标定类似,变换的计算方法是通过 GICP 将源传感器的云对准参考数据,其中包含标定目标的检测数据。不过,可以通过提供 ArUco 标记左上角相对于给定坐标系 ID 的三维坐标,手动输入三维对应关系,而不是通过在参考激光雷达数据中检测标定目标来找到三维对应关系。

图 4:在相机数据中检测到标定目标后进行外参激光雷达参照标定的图形用户界面。其中,探测到的目标结构在激光雷达点云中以黄色突出显示。

        启动后,将出现图 4 所示的图形用户界面。它由以下部分组成: - 控制窗口(A); - 源激光雷达云中的目标检测视图(B); - 表格视图(C),可输入左上角标记角的 XYZ 坐标;以及 - 用于指导用户放置标定目标的对话框视图(D)(目前正在开发中)。

        标定节点会在激光雷达云中不断选择标定目标的潜在候选点。在此过程中,点云中候选目标的点会显示出相应的强度值。

        要执行外参标定,请按照以下步骤操作:

  1. 首先将标定目标放置在需要标定外参姿态的传感器(即源传感器)前方。目标放置的距离应使标定目标上的圆形切口能够很好地被识别。在这方面,一个经验法则是,如果可能,2-3 条扫描线应穿过或接触一个切口
  2. 确保标定目标的结构在传感器的数据中突出显示,即在窗口 B 中。
  3. 如果目标结构在激光雷达扫描仪的数据中突出显示,请单击按钮 1 “捕捉目标观测”,以在传感 器数据中对标定目标进行全面检测和精确估算,并将检测结果添加到观测列表中。完成后,相应的传感器数据将标注检测结果,如图 4 所示。其中,激光雷达云中与检测到的标定目标相对应的点用黄色标出。此外,根据目标的估计姿态,ArUco 标记的边角也会以与相机图像相同的配色方案绘制。
  4. 目测激光雷达云中标定目标的方向是否估算正确。
  5. 如果方位估算不正确,或者将激光雷达云中的错误结构标注为标定目标,或者出现任何其他 故障,您可以点击按钮 2 “删除最后一个观测点”,将最后一个观测点从堆栈中删除。此操作可重复多次,因为它始终会移除堆栈中最上面的观测值,直到没有观测值为止。
  6. 继续添加(3-5 个)不同姿态的标定目标,将其置于
    1. 在源传感器前面的较高或较低位置,以及
    2. 更远的位置。
    3. 在此过程中,这些位置应构成 “L ”形,以便建立垂直和水平差异。确保这些位置不平行。在每个位置,稍微向内转动目标。
  7. 每个位置重复步骤 2-5。
  8. 在摄像机图像中捕捉到所有目标姿态后,在相应表格中填写左上角标记角的参考坐标,以及相应的目标姿态 ID 和相应的标记 ID。为此,假定观察到的目标姿态以连续顺序输入,从 ID 1 开始。也就是说,第一个目标位置的 ID 为 1,第二个位置的 ID 为 2,以此类推。此外,每个目标姿势都有 4 个标记。您也可以在移动目标时连续输入参考坐标,但重要的是,只有在输入所有坐标后,才能在最后 “应用 ”一次观测结果。
  9. 收集到足够多的标定目标的不同观测数据后,点击按钮 4 “标定”即可完成标定。这将进行最终标定,并打印出标定后的外参参数、GICP 的总体均方根误差以及将目标姿势从源传感器转换到参考传感器时的标准偏差。

        要调整运行时参数,例如检测标定目标或执行实际标定算法的算法参数,可以通过 “编辑” -> “偏好设置 ”打开 “rqt_reconfigure”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/901778.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu利用docker搭建Java相关环境问题记录

Docker拉取镜像超时 报错 Unable to find image dpanel/dpanel:latest locally docker: Error response from daemon: Get "https://registry-1.docker.io/v2/ ": context deadline exceeded (Client.Timeout exceeded while awaiting headers)解决方式 在etc/do…

list的模拟实现和反向迭代器的底层

1&#xff1a;list的模拟实现 1&#xff1a;链表的节点 对于list的模拟实现&#xff0c;我们需要先定义一个节点的类可以使用&#xff08;class也可以使用struct&#xff09; // List的节点类 template<class T> struct ListNode {ListNode(const T& val T()){_p…

数据加载与保存

通用方式‌ SparkSQL提供了通用的数据加载方式&#xff0c;使用spark.read.loa方法&#xff0c;并可通过format指定数据类型&#xff08;如csv、jdbc、json、orc、parquet、textFile&#xff09;。 load方法后需传入数据路径&#xff08;针对csv、jdbc、json、orc、parquet、…

7 编译型语言、解释型语言与混合型语言的深度解析:以 C、Java、Python 为例

在编程领域&#xff0c;语言的执行方式是其设计哲学的核心体现&#xff0c;直接影响着性能、可移植性和开发效率。本文将深入剖析编译型语言&#xff08;以 C 语言为例&#xff09;、解释型语言&#xff08;以 Python 为例&#xff09;和混合型语言&#xff08;以 Java 为例&am…

Edge浏览器安卓版流畅度与广告拦截功能评测【不卡还净】

安卓设备上使用浏览器的体验&#xff0c;很大程度取决于两个方面。一个是滑动和页面切换时的反应速度&#xff0c;另一个是广告干扰的多少。Edge浏览器的安卓版本在这两方面的表现比较稳定&#xff0c;适合日常使用和内容浏览。 先看流畅度。Edge在中端和高端机型上启动速度快&…

智能云图库-12-DDD重构

本节重点​ 之前我们已经完成了本项目的功能开发。由于本项目功能丰富、代码量大&#xff0c;如果是在企业中维护开发的项目&#xff0c;传统的 MVC 架构可能会让后续的开发协作越来越困难。所以本节鱼皮要从 0 带大家学习一种新的架构设计模式 —— DDD 领域驱动设计。 大纲…

量子安全邮件系统 —— 邮件回溯密钥销毁机制

这里写目录标题 量子安全邮件系统 —— 邮件回溯密钥销毁机制一、项目背景与简介二、理论基础2.1 密钥销毁的重要性2.2 时间衰减与回溯销毁2.3 安全日志与报警机制三、系统架构设计3.1 模块划分3.2 系统架构图(Mermaid示意图)四、关键算法与实现流程4.1 密钥生成与存储4.2 邮…

个人博客系统后端 - 用户信息管理功能实现指南(上)

本文记录了如何实现用获取户信息&#xff0c;用户信息更新&#xff0c;用户头像上传三大基础功能 先上接口实现截图&#xff1a; 一、项目结构概览 先介绍一下 个人博客系统采用了标准的 Spring Boot 项目结构&#xff0c;用户功能相关的文件主要分布在以下几个目录&#xff1a…

趣味编程之分布式系统:负载均衡的“雨露均沾“艺术

#此篇文章由Deepseek大力支持&#x1f60b; 凌晨三点&#xff0c;西二旗某火锅店后厨—— “羊肉卷走3号桌&#xff01;” “肥牛卷去7号&#xff01;” “虾滑优先给VIP区&#xff01;” 我蹲在传菜口的监控屏幕前&#xff0c;看着机器人服务生们忙而不乱地穿梭。突然间&am…

Linux——信号(1)信号的产生

我们在讲进程的多种状态时提到过&#xff0c;一个进程的退出有三种情况&#xff1a;正常退出&#xff0c;结果出错退出&#xff08;代码也执行完了&#xff09;&#xff0c;异常终止退出&#xff08;代码未执行完&#xff09;&#xff0c;其中最后一种退出相当于进程在运行时&a…

LeetCode 2919 使数组变美的最小增量运算数

动态规划解题&#xff1a;最小操作次数使数组变为美丽数组 问题描述 给定一个下标从0开始、长度为n的整数数组nums和一个整数k。你可以对数组中的任意一个元素进行加1操作&#xff0c;操作次数不限。如果数组中任意长度大于或等于3的子数组的最大值都大于或等于k&#xff0c;…

计算生物学在中国的发展情况?

李升伟 整理 计算生物学在中国的发展呈现出多方面积极态势&#xff0c;具体表现如下&#xff1a; 发展概述&#xff1a; 上海发布了医用AI发展的专项方案&#xff0c;特别强调了脑科学与计算生物学的前沿领域。这表明政府有意推动该领域的技术进步和技术合作平台建设。国内的…

Linux之文件内容显示(cat、grep、cut、sort、uniq、tr)

&#x1f3af; 本文专栏&#xff1a;Linux &#x1f680; 作者主页&#xff1a;小度爱学习 1、浏览普通文件内容 命令常用选项说明cat-n 对输出内容中的所有行标注行号&#xff1b;-b 对输出内容中的非空行标注行号。查看文本文件的内容head-num 指定需要显示文件num行的内容。…

3DS 转 STL 全攻略:传统工具与迪威模型网在线转换深度解析

在 3D 建模与 3D 打印的技术领域中&#xff0c;常常会遇到需要将不同格式的文件进行转换的情况。其中&#xff0c;把 3DS 文件转换为 STL 格式是较为常见的操作。3DS 文件作为一种旧版 Autodesk 3D Studio 使用的 3D 图像格式&#xff0c;存储着丰富的信息&#xff0c;包括网格…

IoT FEM射频前端模组芯片(2.4G PA)三伍微电子GSR2401 兼容替代RFX2401

型号&#xff1a;GSR2401应用&#xff1a;适用于蓝牙&#xff08;BT&#xff09;、ZigBee及物联网&#xff08;IoT&#xff09;设备 功能&#xff1a;集成了功率放大器&#xff08;PA&#xff09;、开关&#xff08;Switch&#xff09;和低噪声放大器&#xff08;LNA&#xff…

Missashe考研日记-day22

Missashe考研日记-day22 1 专业课408 学习时间&#xff1a;3h学习内容&#xff1a; 先把昨天关于进程调度的课后习题做了&#xff0c;然后花了挺长时间预习OS的最最最最重要的一部分——同步与互斥问题&#xff0c;这部分大二上课的时候就懵懵懂懂的&#xff0c;得认真再领悟…

2025年最新Web安全(面试题)

活动发起人小虚竹 想对你说&#xff1a; 这是一个以写作博客为目的的创作活动&#xff0c;旨在鼓励大学生博主们挖掘自己的创作潜能&#xff0c;展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴&#xff0c;那么&#xff0c;快来参加吧&#xff01…

Qt QML - qmldir使用方法详解

以实际例子看qmldir的使用 1.搞一个qmldir2.让QML找到你的qmldir &#xff08;重点&#xff09;.pro 工程文件QQmlApplicationEngine加载主QML处 3.用起来你的模块 qmldir是Qt QML模块化的基石&#xff0c;其设计初衷是为解决QML文件的组织、复用和依赖管理问题,。只需要在每个…

# Shell脚本参数设计规范(DeepSeek指导)

Shell脚本参数设计规范&#xff08;DeepSeek指导&#xff09; 文章目录 Shell脚本参数设计规范&#xff08;DeepSeek指导&#xff09;A 我问&#xff1a;Q DeepSeek回答&#xff1a;**命令行参数表示规范****标准化表示示例**情况1&#xff1a;必选选项参数值情况2&#xff1a;…

MQTT协议:IoT通信的轻量级选手

文章总结&#xff08;帮你们节约时间&#xff09; MQTT协议是一种轻量级的发布/订阅通信协议。MQTT通信包括连接建立、订阅、发布和断开等过程。MQTT基于TCP/IP&#xff0c;其通信过程涉及多种控制包和数据包。ESP32S3可以通过MQTT协议接收消息来控制IO9引脚上的LED。 想象一…