Coder Social home page Coder Social logo

Comments (5)

matlabbe avatar matlabbe commented on June 10, 2024

the odometry correction would not decay to identity, unless odometry was indeed perfect, but the tag detection was wrong... and the more tag detections you have, the more you can correct the tag orientation (which individually are often bad), thus slowly "fix" the initial bad tag orientation error.

from rtabmap.

DennisMelamedKitware avatar DennisMelamedKitware commented on June 10, 2024

Thanks @matlabbe, I really appreciate your response and help.

I think I'm starting to understand the issue here - odometry is assuming it starts at the origin (identity transform), which doesn't match the fact that I've set one of my arucos to be the origin (set the prior pose to 0,0,0,0,0,0). Eventually this could cause the decay I mention above, I think.

Is there any ability in rtabmap standalone to set the initial pose of the camera/robot in mapping mode? If I set it to be the correct transform relative to the tag I'm using as my map origin, that should lead to a consistent estimation (assuming everything else is correct), right? From this (

void Rtabmap::setInitialPose(const Transform & initialPose)
) it appears we can only set the initial pose in localization mode, is that accurate?

Or perhaps I'm misunderstanding, the help text in Marker Detection says:

World prior locations of the markers. The map will be transformed in marker's world frame when a tag is detected. 

I'm not understanding what that second sentence means, could you provide any clarification?

from rtabmap.

matlabbe avatar matlabbe commented on June 10, 2024

Odometry will always start at (0,0) in its odometry frame (i.e.: "odom -> base_link" would be Identity on startup). On the mapping side, the "map -> odom" transform will be Identity till a loop closure is detected.

Marker/Priors parameter can be used to set a "world" coordinate to a tag. To include that prior when detecting a tag, we should set Optimizer/PriorsIgnored=false. So for:

The map will be transformed in marker's world frame when a tag is detected.

it means that the initial pose of the camera will be Identity until a tag is detected. When the tag is detected, the graph will be transformed in tag's coordinate frame, so that "map->odom" will be updated to make the camera pose (map -> odom -> base_link) appears in tag's frame. For example: If you bringup the camera, move forward 1 meter along x axis (so that odom->base_link is now x=1, y=0), then detect a tag 1 meter away with a prior at (x=10 y=0), the "map -> odom" will be updated to( x=8, y=0), so that the camera pose in the map frame "map->odom->base_link" will be (x=9, y=0).

from rtabmap.

DennisMelamedKitware avatar DennisMelamedKitware commented on June 10, 2024

@matlabbe thanks for the clarification - the "map->odom->base_link" transform is what is computed in this example (https://github.com/introlab/rtabmap/wiki/Cplusplus-RGBD-Mapping) by odometryCorrection_*odom.pose(), right?

from rtabmap.

matlabbe avatar matlabbe commented on June 10, 2024

Yes, map->odom would be odometryCorrection_, and odom->base_link would be odom.pose().

from rtabmap.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.