Skip to content

Running with SLAM

Xu Liu edited this page Apr 24, 2022 · 8 revisions

High-level design

Any SLAM module that has 6 DOF pose estimation capabilities can be used to correct odometry drift while running our autonomy stack.

The high level idea is that, since the VIO-based odometry system outputs high-frequency smooth estimates while the SLAM system outputs more accurate but less smooth estimates (e.g. jumps in pose estimates upon loop closure), the former is preferable for the controller. We use the two-reference-frame system setup to compensate for the odometry drift, and propagate the drift correction into planning and control modules (this allows the reuse of the motion primitive graph, speeding up the replan process while guaranteeing planner optimality and controller stability). For more details please refer to our paper section IV-D-(3) Real-time drift compensation module.

The SLAM module needs to publish the transformation between the odometry reference frame (/ROBOT_NAMESPACE/odom) and the SLAM reference frame (/ROBOT_NAMESPACE/map), which will be used by the local-global-replanner in this autonomy stack to guide the robot to plan trajectories to drift-compensated goals, as shown in this file (TransformGlobalGoal function).

Example: running with our SLOAM system

Our semantic SLAM for forest under-canopy environment is open-sourced here. The the transformation between the odometry reference frame and the SLAM reference frame is published in sloam/src/core/inputNode.cpp (specifically, in this part and this function call PublishOdomAsTf)