Glider is a G-INS system built on GTSAM. It currently takes in GPS and 9-DOF IMU and provides a full state estimate up to the rate of you IMU. Glider is designed to be configured to your system.
To run glider you can use the provided docker images, ROS2 jazzy and humble are both supported, simply use the build.bash and run.bash files. You can mounted volumes in the run files if necessary. If you want to inlcude this in another ROS2 workspace, you may need to install the following dependencies:
apt install ros-$ROS_DISTRO-gtsam libgoogle-glog-dev libgest-dev
Glider can be build with colcon as a ROS2 package with:
colcon build --packages-select glider
If you only want the api you can build with:
cmake -S . -B build -DBUILD_ROS=OFF
cmake --build build
To run glider with ros use ros2 run glider glider-node.launch.py. If you are running with a bag file use:
ros2 bag run <bag_file_name> --clock
ros2 launch glider glider-node.launch.py use_sim_time:=true
You're setup needs a GPS and a 9-DOF IMU, that is an IMU that provides a full orientation. The IMU orientation should be provided in the IMU's frame as this is standard for robotics, but we are working on supporting the NED frame. We use a VectorNav VN100T IMU. It is important make sure your IMU magnetometer is calibrated, if it is not aligned correctly the heading output of glider will be incorrect.
We recommend using Glider with ROS2, you can configure the ros parameters in config/ros-params.yaml. Here's more detail about what
the parameters mean:
publishers.rate: the rate at which odometry is published in hz, setting this to 0 publishes at IMU rate.publishers.nav_sat_fix: if true will publish the odometry as aNavSatFixmsg, the default is anOdometrymsg.publishers.viz.use: if true will publish anOdometrytopic for visualization centered around the origin.publishers.viz.origin_easting: the easting value you want to viz odometry to center around.publishers.viz.origin_northing: the northing value you want the viz odometry to center around.subscribers.use_odom: Still under development.
You can configure glider itself in config/glider-params.yaml, this is where you can specify the parameters for the factor graph. Here's more detail on each parameter:
covariances.accelerometer: covariance of the accelerometer.covariances.gyroscope: covariance of the gyroscope.covariances.integration: covariance of the IMU preintegration.covariances.heading: covariance of the IMU's magnetometer heading in radians, 0.09 radians is about 5 degrees.covariances.roll_pitch: covariance of the roll and pitch angles in radians.covariances.bias: covariance of the bias estimate.frame: What frame the IMU is in, eitherenuorned.
gps.covariance: covariance of the gps position estimate.
constants.gravity: gravity in your IMU's frame.constants.bias_num_measurements: number of IMU measurements to use to initially estimate the bias.constants.initial_num_measurements: number of times to let the factor graph optimize before glider starts reporting odometry.logging.stdout: output log statements to terminal in addition to the logfileoptimizer.smooth: if true the factor graph will optimize using a fixed lag smoother, otherwise it will use iSAM2.optimizer.lag_time: period of time the fixed lag smoother should look at in seconds.gps_to_imu: the relative transformation from your gps to your imu in the FLU frame.
We use GTest to run unit tests. You can build the tests with
cd glider
cmake -S . -B build -DBUILD_TESTS=ON
cmake --build build
and run with:
cd build
ctest
Note these tests are run on PR's and pushes to the ros2 branch.