OdometryEkfFusion is a component in the odometry extension that fuses wheelbase and IMU measurements to obtain a robot-centric state estimate. It uses a Extended Kalman Filter and a differential drive kinematics model to track the states in [position_x, position_y, heading, linear_speed, angular_speed, linear_acceleration, angular_acceleration].
It outputs the state estimate as DifferentialBaseEgoMotion composites through a transmitter channel and additionally updates the transform between robot_frame and odometry_frame in the PoseTree.
Wheelbase observation (Expecting: DifferentialBaseState)
IMU observation (Expecting: ImuMessageParts)
Output state (DifferentialBaseEgoMotion)
It uses an Extended Kalman Filter tracking the state between measurements, using an adaptive time horizon to incorporate sensor measurements with varying time delays. It rewinds the state estimate to the previous known estimate and incorporates latent sensor measurements. The time window can be set through the parameter history_length_sec and should be slightly higher than the expected sensor latency.
NvIsaacOdometryExtension
Extension containing odometry related components.
nvidia::isaac::AckermannMockOdometry
Tracks Ackermann base state from dynamics measurements.
Parameters:
- name
- lookup_name
- description
- flags
- type
- default
Input channel
dynamics_in
The incoming dynamic state measurement channel
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Output channel
state_out
The outgoing full state estimation channel
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Memory pool
pool
Handle to the memory allocator pool used for data generation
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Atlas Frontend
atlas
Handle to atlas frontend to access pose tree
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Robot Frame
robot_frame
The name of the pose frame containing the pose information.
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_STRING
N/A
- name
- lookup_name
- description
- flags
- type
- default
Odometry Frame
odometry_frame
The name of the pose frame containing the odometry information.
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_STRING
N/A
nvidia::isaac::AckermannMockUpdateOdometry
Takes in full dynamic state from the ground truth and directly updates the pose tree. Also publishes an odometry message consisting of values taken directly from the ground truth state.
Parameters:
- name
- lookup_name
- description
- flags
- type
- default
Input channel
dynamics_in
The incoming dynamic state measurement channel
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Output channel
state_out
The outgoing full state estimation channel
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Memory pool
pool
Handle to the memory allocator pool used for data generation
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Atlas Frontend
atlas
Handle to atlas frontend to access pose tree
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Robot Frame
robot_frame
The name of the pose frame containing the pose information.
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Odometry Frame
odometry_frame
The name of the pose frame containing the odometry information.
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
nvidia::isaac::AckermannOdometry
Tracks Ackermann base state from dynamics measurements.
Parameters:
- name
- lookup_name
- description
- flags
- type
- default
Input channel
in
The incoming dynamic state measurement channel
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Output channel
out
The outgoing full state estimation channel
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Memory pool
pool
Handle to the memory allocator pool used for data generation
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Atlas Frontend
atlas
Handle to atlas frontend to access pose tree
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Predition Model Noise
prediction_noise
The EKF prediction noise model: [position_x, position_y, linear_velocity, linear_acceleration, heading, curvature, curvature_derivative]
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_CUSTOM
N/A
- name
- lookup_name
- description
- flags
- type
- default
Observation Model Noise
observation_noise
The EKF observation noise model: [linear_velocity, linear_acceleration, curvature, curvature_derivative]
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_CUSTOM
N/A
- name
- lookup_name
- description
- flags
- type
- default
Robot Frame
robot_frame
The name of the pose frame containing the estimated pose information.
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_STRING
N/A
- name
- lookup_name
- description
- flags
- type
- default
Odometry Frame
odometry_frame
The name of the odometry frame.
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_STRING
N/A
nvidia::isaac::DifferentialWheelOdometry
Tracks differential base state from dynamics measurements.
Parameters:
- name
- lookup_name
- description
- flags
- type
- default
Input measurement
rx_observation
The incoming dynamic state measurement channel
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Output estimated state
tx_state
The outgoing estimated full state channel
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Memory pool
pool
Handle to the memory allocator pool used for data generation
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Atlas Frontend
atlas
Handle to atlas frontend to access pose tree
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Prediction Model Noise
prediction_noise
The EKF prediction noise model: [position_x, position_y, linear_velocity, angular_velocity, linear_acceleration, angular_acceleration]
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_CUSTOM
N/A
- name
- lookup_name
- description
- flags
- type
- default
Observation Model Noise
observation_noise
The EKF observation noise model: [linear_velocity, angular_velocity, linear_acceleration, angular_acceleration]
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_CUSTOM
N/A
- name
- lookup_name
- description
- flags
- type
- default
Robot Frame
robot_frame
The target frame of the estimated odometry transform.
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Odometry Frame
odometry_frame
The source frame of the estimated odometry transform.
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
nvidia::isaac::DifferentialImuWheelOdometry
Tracks differential base state from dynamics measurements and imu measurements.
Parameters:
- name
- lookup_name
- description
- flags
- type
- default
Input Dynamics Measurement
rx_dynamics_observation
The incoming dynamics measurement channel
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Input Imu Measurement
rx_imu_observation
The incoming imu measurement channel
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Output Estimated State
tx_state
The outgoing estimated full state channel
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Allocator
allocator
Handle to the memory allocator used for data generation
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Atlas Frontend
atlas
Handle to atlas frontend to access pose tree
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Prediction Model Noise
prediction_noise
The EKF prediction noise model: [position_x, position_y, linear_speed, angular_speed, linear_acceleration, angular_acceleration]
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_CUSTOM
N/A
- name
- lookup_name
- description
- flags
- type
- default
Observation Model Noise
observation_noise
The EKF observation noise model: [linear_speed, angular_speed, linear_acceleration, angular_acceleration]
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_CUSTOM
N/A
- name
- lookup_name
- description
- flags
- type
- default
Robot Frame
robot_frame
The target frame of the estimated odometry transform.
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Odometry Frame
odometry_frame
The source frame of the estimated odometry transform.
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Imu Linear Acceleration Weight
imu_linear_acceleration_weight
Used for calculating the weighted average between the imu observation and the differential dynamics observation.
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_FLOAT64
N/A
- name
- lookup_name
- description
- flags
- type
- default
Imu Angular Speed Weight
imu_angular_speed_weight
Used for calculating the weighted average between the imu observation and the dynamics observation.
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_FLOAT64
N/A
- name
- lookup_name
- description
- flags
- type
- default
Use Imu
use_imu
Whether the imu shall be used for the estimation.
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_BOOL
N/A
nvidia::isaac::odometry_3d::OdometryEkfFusionAttitudeEstimator
Codelet fusing imu and wheelbase data for 3d state estimation.
Parameters:
- name
- lookup_name
- description
- flags
- type
- default
Input Imu Measurement
rx_imu_observation
The incoming imu measurement channel
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Input Dynamics Measurement
rx_wheelbase_observation
The incoming dynamics measurement channel
GXF_PARAMETER_FLAGS_OPTIONAL
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Output Differential Base State
tx_differential_base_state
The outgoing estimated state as DifferentialBaseStateComposite.
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Prediction Noise Covariance
prediction_noise_covariance
The EKF prediction covariance per state and timestep [sin(θ), sin(φ)cos(θ), vx, yaw_rate]
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_CUSTOM
N/A
- name
- lookup_name
- description
- flags
- type
- default
Wheelbase Observation Noise Covariance
wheelbase_observation_noise_covariance
Expected noise covariance on the wheelbase observation [yaw_rate, linear_velocity]
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_CUSTOM
N/A
- name
- lookup_name
- description
- flags
- type
- default
Composite Schema Server
composite_schema_server
Handle to the composite schema server
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Pose Tree
pose_tree
Handle to the pose tree
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Robot Frame
robot_frame
The target frame of the estimated odometry transform.
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Odometry Frame
odometry_frame
The source frame of the estimated odometry transform.
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Allocator
allocator
The allocator
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
nvidia::isaac::odometry::differential_base::OdometryEkfFusion
Odometry fusion using extended kalman filter.
Parameters:
- name
- lookup_name
- description
- flags
- type
- default
Input Dynamics Measurement
rx_wheelbase_observation
The incoming dynamics measurement channel
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Input Imu Measurement
rx_imu_observation
The incoming imu measurement channel
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Input Pose 3D
rx_pose3d_observation
The incoming pose3d measurement channel
GXF_PARAMETER_FLAGS_OPTIONAL
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Output Estimated State
tx_state
The outgoing estimated full state channel
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Allocator
allocator
Handle to the memory allocator used for data generation
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Pose Tree
pose_tree
Handle to the pose tree
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Composite Schema Server
composite_schema_server
Handle to the composite schema server
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Prediction Model Noise
prediction_model_noise
The EKF prediction noise model: [position_x, position_y, heading, linear_speed, angular_speed, linear_acceleration, angular_acceleration]
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_CUSTOM
N/A
- name
- lookup_name
- description
- flags
- type
- default
Imu Observation Noise
imu_observation_noise
The EKF observation noise model: [linear_speed, angular_speed]
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_CUSTOM
N/A
- name
- lookup_name
- description
- flags
- type
- default
Wheelbase Observation Noise
wheelbase_observation_noise
The EKF observation noise model: [linear_speed, angular_speed, linear_acceleration, angular_acceleration]
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_CUSTOM
N/A
- name
- lookup_name
- description
- flags
- type
- default
Pose2d Observation Noise
pose2d_observation_noise
Pose2d observation noise model: [position_x, position_y, heading]
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_CUSTOM
N/A
- name
- lookup_name
- description
- flags
- type
- default
Robot Frame
robot_frame
The target frame of the estimated odometry transform.
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Odometry Frame
odometry_frame
The source frame of the estimated odometry transform.
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
History Length
history_length_s
History lenght of observations taken into the update step
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_FLOAT64
0.1
- name
- lookup_name
- description
- flags
- type
- default
Fuse Imu Observations
fuse_imu_observations
Imu observations are used to observe the state estimate
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_BOOL
True
- name
- lookup_name
- description
- flags
- type
- default
Fuse Wheelbase Observations
fuse_wheelbase_observations
Wheelbase observations are used to observe the state estimate
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_BOOL
True
- name
- lookup_name
- description
- flags
- type
- default
Fuse Pose Observations
fuse_pose_observations
Pose observations are used to observe the state estimate
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_BOOL
False
nvidia::isaac::PoseDynamicsCombiner
Combines a pose and a dynamics measurement to an odometry estimate.
Parameters:
- name
- lookup_name
- description
- flags
- type
- default
Input Dynamics Measurement
rx_dynamics_observation
The incoming dynamics measurement channel
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Output Estimated Odometry
tx_odometry
The outgoing estimated odometry channel
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Allocator
allocator
N/A
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Pose Tree
pose_tree
N/A
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Composite Schema Server
composite_schema_server
N/A
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Odometry Frame
odometry_frame
The source frame of the estimated odometry transform.
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A
- name
- lookup_name
- description
- flags
- type
- default
Robot Frame
robot_frame
The target frame of the estimated odometry transform.
GXF_PARAMETER_FLAGS_NONE
GXF_PARAMETER_TYPE_HANDLE
N/A