Demo RTAB-Map on Turtlebot

classic Classic list List threaded Threaded
66 messages Options
1234
Reply | Threaded
Open this post in threaded view
|

Re: Demo RTAB-Map on Turtlebot

matlabbe
Administrator
Hi,

The big difference is that the octomap is prebuilt, then Monte-Carlo Localization is used to localize in the map using geometry in 3D. Note that the map used for localization is a 3D CAD (converted to octomap).

rtabmap localization is visual based (BOW) and navigation could work also while the octomap is creating.

cheers
Reply | Threaded
Open this post in threaded view
|

Re: Demo RTAB-Map on Turtlebot

Nick Hoo
Thank you for your reply.
“rtabmap localization is visual based (BOW) and navigation could work also while the octomap is creating.

I guess your meaning is that rtabmap usually does not  navigate on the octomap?
Reply | Threaded
Open this post in threaded view
|

Re: Demo RTAB-Map on Turtlebot

matlabbe
Administrator
No, it can navigate with the Octomap. The Octomap is aligned with the RTAB-Map's internal map.
Reply | Threaded
Open this post in threaded view
|

Re: Demo RTAB-Map on Turtlebot

Nick Hoo
Thank you. Next, I will do some experiment. When I have a problem, I will come back and ask you.
Reply | Threaded
Open this post in threaded view
|

Re: Demo RTAB-Map on Turtlebot

Nick Hoo
In reply to this post by matlabbe
Today, I do the experiment, the main purpose is to figure out the flow of data. There's a point that caught my attention. In rosgraph, I see the node /rtabmap/rtabmap publish /map topic.Because I think /map topic is closely related to navigation, I study the /map topic, the results I find that /map is remapping from the /grid_map.
I have some questions that I don't understand:
1.In Rviz display, there are Map option, Global Map option and Local Map option. I don't understand what they mean.
2.In Rviz display, if I change Map topic from /map to /ratbmap/octomap_proj, what does it mean?
3.Taking the above, can I control the topic where I choose in Global Map option in Rviz display. Whether I can control the topic in Rviz that I want to subscribe to.
4.I think that if I want to use octomap information, /move_base node should subscribe /rtabmap/octomap_proj topic,but /move_base node subscribe /map topic published from /rtabmap/rtabmap. So I think that I don’t use octomap instead of grid_map.
rosgraph.png

Reply | Threaded
Open this post in threaded view
|

Re: Demo RTAB-Map on Turtlebot

matlabbe
Administrator
Hi,

1. Global and local maps would be global and local costmap from move_base. These are maps created from /map (for global costmap) or current sensor readings (local costmap). See costmap_2d for more info.
2. You are now visualizing /rtabmap/octomap_proj instead of /map.
3. by selecting the topic subscribed to under the display item
4. If you want move_base to use /rtabmap/octomap_proj instead of /rtabmap/grid_map (alias /map), then update in the launch file where "grid_map" is remapped to /map and remap "octomap_proj" instead.

cheers
Reply | Threaded
Open this post in threaded view
|

Re: Demo RTAB-Map on Turtlebot

Nick Hoo
Thank you very much.
/rtabmap/octomap_proj topic is whether the octomap project to 2D. And I can't find that /map topic use /scan topic in source code.When I change /grid_map topic to /octomap_proj, move_base node can subscribe /rtabmap/octomap_proj(alias /map).But turtlebot reaction rate is very slow, if I want to work normally, what is the configuration of the computer.
PS:The source code is large for me, how can I read it?
Reply | Threaded
Open this post in threaded view
|

Re: Demo RTAB-Map on Turtlebot

matlabbe
Administrator
Hi,

Updating an octomap requires a lot more processing power than grid_map or proj_map. For your slow turtlebot reaction, it is more related to move_base configuration (local costmap and controller frequency) than the map created by rtabmap.

cheers
Reply | Threaded
Open this post in threaded view
|

Re: Demo RTAB-Map on Turtlebot

Nick Hoo
Hi
When I use Turtlebot2 to launch demo_turtlebot_mapping.launch file, my robot's configurations is Kinect+Odometry+Fake 2D laser from Kinect。
But I want to put my robot into Kinect+Odometry,and I want to create with rtabmap node with proj_map topic a 2D occupancy grid map from the projection of the Kinect. How do I modify the demo_turtlebot_mapping.launch file.
Reply | Threaded
Open this post in threaded view
|

