ROS package for SBG Systems IMU.
The driver allows the user to configure the IMU (if possible, according to the device), to receive messages from the Sbg message protocol, publish ROS standard messages , and to calibrate the magnetometers.
Initial work has been done by ENSTA Bretagne.
Author : SBG Systems
Maintainer : SBG Systems, [email protected]
User can install the sbg_ros_driver through the standard ROS installation system.
- Melodic sudo apt-get install ros-melodic-sbg-driver
- Kinectic sudo apt-get install ros-kinetic-sbg-driver
- Lunar sudo apt-get install ros-lunar-sbg-driver
- Robot Operating System (ROS)
- SBG communication protocol sbgECom, v1.11.920-stable (full compatible with firmwares from 1.7.x).
- Clone the repository (use a Release version)
- Build using the normal ROS catkin build system
cd catkin_ws/src
git clone https://github.com/SBG-Systems/sbg_ros_driver.git
cd ../
catkin_make
To run the default Ros node with the default configuration
roslaunch sbg_driver sbg_device.launch
To run the magnetic calibration node
roslaunch sbg_driver sbg_device_mag_calibration.launch
Every configuration file is defined according to the same structure.
- 
sbg_device_uart_default.yaml 
 This config file is the default one for Uart connection with the device.
 It does not configure the device through the ROS node, so it has to be previously configured (manually or with the ROS node).
 It defines a few outputs for the device :- /sbg/imu_data,- /sbg/ekf_quatat 25Hz
- ROS standard outputs /imu/data,/imu/velocity,/imu/tempat 25Hz
- /sbg/status,- /sbg/utc_timeand- /imu/utc_refat 1Hz.
 
- 
sbg_device_udp_default.yaml 
 This config file is the default one for an Udp connection with the device.
 It does not configure the device through the ROS node, so it has to be previously configured (manually or with the ROS node).
 It defines a few outputs for the device :- /sbg/imu_data,- /sbg/ekf_quatat 25Hz
- ROS standard outputs /imu/data,/imu/velocity,/imu/tempat 25Hz
- /sbg/status,- /sbg/utc_timeand- /imu/utc_refat 1Hz.
 
- 
ellipse_A_default.yaml 
 Default config file for an Ellipse-A.
- 
ellipse_E_default.yaml 
 Default config file for an Ellipse-E with an external antenna and external Gnss.
- 
ellipse_N_default.yaml 
 Default config file for an Ellipse-N with an external antenna and internal Gnss.
- 
sbg_device.launch 
 Launch the sbg_device node to handle the receivde data, and load thesbg_device_uart_default.yamlconfiguration.
- 
sbg_device_mag_calibration.launch 
 Launch the sbg_device_mag node to calibrate the magnetometers, and load theellipse_E_default.yamlconfiguration.
