noeperez / indires_navigation

ROS packages for ground robot navigation and exploration
BSD 3-Clause "New" or "Revised" License
121 stars 30 forks source link

Unable to make it work with turtlebot and rtabmap #5

Closed BruceCanovas closed 4 years ago

BruceCanovas commented 4 years ago

Hi,

I am currently trying to use your navigation system with a gazebo simulated turtlebot. I use rtabmap_ros to build the point cloud map but I am facing some issues.

I managed to build your system and launch the 3 different launch files. However I had to remove "set (CMAKE_BUILD_TYPE Debug)" and put "set (CMAKE_BUILD_TYPE Release)" instead in the CMakeLists.txt file of rrt_planners, otherwise it was crashing at runtime. It seems to be related to Boost issue and may only concern my configuration.

I followed the configuration guidelines you gave, replacing odom and base_footprint frame of the turtlebot where they are needed, as well as camera_depth_optical_frame frame and odom topic, but even after that I am unable to make it work properly. I edited the file "control_tester.py" too, replacing "g.header.frame_id = 'indires_rover/odom'" by "g.header.frame_id = 'odom'". I am able to send correct goals but the planner always generates really weird trees and the robot never reaches the goal. Instead of going to the waypoint I sent, it goes back home sometimes.

Here are some screenshots of generated rrt trees when trying to go to position (2, -2, 0) in odom frame. Capture du 2020-06-03 11-30-24

Capture du 2020-06-03 10-40-21

I would like to know if you managed to make it work successfully with rtabmap or if you have any clue about what happens in my case.

Thank you for your great work!

noeperez commented 4 years ago

Hi Bruce,

Firstly, thank you very much for the interest.

Secondly, yes, the system is a headache to properly fix all the parameters. That is one of the drawbacks of the system.

Currently, I am using the system with Rtabmap with good results. The problem is that there are a lot of parameters that must be fixed regarding the density of the input point cloud map (cloud_map of Rtabmap in this case).

My advice is that you should play first with all the filters' parameters that are launched by pcl_filters.launch. Take a look at the package and the configuration files .yaml that are launched. One instance of the node is launched to crop the cloud_map in a local area of the robot and downsample it by means of a voxel grid to use the resulting points as sampling space for the RRT* planner. Another node instance is employed to evaluate the transversability of the possible robot locations (try not to remove a lot of points if the input point cloud is not very dense). Another is used for exploration, and another for the local planner. All of them use the cloud_map as an input source. They are also publishing the filtered point clouds that are producing. You can visualize them in RViz, and use that information to try to fix the parameters accordingly.

You can also play with some configuration parameters in navigation_params.yaml (adapted_move_base package). In the section navigation_features_3d, indicate the correct robot radius (robot_circuns_radius), and try to play with the parameter min_points_allowed. It determines the minimum number of points that can be contained in the sphere of radius robot_circuns_radius in order to determine if the position can be evaluated or must be discarded because there is not enough information (points).

I hope this information can help you. Let me know if you are making any progress and do not hesitate to make any other questions.

Regards! Noé

El mié., 3 jun. 2020 a las 11:44, BruceCanovas (notifications@github.com) escribió:

Hi,

I am currently trying to use your navigation system with a gazebo simulated turtlebot. I use rtabmap_ros to build the point cloud map but I am facing some issues.

I managed to build your system and launch the 3 different launch files. However I had to remove "set (CMAKE_BUILD_TYPE Debug)" and put "set (CMAKE_BUILD_TYPE Release)" instead in the CMakeLists.txt file of rrt_planners, otherwise it was crashing at runtime. It seems to be related to Boost issue and may onlyconcerned to my configuration.

I followed the configuration guidelines you gave, replacing odom and base_footprint frame of the turtlebot where they are needed, as well as camera_depth_optical_frame frame and odom topic, but even after that I am unable to make it work properly. I edited the file "control_tester.py" too, replacing "g.header.frame_id = 'indires_rover/odom'" by "g.header.frame_id = 'odom'". I am able to send correct goals but the planner always generates really weird trees and the robot never reaches the goal. Instead of going to the waypoint I sent, it goes back home sometimes.

Here are some screenshots of generated rrt trees when trying to go to position (2, -2, 0) in odom frame. [image: Capture du 2020-06-03 11-30-24] https://user-images.githubusercontent.com/36501479/83620969-5ea48200-a58e-11ea-8e78-c5a43bad66ac.png

[image: Capture du 2020-06-03 10-40-21] https://user-images.githubusercontent.com/36501479/83620824-2a30c600-a58e-11ea-97cc-efb6da80927f.png

I would like to know if you managed to make it work successfully with rtabmap or if you have any clue about what happens in my case.

Thank you for your great work!

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/noeperez/indires_navigation/issues/5, or unsubscribe https://github.com/notifications/unsubscribe-auth/ADUK36DBF2G24OKRE7EYOSDRUYLQBANCNFSM4NRQAK6A .

-- NOE PEREZ HIGUERAS Postdoctoral Researcher - RoboticsLab Dept. Ingenieria de Sist. y Automatica Universidad Carlos III de Madrid c/ Butarque, 15 28911 Leganes, Madrid España - SPAIN

BruceCanovas commented 4 years ago

Hi Noé,

Thank you for your answer and advices. I finally solved my issue and after a lot of debugging I found out that the strange behaviour was due to a problem in the function RRT::Steering::simple3dSteer(). The line 224 was commented leaving the "else" condition empty. After uncommenting the line or removing the "else" the code works properly. I am really glad I can use it for my project.