使用d435跑通rtabmap

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>嗯,用户想找适合Intel RealSense D435i相机进行稠密点云的开源项目或SLAM框架。首先,我需要回想一下常见的SLAM框架中有哪些支持RGB-D相机,尤其是D435i这种设备。D435i既有RGB摄像头,又有深度传感器和IMU,所以应该考虑支持RGB-D和IMU融合的方案。 首先,ORB-SLAM系列可能是个不错的选择,特别是ORB-SLAM3,因为它支持多种传感器,包括RGB-D和IMU。我记得ORB-SLAM3在稠密上可能不是最突出的,但可以过结合其他库比如PCL来生成点云。然后,RTAB-Map也是一个支持RGB-D的SLAM方案,专注于实时外观模,可能更适合稠密的需求。另外,ElasticFusion虽然需要GPU加速,但能生成高精度的稠密点云,不过可能对硬件要求高一些。 还有Open3D,它虽然本身不是SLAM框架,但提供了点云处理和重的工具,可以和其他SLAM系统结合使用。Voxgraph可能适合需要全局一致性的场景,比如大范围。此外,Realsense的官方SDK也有例子,用户可以直接利用D435i的深度数据生成点云,这对快速实现可能很有帮助。 需要确认这些项目是否支持D435i的IMU数据,因为D435i的IMU可能需要在数据融合时进行校准和时间同步。另外,用户的应用场景是实时还是离线处理?如果是实时,可能需要考虑系统的计算效率。还有用户的技术背景,是否需要易于配置和使用的方案,比如RTAB-Map有ROS支持,可能更方便。 可能还需要推荐一些优化的方法,比如使用IMU进行位姿估计的优化,或者后处理中的回环检测和全局优化。最后,应该提到参考资源,比如ORB-SLAM3的论文和RTAB-Map的文档,帮助用户深入理解。</think>### 适合D435i的稠密点云开源方案 D435i是一款集成RGB-D相机和IMU的传感器,适合实时稠密。以下是推荐的方案和框架: #### 1. **RTAB-Map (Real-Time Appearance-Based Mapping)** - **特点**:专为RGB-D传感器设计,支持稠密点云重、闭环检测和多传感器融合(如IMU)。 - **适用性**:过ROS集成D435i的深度和IMU数据,可直接生成高精度稠密点云地[^1]。 - **代码示例(ROS启动命令)**: ```bash roslaunch rtabmap_ros rtabmap.launch rgb_topic:=/camera/color/image_raw depth_topic:=/camera/aligned_depth_to_color/image_raw camera_info_topic:=/camera/color/camera_info imu_topic:=/camera/imu ``` #### 2. **ORB-SLAM3(支持RGB-D+IMU)** - **特点**:支持单目、双目、RGB-D和IMU融合,具有高精度定位能力,可过点云后处理生成稠密地[^1][^2]。 - **扩展**:结合Open3D或PCL库对稀疏点云进行稠密化处理。 #### 3. **ElasticFusion** - **特点**:基于RGB-D的稠密SLAM框架,支持实时表面重和全局一致性优化,适合小规模场景的精细模。 - **要求**:需GPU加速(如CUDA)。 #### 4. **Open3D + RealSense SDK** - **特点**:使用Intel RealSense SDK直接获取深度数据,过Open3D实时生成和可视化点云。 - **代码示例(Python)**: ```python import open3d as o3d import pyrealsense2 as rs pipeline = rs.pipeline() config = rs.config() config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30) pipeline.start(config) try: while True: frames = pipeline.wait_for_frames() depth_frame = frames.get_depth_frame() depth_image = o3d.geometry.Image(np.array(depth_frame.get_data())) pcd = o3d.geometry.PointCloud.create_from_depth_image( depth_image, o3d.camera.PinholeCameraIntrinsic(o3d.camera.PinholeCameraIntrinsicParameters.PrimeSenseDefault)) o3d.visualization.draw_geometries([pcd]) finally: pipeline.stop() ``` #### 5. **Voxgraph(基于Voxblox)** - **特点**:专注于稠密体素地,支持TSDF(截断符号距离函数)融合,适合大场景--- ### 性能优化议 1. **IMU融合**:启用D435i的IMU数据,过滤波(如卡尔曼滤波)提升运动估计的鲁棒性。 2. **深度滤波**:使用RealSense SDK的`spatial_filter`和`temporal_filter`减少深度噪声。 3. **全局优化**:在RTAB-Map或Voxgraph中启用回环检测和位姿优化,提升地一致性[^2]。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值