-
Notifications
You must be signed in to change notification settings - Fork 4
3.4 State Estimation
Antoine Dangeard edited this page Sep 25, 2023
·
6 revisions
The state estimation package is responsible for combinining the data obtained from all the different sensors (IMU, depth sensor, DVL) into a single pose that represents where the AUV is in space. Each sensor is represented as a class that has specific class variables based on the the axes that the sensor can measure. Then, the state estimation package reads from each sensor class and chooses which axis it wants to get from each sensor class (when there are two sensors that can measure the same axis, the priority of which sensor is used is also defined).
-
sensors.py
: This python file contains the class definitions for each sensor. All the sensors are based on the sameSensor
parent class, which detects whether a sensor has lost connection or is sending incorrect values, and defines shared class attributes. This file is not a "node" persay, because it is only ever imported by the state_aggregator file, but is an important part of state estimation regardless. To make things easier to maintain, each class in thesensors.py
file is responsible for converting any measurements made by the specific sensor into the NWU (North-West-Up) reference frame before updating it's class variables. This way, the state aggregator node can simply combine all the different axes from the different sensors without having to worry about reference frame transformations. -
state_aggregator.py
: This node is responsible for instantiating, checking the status of, and reading from the different sensor classes. It then combines these into a single "pose" and publishes the pose information to relevant topics.
-
state_estimation.launch
: There is only launch file in this package, to keep things clean. To be able to change the behavior of the node, different arguments can be passed to the launch file:sim
, which is set to true when running the AUV in simulation. Whensim
is true, it will not try to launch the sensor nodes that actually read data from the physical sensors attached to the AUV, and assume the data will be published to the appropriate topics regardless. There are also the argumentsq_imu_auv_w
,q_imu_auv_x
,q_imu_auv_y
, andq_imu_auv_z
which are used to represent the rotation offset of the IMU relative to the AUV's reference frame (i.e. if the IMU is attached to the AUV at an angle, we can account for this in our state measurements). The same arguments exist for the dvl:q_dvl_auv_w
, etc... Finally, theauv_dvl_offset_x
,auv_dvl_offset_y
, andauv_dvl_offset_z
arguments can be changed to reflect a position offset of the DVL from the center of mass of the AUV. This is useful if the DVL is installed anywhere but the center of the AUV, to account for the positional offset that will be present in the DVL's positional readings.
- auv_msgs
- depth_sensor
- dvl
- imu
- geometry_msgs
- rospy
- python3-numpy
- std_msgs
- tf2
- tf2_geometry_msgs
- tf2_ros
- tf
- sbg_driver