which part of the code odom frame concept is written?

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

which part of the code odom frame concept is written?

ymkim
hi
now i'm studying on visual slam like orb slam and rtabmap etc..

nowadays i had a difficult to understand the concept difference between odom frame and map frame.
i finally understood about that, but sad to say, i can't to find it on code.

i was trying to find it on ORB-SLAM2 open source code, but i think that the creator didn't use odom frame concept.

but in rtabmap, i think you already made odom frame though i use ORB SLAM2.

can you let me know which part is written about define odom frame?

i will really help us to understand the concept.


thanks.
Reply | Threaded
Open this post in threaded view
|

Re: which part of the code odom frame concept is written?

matlabbe
Administrator
Hi,

In ORB_SLAM2 original package, I think it publishes the pose directly in /map frame (/map -> /base_link), there is no /odom frame. In rtabmap, we follow the convention of REP105. /odom -> /base_link represents the pose computed by a frame-to-frame visual odometry for example. /map -> /odom represents the correction of odometry pose when a loop closure is detected and closed. To get the actual pose in the map frame, we should get /map -> /odom -> /base_link from TF.

For the code, /odom -> /base_link TF is published here. /map -> /odom is published here.

cheers,
Mathieu
Reply | Threaded
Open this post in threaded view
|

Re: which part of the code odom frame concept is written?

ymkim
wow thank you for your reply.

i also have one more question.

do you have any idea to get Odometry(not including loopclosing) on ORB SLAM2?

you already made a frame coordinate using ORB SLAM2, so i think you might have a solution.

i think that i will accumulate diff( = current frame pose - last frame pose), but failed.
when i get it, it always incudes pose which is including loopclosing

please save my life :)
Reply | Threaded
Open this post in threaded view
|

Re: which part of the code odom frame concept is written?

matlabbe
Administrator
Hi,

Look at this file. We disabled loop closure and commented all rendering stuff. We also added some management to remove points in ORB_SLAM2's map that are not used anymore by the tracking thread. There is still a memory leak issue stated in "RTAB-Map as an Open-Source Lidar and Visual SLAM Library for Large-Scale and Long-Term Online Operation" (section 3.1.1):
ORB-SLAM2 is a full SLAM approach, thus to integrate in RTABMap,
loop closure detection inside ORB-SLAM2 is disabled. Local bundle adjustment of ORB-SLAM2 is
still working, which makes the modified module similar to F2M. The big difference is the kind of features
extracted (ORB [Rublee et al., 2011]) and how they are matched together (direct descriptor comparison
instead of NNDR). Similarly to F2M, the size of the feature map is limited so that constant time visual
odometry can be achieved (without limiting the feature map size, ORB-SLAM2 computation time increases
over time). As ORB-SLAM2 has not been designed (at least in the code available at the time of writing
this paper) to remove or forget features in its map, memory is not freed when features are removed, which
results in an increasing RAM usage over time (a.k.a. memory leak).
You can try rtabmap_ros/rgbd_odometry or rtabmap_ros/stereo_odometry nodes in ORB_SLAM2 odometry mode by setting parameter Odom/Strategy=5:
<node pkg="rtabmap_ros" type="rgbd_odometry" name="rgd_odometry" output="screen">
   <param name="Odom/Strategy" value="5"/>
   <param name="OdomORBSLAM2/VocPath" value="[OBRSLAM2_GIT_PATH]/Vocabulary/ORBvoc.txt"/>
</node>


cheers,
Mathieu