Dear Mathieu,
I'm trying to use rtabmap's rgbd_odometry on a bag file from OpenLoris Scene Dataset https://lifelong-robotic-vision.github.io/dataset/scene.html and I keep receive the following warning [ WARN] [1617208938.818289296, 1560004895.400903523]: /rtabmap/rtabmap: Did not receive data since 5 seconds! Make sure the input topics are published ("$ rostopic hz my_topic") and the timestamps in their header are set. If topics are coming from different computers, make sure the clocks of the computers are synchronized ("ntpdate"). Parameter "approx_sync" is false, which means that input topics should have all the exact timestamp for the callback to be called. I double checked the name topics from the bag file, I "played" with various values for the queue size but nothing changed, When I simply play the bag file, rostopic list seems to be ok: $ rostopic list /clock /d400/accel/imu_info /d400/accel/sample /d400/aligned_depth_to_color/camera_info /d400/aligned_depth_to_color/image_raw /d400/color/camera_info /d400/color/image_raw /d400/depth/camera_info /d400/depth/image_raw /d400/gyro/imu_info /d400/gyro/sample /d400/imu0 /gt /odom /rosout /rosout_agg /scan /t265/accel/imu_info /t265/accel/sample /t265/fisheye1/camera_info /t265/fisheye1/image_raw /t265/fisheye2/camera_info /t265/fisheye2/image_raw /t265/gyro/imu_info /t265/gyro/sample /tf_static I also checked if data are actually published while the bag is playing $ rostopic hz /d400/color/image_raw subscribed to [/d400/color/image_raw] WARNING: may be using simulated time no new messages no new messages no new messages average rate: 29.992 min: 0.030s max: 0.041s std dev: 0.00475s window: 24 average rate: 30.005 min: 0.030s max: 0.042s std dev: 0.00474s window: 54 average rate: 29.993 min: 0.030s max: 0.042s std dev: 0.00474s window: 84 average rate: 29.995 min: 0.030s max: 0.042s std dev: 0.00474s window: 114 average rate: 29.936 min: 0.030s max: 0.043s std dev: 0.00453s window: 144 I am trying to launch the rgbd_odomerty as following: roslaunch rtabmap_ros rtabmap.launch \ rtabmapviz:=true \ approx_sync:=true \ use_sim_time:=true \ visual_odometry:=true \ rgbd_odometry:=true \ depth:=true \ subscribe_depth:=true \ frame_id:=base_link \ camera_info_topic:=/d400/color/camera_info \ depth_camera_info_topic:=/d400/depth/camera_info \ rgb_topic:=/d400/color/image_raw \ depth_topic:=/d400/depth/image_raw \ queue_size:=30 \ args:="-d \ --Odom/Strategy 0 \ --Reg/Strategy 0 \ --Vis/FeatureType 8 \ --Kp/DetectorStrategy 8" One thing I noticed is that when using the $ rosrun tf view_frames, I only take the tf_static transform (which is a tf2 message, not timestamped) cafe1-1.pdf Any, advice? |
Administrator
|
Hi,
The camera_info is published only one time at the beginning. rtabmap is expecting camera_info published everytime an image is published. A workaround would be to do a node republishing the camera info: republish_camera_info.py #!/usr/bin/env python import rospy from sensor_msgs.msg import CameraInfo from sensor_msgs.msg import Image def callbackInfo(info): global camera_info_msg global sub_once global camera_info_set camera_info_msg = info camera_info_set = True sub_once.unregister() def callback(image): global publisher global camera_info_msg if camera_info_msg: camera_info_msg.header = image.header publisher.publish(camera_info_msg) if __name__ == "__main__": camera_info_set = False rospy.init_node("republish_camera_info", anonymous=True) publisher = rospy.Publisher("camera_info", CameraInfo, queue_size=1) rospy.Subscriber("image", Image, callback, queue_size=1) sub_once = rospy.Subscriber("camera_info", CameraInfo, callbackInfo, queue_size=1) rospy.spin() RGB-D example$ roslaunch rtabmap_ros rtabmap.launch \ rtabmapviz:=true \ approx_sync:=true \ use_sim_time:=true \ frame_id:=base_link \ camera_info_topic:=/d400/color/camera_info \ rgb_topic:=/d400/color/image_raw \ depth_topic:=/d400/aligned_depth_to_color/image_raw \ queue_size:=10 \ args:="-d \ --Odom/Strategy 0 \ --Reg/Strategy 0 \ --Vis/FeatureType 8 \ --Kp/DetectorStrategy 8" $ python republish_camera_info.py camera_info:=/d400/color/camera_info image:=/d400/color/image_raw $ rosbag play --clock --pause cafe1-1.bag // press space bar to start then wait till finished $ rosservice call /rtabmap/reset_odom $ rosbag play --clock --pause cafe1-2.bag Stereo Fisheye exampleNote: you should update to this commit to work:$ roslaunch rtabmap_ros rtabmap.launch \ rtabmapviz:=true \ approx_sync:=false \ use_sim_time:=true \ stereo:=true \ frame_id:=base_link \ left_camera_info_topic:=/t265/fisheye1/camera_info \ left_image_topic:=/t265/fisheye1/image_raw \ right_camera_info_topic:=/t265/fisheye2/camera_info \ right_image_topic:=/t265/fisheye2/image_raw \ queue_size:=10 \ args:="-d \ --Odom/Strategy 0 \ --Reg/Strategy 0 \ --Vis/FeatureType 8 \ --Kp/DetectorStrategy 8 \ --Rtabmap/ImagesAlreadyRectified false" $ python republish_camera_info.py camera_info:=/t265/fisheye1/camera_info image:=/t265/fisheye1/image_raw $ python republish_camera_info.py camera_info:=/t265/fisheye2/camera_info image:=/t265/fisheye2/image_raw $ rosbag play --clock --pause cafe1-1.bag // press space bar to start then wait till finished $ rosservice call /rtabmap/reset_odom $ rosbag play --clock --pause cafe1-2.bag Other configurations could be to include the scan and odom topics, I may do some examples another day. To use wheel odometry as input, you would have to make a node taking the odometry topic and publish the corresponding TF, then set visual_odometry to false in the commands above and set odom_topic agument to /odom. To subscribe to scan, set rgbd_sync to true and subscribe_scan to true, while setting scan_topic to /scan. With scan, you may also want to set Reg/Force3DoF=true, Reg/Strategy=1 and possibly RGBD/NeighborLinkRefining=true (see this example for more details). cheers, Mathieu |
Dear Mathieu,
thank you for your response. I used the script and it worked! Now, considering the IMU usage, I have some more questions... 1. Is it possible to use the VIO approaches with the rtabmap's rgbd odometry? I have build from source rtabmap_ros, do I have to do something more ? 2. My bag file, contains separate accel and gyro IMU msgs (and separate imu_info topics respectively). Is it possible to use them as separate topics? However, I used a python script for merging them in a single imu topic, though with out computing orientation quaternions, thus I receive an ERROR message that IMU received topic doesn't have orientation set. How can I solve this issue? 3. The separate IMU info topics are published only one time at the beginning. Do I have to merge them as well as the messages and also to republish them (as you did with the camera info topic)? Thank you in advance, Valia |
Administrator
|
Hi Valia, 1. Yes, theorically. The default rtabmap's odometry (F2M) uses the IMU in a loosely-coupled manner. For tightly-coupled VIO approaches, like OpenVINS or VINS_Fusion, you could use their package directly and use their output odometry for rtabmap node. 2. Use imu_filter_madgwick (or complementary_filter) on your merged topic, then use output of madgwick as input to rtabmap's nodes. 3. rtabmap's node don't use imu info topic. cheers, Mathieu |
Administrator
|
This post was updated on .
Here is an example using the 2D scan and wheel odometry:
2D scan and wheel odometryroslaunch rtabmap_ros rtabmap.launch \ rtabmapviz:=true \ approx_sync:=true \ use_sim_time:=true \ frame_id:=base_link \ camera_info_topic:=/d400/color/camera_info \ rgb_topic:=/d400/color/image_raw \ depth_topic:=/d400/aligned_depth_to_color/image_raw \ rgbd_sync:=true \ approx_rgbd_sync:=true \ subscribe_scan:=true \ visual_odometry:=false \ odom_topic:=/odom \ scan_topic:=/scan \ queue_size:=10 \ args:="-d \ --Reg/Strategy 1 \ --Reg/Force3DoF true \ --RGBD/NeighborLinkRefining true" python republish_camera_info.py camera_info:=/d400/color/camera_info image:=/d400/color/image_raw rosrun rtabmap_ros odom_msg_to_tf # launch with --pause to make sure tf_static topic is received by all nodes (to avoid some tf not defined errors) rosbag play --clock --pause cafe1-1.bag # wait till first trajectory is done, then trigger a new session rosservice call /rtabmap/trigger_new_map # start next trajectory rosbag play --clock --pause cafe1-2.bag 2D scan ICP Odometry using wheel odometry as guess# For best results, use rtabmap built from source with libpointmatcher support roslaunch rtabmap_ros rtabmap.launch \ rtabmapviz:=true \ approx_sync:=true \ use_sim_time:=true \ frame_id:=base_link \ camera_info_topic:=/d400/color/camera_info \ rgb_topic:=/d400/color/image_raw \ depth_topic:=/d400/aligned_depth_to_color/image_raw \ rgbd_sync:=true \ approx_rgbd_sync:=true \ subscribe_scan:=true \ visual_odometry:=false \ icp_odometry:=true \ odom_guess_frame_id:="base_odom" \ scan_topic:=/scan \ queue_size:=10 \ args:="-d \ --Reg/Strategy 1 \ --Reg/Force3DoF true" python republish_camera_info.py camera_info:=/d400/color/camera_info image:=/d400/color/image_raw rosrun rtabmap_ros odom_msg_to_tf # launch with --pause to make sure tf_static topic is received by all nodes (to avoid some tf not defined errors) rosbag play --clock --pause cafe1-1.bag # wait till first trajectory is done, then trigger a new session rosservice call /rtabmap/trigger_new_map # start next trajectory rosbag play --clock --pause cafe1-2.bag |
Free forum by Nabble | Edit this page |