使用d435跑通rtabmap

这篇博客详细介绍了如何在ROS中通过Realsense相机和rtabmap包实现深度图像配准,并展示了如何创建、运行rtabmap节点,以及如何查看和操作生成的地图数据库。它涵盖了关键步骤,如配置参数和使用服务调用进行定位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Ps:已安装好realsense驱动和rtabmap的ROS版本
使用以下命令:

roslaunch realsense2_camera rs_camera.launch align_depth:=true
roslaunch rtabmap_ros rtabmap.launch rtabmap_args:="--delete_db_on_start --Optimizer/GravitySigma 0.3" depth_topic:=/camera/aligned_depth_to_color/image_raw rgb_topic:=/camera/color/image_raw camera_info_topic:=/camera/color/camera_info approx_sync:=false

或者,建立并运行rs_rtabmap_d435.launch:

<launch>
    <!-- 
          NOTICE: Installation of rtabmap is required for using this launch file:
                  For installation type:
                        apt-get install ros-kinetic-rtabmap-ros
    -->
  <arg name="serial_no"           default=""/>
  <arg name="json_file_path"      default=""/>
  <arg name="camera"              default="camera"/>
  <arg name="tf_prefix"           default="$(arg camera)"/>
  <arg name="external_manager"    default="false"/>
  <arg name="manager"             default="realsense2_camera_manager"/>

  <arg name="fisheye_width"       default="640"/>
  <arg name="fisheye_height"      default="480"/>
  <arg name="enable_fisheye"      default="false"/>

  <arg name="depth_width"         default="640"/>
  <arg name="depth_height"        default="480"/>
  <arg name="enable_depth"        default="true"/>

  <arg name="infra_width"        default="640"/>
  <arg name="infra_height"       default="480"/>
  <arg name="enable_infra1"       default="true"/>
  <arg name="enable_infra2"       default="true"/>

  <arg name="color_width"         default="640"/>
  <arg name="color_height"        default="480"/>
  <arg name="enable_color"        default="true"/>

  <arg name="fisheye_fps"         default="30"/>
  <arg name="depth_fps"           default="30"/>
  <arg name="infra_fps"           default="30"/>
  <arg name="color_fps"           default="30"/>
  <arg name="gyro_fps"            default="400"/>
  <arg name="accel_fps"           default="250"/>
  <arg name="enable_gyro"         default="true"/>
  <arg name="enable_accel"        default="true"/>

  <arg name="enable_pointcloud"         default="false"/>
  <arg name="pointcloud_texture_stream" default="RS2_STREAM_COLOR"/>
  <arg name="pointcloud_texture_index"  default="0"/>

  <arg name="enable_sync"               default="false"/>
  <arg name="align_depth"               default="true"/>

  <arg name="filters"                   default="pointcloud"/>
  <arg name="clip_distance"             default="-2"/>
  <arg name="linear_accel_cov"          default="0.01"/>
  <arg name="initial_reset"             default="false"/>
  <arg name="unite_imu_method"          default=""/>
  <arg name="topic_odom_in"             default="odom_in"/>
  <arg name="calib_odom_file"           default=""/>
  <arg name="publish_odom_tf"           default="true"/>
  <arg name="allow_no_texture_points"   default="false"/>

  <group ns="$(arg camera)">
    <include file="$(find realsense2_camera)/launch/includes/nodelet.launch.xml">
      <arg name="tf_prefix"                value="$(arg tf_prefix)"/>
      <arg name="external_manager"         value="$(arg external_manager)"/>
      <arg name="manager"                  value="$(arg manager)"/>
      <arg name="serial_no"                value="$(arg serial_no)"/>
      <arg name="json_file_path"           value="$(arg json_file_path)"/>

      <arg name="enable_pointcloud"        value="$(arg enable_pointcloud)"/>
      <arg name="pointcloud_texture_stream" value="$(arg pointcloud_texture_stream)"/>
      <arg name="pointcloud_texture_index"  value="$(arg pointcloud_texture_index)"/>
      <arg name="enable_sync"              value="$(arg enable_sync)"/>
      <arg name="align_depth"              value="$(arg align_depth)"/>

      <arg name="fisheye_width"            value="$(arg fisheye_width)"/>
      <arg name="fisheye_height"           value="$(arg fisheye_height)"/>
      <arg name="enable_fisheye"           value="$(arg enable_fisheye)"/>

      <arg name="depth_width"              value="$(arg depth_width)"/>
      <arg name="depth_height"             value="$(arg depth_height)"/>
      <arg name="enable_depth"             value="$(arg enable_depth)"/>

      <arg name="color_width"              value="$(arg color_width)"/>
      <arg name="color_height"             value="$(arg color_height)"/>
      <arg name="enable_color"             value="$(arg enable_color)"/>

      <arg name="infra_width"              value="$(arg infra_width)"/>
      <arg name="infra_height"             value="$(arg infra_height)"/>
      <arg name="enable_infra1"            value="$(arg enable_infra1)"/>
      <arg name="enable_infra2"            value="$(arg enable_infra2)"/>

      <arg name="fisheye_fps"              value="$(arg fisheye_fps)"/>
      <arg name="depth_fps"                value="$(arg depth_fps)"/>
      <arg name="infra_fps"                value="$(arg infra_fps)"/>
      <arg name="color_fps"                value="$(arg color_fps)"/>
      <arg name="gyro_fps"                 value="$(arg gyro_fps)"/>
      <arg name="accel_fps"                value="$(arg accel_fps)"/>
      <arg name="enable_gyro"              value="$(arg enable_gyro)"/>
      <arg name="enable_accel"             value="$(arg enable_accel)"/>

      <arg name="filters"                  value="$(arg filters)"/>
      <arg name="clip_distance"            value="$(arg clip_distance)"/>
      <arg name="linear_accel_cov"         value="$(arg linear_accel_cov)"/>
      <arg name="initial_reset"            value="$(arg initial_reset)"/>
      <arg name="unite_imu_method"         value="$(arg unite_imu_method)"/>
      <arg name="topic_odom_in"            value="$(arg topic_odom_in)"/>
      <arg name="calib_odom_file"          value="$(arg calib_odom_file)"/>
      <arg name="publish_odom_tf"          value="$(arg publish_odom_tf)"/>
      <arg name="allow_no_texture_points"  value="$(arg allow_no_texture_points)"/>
    </include>
  </group>


    <include file="$(find rtabmap_ros)/launch/rtabmap.launch">
            <arg name="rtabmap_args"       value="--delete_db_on_start"/>
            <arg name="depth_topic"        value="/$(arg camera)/aligned_depth_to_color/image_raw"/>
            <arg name="frame_id"           value="$(arg camera)_link"/>
            <!--<arg name="visual_odometry"    value="false"/> -->
            <arg name="odom_topic"         value="odom"/>
            <arg name="rgb_topic"          value="/$(arg camera)/color/image_raw"/>
            <arg name="camera_info_topic"  value="/$(arg camera)/color/camera_info"/>
            <arg name="queue_size"         value="200"/>
            <arg name="rviz"               value="true"/>
            <arg name="rtabmapviz"         value="true"/>
    </include>