Re: Demo RTAB-Map on Turtlebot

matlabbe
Administrator
This post was updated on .
Hi,

In demo_turtlebot_mapping.launch:
- Set all "subscribe_scan" to false. This is optional though, you can keep the laser scan if you want.
- Change these lines:
<remap from="proj_map" to="/map"/> <!-- use projection map, use "grid_map" for version > 0.11.8 -->
<param name="Reg/Strategy" type="string" value="0"/> <!-- laser scan not used anymore for registration -->
<param name="Vis/MinInliers" type="string" value="20"/> <!-- default is 20 -->
<param name="Grid/FromDepth" type="string" value="true"/> <!-- For version > 0.11.8 only: Not required if subscribe_scan is false -->

cheers
Reply | Threaded
Open this post in threaded view
|

Re: Demo RTAB-Map on Turtlebot

Nick Hoo
Thank you very much!
When I launch the demo_turtlebot_mapping.launch, there are some warns. I don't know whether it can ignore.
And I don't understand that [ WARN] [1477274203.224327171]: /proj_map topic is deprecated! Subscribe to /grid_map topic instead.I need /proj_map,why is the topic deprecated?


Reply | Threaded
Open this post in threaded view
|

Re: Demo RTAB-Map on Turtlebot

matlabbe
Administrator
Hi,

These warnings can be ignored, default parameters are used instead (which work in most cases). Those referring to rtabmap.cpp are more informative logs for convenience than actual warnings that should be addressed.