The sbg_device node handles the communication with the connected device, and publishes the SBG output to the Ros environment.
- 
/sbg/statussbg_driver/SbgStatusProvides informations about the general status (Communication, Aiding, etc..). 
- 
/sbg/utc_timesbg_driver/SbgUtcTimeProvides UTC time reference. 
- 
/sbg/imu_datasbg_driver/SbgImuDataIMU status, and sensors values. 
- 
/sbg/ekf_eulersbg_driver/SbgEkfEulerComputed orientation using Euler angles. 
- 
/sbg/ekf_quatsbg_driver/SbgEkfQuatComputed orientation using Quaternion. 
- 
/sbg/ekf_navsbg_driver/SbgEkfNavComputed navigation data. 
- 
/sbg/magsbg_driver/SbgMagMagnetic data. 
- 
/sbg/mag_calibsbg_driver/SbgMagCalibMagnetometer calibration data. 
- 
/sbg/ship_motionsbg_driver/SbgShipMotionHeave, surge and sway data. 
- 
/sbg/gps_velsbg_driver/SbgGpsVelGPS velocities from GPS receiver. 
- 
/sbg/gps_possbg_driver/SbgGpsPosGPS positions from GPS receiver. 
- 
/sbg/gps_hdtsbg_driver/SbgGpsHdtGPS true heading from dual antenna system. 
- 
/sbg/gps_rawsbg_driver/SbgGpsRawGPS raw data for post processing. 
- 
/sbg/odo_velsbg_driver/SbgOdoVelOdometer velocity. 
- 
/sbg/event[ABCDE]sbg_driver/SbgEventEvent on sync in the corresponding pin. 
- 
/sbg/pressuresbg_driver/SbgPressurePressure data. 
In order to define ROS standard topics, it requires sometimes several SBG messages, to be merged. For each ROS standard, you have to activate the needed SBG outputs.
- 
/imu/datasensor_msgs/ImuIMU data. Requires /sbg/imu_dataand/sbg/ekf_quat.
- 
/imu/tempsensor_msgs/TemperatureIMU temperature data. Requires /sbg/imu_data.
- 
/imu/velocitygeometry_msgs/TwistStampedIMU velocity data. Requires /sbg/imu_dataand/sbg/ekf_navand either/sbg/ekf_euleror/sbg/ekf_quat.
- 
/imu/magsensor_msgs/MagneticFieldIMU magnetic field. Requires /sbg/mag.
- 
/imu/pressensor_msgs/FluidPressureIMU pressure data. Requires /sbg/pressure.
- 
/imu/pos_ecefgeometry_msgs/PointStampedEarth-Centered Earth-Fixed position. Requires /sbg/ekf_nav.
- 
/imu/utc_refsensor_msgs/TimeReferenceUTC time reference. Requires /sbg/utc_time.
- 
/imu/nav_sat_fixsensor_msgs/NavSatFixNavigation satellite fix for any Global Navigation Satellite System. Requires /sbg/gps_pos.
The sbg_device_mag node handles the magnetic calibration for suitable devices.
- 
/sbg/mag_calibrationstd_srvs/TriggerService to start/stop the magnetic calibration. 
- 
/sbg/mag_calibration_savestd_srvs/TriggerService to save the magnetic calibration to the connected device. 
The SBG Ros driver allows the user to configure the device before starting the data handling. 
To do so, set the corresponding parameter in the used config file.
# Configuration of the device with ROS.
confWithRos: true
Then, modify the desired parameters in the config file, using the SBG Firmware Manual, to see which features are configurable, and which parameter values are available.
Ellipse-A/E/N use magnemoter to provide heading. A calibration is then required to compensate soft and hard iron distortions due to the environmenent (motors, batteries, ...). The magnetic calibration procedure should be held in a non magnetic area (outside of buildings).
roslaunch sbg_driver sbg_device_mag_calibration.launch
rosservice call /sbg/mag_calibration
success: True
message: "Magnetometer calibration process started."
Proceed rotations of the IMU (every orientation if possible).
rosservice call /sbg/mag_calibration
success: True
message: "Magnetometer calibration is finished. See the output console to get calibration informations."
If the magnetic calibration is satisfaying (Quality, Confidence), it could be uploaded/saved to the device.
rosservice call /sbg/mag_calibration_save
success: True
message: "Magnetometer calibration has been uploaded to the device."
To be able to communicate with the device, be sure that your user is part of the dialout group.
Once added, restart your machine to save and apply the changes.
sudo adduser $USER dialout
Udev rules can be defined for communication port, in order to avoid modifying the port in configuration if it has changed. Udev documentation
A symlink can be configured and defined to uniquely identify the connected device. 
Once it is done, configuration file could be updated portName: "/dev/sbg".
See the docs folder, to see an example of rules with the corresponding screenshot using the udev functions.
When no external time source is available, the header time of messages is the system Epoch (Unix) processing time of the SBG callback, given by the ros::Time::now().
When the SBG device is connected with an external Gnss receiver, if the device receives a full valid SBG Utc log, i.e :
- A stable input clock to be synchronized with the internal clock
- A valid Utc time data (with or without the leap second)
- The clock has converged to the PPS
then, the time header will be computed from the last received Utc log and the device timestamp given by the internal clock.
Please report bugs and/or issues using the Issue Tracker
In order to contribute to the code, please use Pull requests to the devel branch.
If you have some feature requests, use the Issue Tracker as well.