introlab / rtabmap_ros

RTAB-Map's ROS package.
http://wiki.ros.org/rtabmap_ros
BSD 3-Clause "New" or "Revised" License
1.01k stars 558 forks source link

obstacle detection with oak-d cameras #809

Open samialperen opened 2 years ago

samialperen commented 2 years ago

Hi, I am trying to use rtabmap/obstacle_detection nodelet with oak-d cameras outdoors, but the performance is not great. How can I improve it? I tried to fine-tune some parameters, but it still did not help much.

Here is an example rosbag file: https://easyupload.io/u0ypqb

Here is the launch file that I am using

<launch>
    <!-- Parameters -->
    <arg name="use_rosbag"                  default="false"/> 

    <arg name="gen_cloud"                   default="true"/> <!-- Generate Point Cloud -->
    <arg name="gen_queue_size"              default="100"/>
    <arg name="gen_approx_sync"             default="false"/> > 
    <arg name="gen_decimation"              default="1"/>
    <arg name="gen_voxel_size"              default="0.00"/>
    <arg name="gen_min_depth"               default="1.2"/>
    <arg name="gen_max_depth"               default="0.0"/>
    <arg name="gen_noise_filter_radius"     default="0.1"/> <!-- play with noise filtering more-->
    <arg name="gen_noise_filter_min_neighbors" default="1000"/>
    <arg name="gen_normal_k"                default="0"/> <!-- check normal filtering-->
    <arg name="gen_normal_radius"           default="0.1"/>
    <arg name="gen_filter_nans"             default="true"/>
    <arg name="gen_roi_ratios"              default="0.0 0.0 0.0 0.0"/>

    <!-- Convert Compressed Depth to Depth (Only for rosbags)-->
    <param if="$(arg use_rosbag)" name="/use_sim_time" value="true"/>
    <node if="$(arg use_rosbag)" pkg="image_transport" type="republish" name="republish_depth" args="compressedDepth in:=/stereo_inertial_publisher/stereo/image raw out:=/stereo_inertial_publisher/stereo/image"/>

    <node pkg="nodelet" type="nodelet" name="oak_nodelet"  args="manager"/>
    <!--
    <node if="$(eval arg('gen_cloud') == true)" pkg="nodelet" type="nodelet" name="depth_image_to_pointcloud"
        args="load depth_image_proc/point_cloud_xyz oak_nodelet">
        <param name="queue_size"          value="100"/>
        <remap from="camera_info" to="/stereo_inertial_publisher/stereo/camera_info"/>
        <remap from="image_rect" to="/stereo_inertial_publisher/stereo/image"/>    
        <remap from="points" to="/oak/point_cloud"/>
    </node>
    -->
    <!-- Create Point Cloud from Depth -->

    <node if="$(arg gen_cloud)" pkg="nodelet" type="nodelet" name="gen_cloud_from_depth" args="load rtabmap_ros/point_cloud_xyz oak_nodelet">
        <remap from="depth/image"       to="/stereo_inertial_publisher/stereo/image"/> 
        <remap from="depth/camera_info" to="/stereo_inertial_publisher/stereo/camera_info"/>
        <remap from="cloud"             to="/oak/point_cloud" />

        <param name="queue_size"                type="int"    value="$(arg gen_queue_size)"/>
        <param name="approx_sync"               type="bool"   value="$(arg gen_approx_sync)"/>
        <param name="decimation"                type="double" value="$(arg gen_decimation)"/>
        <param name="voxel_size"                type="double" value="$(arg gen_voxel_size)"/>
        <param name="min_depth"                 type="double" value="$(arg gen_min_depth)"/>
        <param name="max_depth"                 type="double" value="$(arg gen_max_depth)"/>
        <param name="noise_filter_radius"       type="double" value="$(arg gen_noise_filter_radius)"/>
        <param name="noise_filter_min_radius"   type="int" value="$(arg gen_noise_filter_min_neighbors)"/>
        <param name="normal_k"                  type="int" value="$(arg gen_normal_k)"/>
        <param name="normal_radius"             type="double" value="$(arg gen_normal_radius)"/>
        <param name="filter_nans"               type="bool" value="$(arg gen_filter_nans)"/>
        <param name="roi_ratios"                type="string" value="$(arg gen_roi_ratios)"/>
    </node>

    <!-- Transforms -->
    <!--
    <node pkg="nodelet" type="nodelet" name="pointcloud_transformer" args="load transform_pointcloud/transformPointcloud oak_nodelet">
        <param name="to_frame" value="base_link"/>
        <remap from="~input_pcl2" to="/oak/point_cloud"/>
    </node>
    -->

    <!-- Create point cloud for the local planner -->
    <node pkg="nodelet" type="nodelet" name="obstacles_detection" args="load rtabmap_ros/obstacles_detection oak_nodelet">
        <!-- Input -->
        <remap from="cloud" to="/oak/point_cloud"/>
        <!-- Outputs -->
        <remap from="ground" to="/cassie/ground"/>
        <remap from="obstacles" to="/cassie/obstacles"/>

        <param name="frame_id" type="string" value="oak-d-base-frame"/> 
        <param name="queue_size" type="int" value="10"/>
        <param name="normal_estimation_radius" type="double" value="0.05"/>
        <param name="Grid/MaxGroundAngle" value="60"/> 
        <param name="min_cluster_size" type="int" value="100"/>
        <param name="max_obstacles_height" type="double" value="0.0"/>
        <!--
        <param name="Grid/ClusterRadius" type="double" value="0.1"/>
        <param name="Grid/MinClusterSize" type="int" value="20"/>
        <param name="Grid/MaxObstacleHeight" type="double" value="1.0"/>
        <param name="ground_normal_angle" type="double" value="$(eval 3.1415/4)"/>
        -->
    </node>
</launch>
matlabbe commented 2 years ago

performance is not great

The rosbag is not available anymore, post screenshots at minimum.