In versions over 0.11.8, /proj_map and /grid_map give exactly the same output. We will keep only /grid_map in the future, which means the general occupancy grid map output. To determine if it is constructed from laser scans or cloud projection, the parameters have been moved to RTAB-Map's library:
rosrun rtabmap_ros rtabmap --params | grep Grid/
Param: Grid/3D = "true"                                    [A 3D occupancy grid is required if you want an Octomap. Set to false if you want only a 2D map, the cloud will be projected on xy plane. A 2D map can be still generated if checked, but it requires more memory and time to generate it. Ignored if laser scan is 2D and "Grid/FromDepth" is false.]
Param: Grid/3DGroundIsObstacle = "false"                   [[Grid/3D=true] Ground is an obstacle. Use this only if you want an Octomap with ground identified as an obstacle (e.g., with an UAV).]
Param: Grid/CellSize = "0.05"                              [Resolution of the occupancy grid.]
Param: Grid/ClusterRadius = "0.1"                          [[Grid/NormalsSegmentation=true] Cluster maximum radius.]
Param: Grid/DepthDecimation = "4"                          [[Grid/DepthDecimation=true] Decimation of the depth image before creating cloud.]
Param: Grid/DepthMax = "4.0"                               [[Grid/DepthDecimation=true] Maximum cloud's depth from sensor. 0=inf.]
Param: Grid/DepthMin = "0.0"                               [[Grid/DepthDecimation=true] Minimum cloud's depth from sensor.]
Param: Grid/DepthRoiRatios = "0.0 0.0 0.0 0.0"             [[Grid/DepthDecimation=true] Region of interest ratios [left, right, top, bottom].]
Param: Grid/FlatObstacleDetected = "true"                  [[Grid/NormalsSegmentation=true] Flat obstacles detected.]
Param: Grid/FootprintHeight = "0.0"                        [Footprint height used to filter points over the footprint of the robot. Footprint length and width should be set.]
Param: Grid/FootprintLength = "0.0"                        [Footprint length used to filter points over the footprint of the robot.]
Param: Grid/FootprintWidth = "0.0"                         [Footprint width used to filter points over the footprint of the robot. Footprint length should be set.]
Param: Grid/FromDepth = "true"                             [Create occupancy grid from depth image(s), otherwise it is created from laser scan.]
Param: Grid/MapFrameProjection = "false"                   [Projection in map frame. On a 3D terrain and a fixed local camera transform (the cloud is created relative to ground), you may want to disable this to do the projection in robot frame instead.]
Param: Grid/MaxGroundAngle = "45"                          [[Grid/NormalsSegmentation=true] Maximum angle (degrees) between point's normal to ground's normal to label it as ground. Points with higher angle difference are considered as obstacles.]
Param: Grid/MaxGroundHeight = "0.0"                        [Maximum ground height (0=disabled). Should be set if "Grid/NormalsSegmentation" is true.]
Param: Grid/MaxObstacleHeight = "0.0"                      [Maximum obstacles height (0=disabled).]
Param: Grid/MinClusterSize = "10"                          [[Grid/NormalsSegmentation=true] Minimum cluster size to project the points.]
Param: Grid/MinGroundHeight = "0.0"                        [Minimum ground height (0=disabled).]
Param: Grid/NoiseFilteringMinNeighbors = "5"               [Noise filtering minimum neighbors.]
Param: Grid/NoiseFilteringRadius = "0.0"                   [Noise filtering radius (0=disabled). Done after segmentation.]
Param: Grid/NormalK = "10"                                 [[Grid/NormalsSegmentation=true] K neighbors to compute normals.]
Param: Grid/NormalsSegmentation = "true"                   [Segment ground from obstacles using point normals, otherwise a fast passthrough is used.]
Param: Grid/Scan2dMaxFilledRange = "4.0"                   [Unknown space filled maximum range. If 0, the laser scan maximum range is used.]
Param: Grid/Scan2dUnknownSpaceFilled = "false"             [Unknown space filled. Only used with 2D laser scans.]
Param: Grid/ScanDecimation = "1"                           [[Grid/DepthDecimation=false] Decimation of the laser scan before creating cloud.]
Note that for convenience, if subscribe_scan is true, /grid_map will be created from laser scans if "Grid/FromDepth" parameter is not explicitly set (i.e., "Grid/FromDepth" is set to false by default if subscribe_scan is true).

cheers
Reply | Threaded
Open this post in threaded view
|

Re: Demo RTAB-Map on Turtlebot

Nick Hoo
Thank you very much.
matlabbe wrote
Param: Grid/3D = "true"                                    [A 3D occupancy grid is required if you want an Octomap. Set to false if you want only a 2D map, the cloud will be projected on xy plane. A 2D map can be still generated if checked, but it requires more memory and time to generate it. Ignored if laser scan is 2D and "Grid/FromDepth" is false.]
Two questions.
Firstly, 3D occupancy grid map's data structure is or not octomap_msgs/Octomap. Whether the  octomap_msgs/Octomap data structure is similar to nav_msgs/OccupancyGrid.
Finally, if Turtlebot2 want to use 3D occupancy grid map, whether it needs to downprojected 2D occupancy map from the 3D occupancy grid map. Or it can use the 3D occupancy grid map directly.
Reply | Threaded
Open this post in threaded view
|

Re: Demo RTAB-Map on Turtlebot

matlabbe
Administrator
Hi,

I answered it here.

cheers
Reply | Threaded
Open this post in threaded view
|

Re: Demo RTAB-Map on Turtlebot

Nick Hoo
I got it. Thank you very much. You are very nice and helpful.
Reply | Threaded
Open this post in threaded view
|

Re: Demo RTAB-Map on Turtlebot

Nick Hoo
In reply to this post by matlabbe
When the robot work in Kinect+Odometry,how the turtlebot2 determines its pose?
Reply | Threaded
Open this post in threaded view
|

Re: Demo RTAB-Map on Turtlebot

matlabbe
Administrator
Turtlebot2 should have odometry already computed from its wheel encoders.
Reply | Threaded
Open this post in threaded view
|

Re: Demo RTAB-Map on Turtlebot

Nick Hoo
Thanks for you helping.
That is to say, determining the pose of turtlebot2 is only relying on odometry that computed from its wheel encoders, not using visual odometry that computed from kinect.
Reply | Threaded
Open this post in threaded view
|

Re: Demo RTAB-Map on Turtlebot

Nick Hoo
In reply to this post by matlabbe
My classmates encountered the problem of installing rtabmap. His computer has NVIDIA GTX750.
Dependencies and errors are as follows.



Reply | Threaded
Open this post in threaded view
|

Re: Demo RTAB-Map on Turtlebot

matlabbe
Administrator
Hi,

The OpenCL version used by libfreenect2 may not be the same as the one linked by rtabmap. Make sure you have this commit: https://github.com/introlab/rtabmap/commit/f07bb17442df3cefaa95c28096e13b1a636e29e3

You can do "$ make VERBOSE=1" to see all link directories used.

cheers,
Mathieu
1234