</launch>

运行结果:
在这里插入图片描述
在这里插入图片描述
地图数据保存在 ~/.ros/rtabmap.db,可利用databaseViewer工具查看数据库:

$ rtabmap-databaseViewer ~/.ros/rtabmap.db

note: 重置内存/删除缓存:rosservice call /rtabmap/reset

浏览缓存:rtabmap-databaseViewer ~/.ros/rtabmap.db

定位模式:
a. rosservice call /rtabmap/reset_odom

b. roslaunch rtabmap_ros rtabmap.launch localization:=true

<think>首先,用户的问题是:"rtabmap-databaseViewer error file is not a database when opening 1.ply"。这表示用户试使用rtabmap-databaseViewer打开一个名为1.ply的文件,但遇到了错误,提示该文件不是一个数据库。 根据系统级指令,我需要: - 使用$...$格式行内数学表达式(尽管这里可能没有数学表达式)。 - 独立公式用$$...$$。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 在回答中引用的段落末尾自然地添加引用标识,如[^1]。 - 回答结构清晰,帮助用户逐步解决问题。 - 参考站内引用(提供的引用是关于rtabmap的)。 提供的引用: - [^1]: 提到rtabmap库版本和rtabmap_ros版本不一致的问题。 - [^2]: 共享库错误,如找不到librtabmap_gui.so。 - [^3]: 在ROS下使用kinect v2进行RTABMAP- [^4]: 安装rtabmap和依赖,包括ROS包。 - [^5]: 使用d435rtabmap的命令。 用户的问题是关于rtabmap-databaseViewer打开.ply文件时出错。rtabmap-databaseViewer是用于查看rtabmap数据库文件的工具。rtabmap数据库常保存为.db文件,而不是.ply文件。.ply文件是Polygon File Format,用于存储3D模型,常用于点云数据。 所以,错误"file is not a database"表明用户可能误解了工具的使用方式。rtabmap-databaseViewer期望一个数据库文件(如.db),但用户提供了一个.ply文件。 可能的解决方案: 1. **理解文件类型**:解释rtabmap-databaseViewer只能打开数据库文件(如.db),而.ply文件是点云格式。用户可能需要使用其他工具来查看.ply文件,或者将.ply文件转换为数据库格式。 2. **转换文件**:如果用户想用rtabmap-databaseViewer查看.ply文件,可能需要先将其转换为rtabmap数据库格式。rtabmap可能有工具或方法来导入点云数据。 3. **检查文件路径**:确保文件路径正确,文件存在且可读。 4. **版本问题**:参考引用[^1],版本不一致可能导致问题,但这里错误是文件类型不匹配,所以可能不是主要原因。 5. **其他工具**:使用其他工具查看.ply文件,如MeshLab、CloudCompare等。 回答结构: - **步骤1:确认问题**:解释错误原因。 - **步骤2:解决方案**:提供如何正确使用rtabmap-databaseViewer的议。 - **步骤3:替代方案**:使用其他工具查看.ply文件。 - **步骤4:生成相关问题**:在结尾添加相关问题。 生成相关问题: 1. 如何将.ply文件转换为rtabmap数据库格式? 2. 如何使用rtabmap-databaseViewer打开.db文件? 3. 有哪些其他工具可以查看.ply文件? 引用参考:虽然引用中提到了rtabmap的问题,但用户的具体错误是文件类型不匹配。所以,我可以引用[^1]或[^4]来支持rtabmap工具的使用。 最终回答: - 用中文。 - 结构清晰。 - 添加引用标识。</think>### 问题分析:rtabmap-databaseViewer 错误 "file is not a database" 您在使用 `rtabmap-databaseViewer` 打开 `1.ply` 文件时遇到的错误 "file is not a database",是因为 `rtabmap-databaseViewer` 是专门用于查看 **rtabmap 数据库文件**(常以 `.db` 为扩展名)的工具,而 `.ply` 文件是一种独立的点云或网格数据格式(Polygon File Format),与数据库格式不兼容。rtabmap 数据库文件存储的是 SLAM 过程中的地、关键帧和传感器数据,而 `.ply` 文件只包含静态的 3D 模型信息,无法被数据库查看器直接识别[^1][^4]。 ### 逐步解决方案 以下是解决此问题的步骤,帮助您正确查看文件: #### 步骤 1: **确认文件类型和工具用途** - **rtabmap-databaseViewer 只支持 `.db` 文件**:该工具设计用于分析 rtabmap 生成的数据库,例如查看轨迹、关键点和优化结果。如果您有 `.db` 文件,请直接使用: ```bash rtabmap-databaseViewer ~/.ros/rtabmap.db # 示例路径,替换为您的实际路径 ``` 如果您的文件是 `.ply`,说明它不是数据库文件。 - **.ply 文件的正确查看方式**:`.ply` 文件是点云或网格数据(如 Kinect 或 D435 相机生成的 3D 模型),需要使用专用工具查看,而不是数据库查看器。常见工具包括: - **MeshLab**:免费开源,支持点云可视化。 - **CloudCompare**:专用于点云处理。 - **ROS 工具**:在 ROS 环境中,您可以使用 `pcl_viewer` 或 RViz 查看 `.ply` 文件。 #### 步骤 2: **转换文件格式(可选)** 如果您想将 `.ply` 文件导入 rtabmap 数据库以使用 `rtabmap-databaseViewer`,需要先进行格式转换。以下是方法: - **使用 rtabmap 命令行工具转换**:rtabmap 提供了导入点云的功能。假设您的 `.ply` 文件是点云数据,执行: ```bash rtabmap --import 1.ply --output output.db # 将 .ply 导入为 .db 文件 rtabmap-databaseViewer output.db # 打开转换后的数据库 ``` 注意:此命令要求 rtabmap 版本支持点云导入(推荐使用最新版本)。如果转换失败,请检查 `.ply` 文件是否损坏或格式错误(例如,使用 `file 1.ply` 命令验证)。 - **替代转换方法**:如果 rtabmap 转换无效,可使用其他工具: - **CloudCompare**:打开 `.ply` 文件后导出为 `.pcd` 格式,然后过 ROS 节点导入 rtabmap- **ROS 工具链**:在 ROS 中,使用 `pcl_ply2pcd` 将 `.ply` 转换为 `.pcd`,再rtabmap 节点处理。 #### 步骤 3: **检查环境和版本问题** 如果上述步骤无效,可能涉及环境配置或版本冲突(常见于 ROS 和 rtabmap 集成): - **版本一致性**:确保 rtabmap 库和 `rtabmap_ros` 版本一致。例如,引用中提到的版本不一致会导致工具异常[^1]。更新所有组件: ```bash sudo apt update sudo apt install ros-$ROS_DISTRO-rtabmap ros-$ROS_DISTRO-rtabmap-ros # 替换 $ROS_DISTRO 为您的 ROS 版本(如 noetic) ``` - **共享库错误**:如果提示 "error while loading shared libraries"(如引用[^2]),运行: ```bash sudo ldconfig # 刷新共享库缓存 ``` - **文件权限和路径**:确保 `1.ply` 文件可读: ```bash chmod +r 1.ply # 添加读取权限 ``` #### 步骤 4: **测试正确的工作流** 为避免类似错误,参考标准 rtabmap 流程(如引用[^5]),确保生成正确的 `.db` 文件: 1. 启动相机和 rtabmap(示例使用 D435): ```bash roslaunch realsense2_camera rs_camera.launch align_depth:=true roslaunch rtabmap_ros rtabmap.launch rtabmap_args:="--delete_db_on_start" depth_topic:=/camera/aligned_depth_to_color/image_raw rgb_topic:=/camera/color/image_raw ``` 2. 结束后,数据库文件默认保存在 `~/.ros/rtabmap.db`,使用 `rtabmap-databaseViewer` 打开它。 ### 总结 - **核心问题**:`.ply` 文件不是数据库格式,无法被 `rtabmap-databaseViewer` 直接打开。请使用 MeshLab 或 CloudCompare 查看 `.ply` 文件,或先将其转换为 `.db` 格式。 - **推荐操作**:优先转换文件或检查 rtabmap 版本。如果问题持续,提供更多细节(如 rtabmap 版本和文件内容)以便进一步诊断[^1][^4]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值