# fixposition_driver **Repository Path**: xingwanyong/fixposition_driver ## Basic Information - **Project Name**: fixposition_driver - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-05-18 - **Last Updated**: 2024-05-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Fixposition ROS Driver - [ROS1 melodic / noetic ![](./../../actions/workflows/build_test_ros.yml/badge.svg)](./../../actions/workflows/build_test_ros.yml) - [ROS2 foxy / humble ![](./../../actions/workflows/build_test_ros2.yml/badge.svg)](./../../actions/workflows/build_test_ros2.yml) [ROS](https://www.ros.org/) (both ROS1 and ROS2) Driver for [Fixposition Vision-RTK 2](https://www.fixposition.com/product). The driver is designed to listen on a TCP or Serial port for the [_Fixposition ASCII Messages_](#fixposition-ascii-messages), and then publish them as corresponding ROS messages. At the same time, the driver can also subscribe to a speed input message, which will be sent back to the Vision-RTK 2 sensor and provide an external speed input. - For the output ROS messages, see [Output of the driver](#output-of-the-driver) - For the input ROS messages for speed input, see [Input Wheelspeed through the driver](#input-wheelspeed-through-the-driver) ## How to use it The code is split in the following 3 parts: - `fixposition_driver_lib`: common CMake library to parse [_Fixposition ASCII Messages_](#fixposition-ascii-messages). For more details and build instructions, see [here](fixposition_driver_lib/README.md). - `fixposition_driver_ros1`: ROS1 driver node to subscribe and publish in the ROS1 framework. For more details and build instructions, see [here](fixposition_driver_ros1/README.md). - `fixposition_driver_ros2`: ROS2 driver node to subscribe and publish in the ROS2 framework. For more details and build instructions, see [here](fixposition_driver_ros2/README.md). ### ROS 1 For more details and build instructions, see [here](fixposition_driver_ros1/README.md). #### Installation To install the node, extract / clone the code and `fixposition_gnss_tf` to your catkin workspace's `src` folder: ```bash # The folder structure should look like this fp_public_ws ├── src │ ├── fixposition_driver │ │ ├── fixposition_driver_lib │ │ ├── fixposition_driver_ros1 │ │ ├── fixposition_driver_ros2 # will be ignore by catkin │ ├── fixposition_gnss_tf ``` **Add a file named 'CATKIN_IGNORE' to `fixposition_driver_ros2` folder.** make sure you have sourced the setup.bash from ros: `/opt/ros/{ROS_DISTRO}/setup.bash`, for example ``` source /opt/ros/melodic/setup.bash` ``` and build it with: `catkin build fixposition_driver_ros1` This will build the ROS1 driver node and all its dependencies. Then source your development environment: `source devel/setup.bash` #### Launch the Driver - To launch the node in serial mode, run: `roslaunch fixposition_driver_ros1 serial.launch` - In TCP mode (Wi-Fi): `roslaunch fixposition_driver_ros1 tcp.launch` - In TCP mode (Ethernet): `roslaunch fixposition_driver_ros1 tcp.launch` To change the settings of TCP (IP, Port) or Serial (Baudrate, Port) connections, check the `launch/tcp.yaml` and `launch/serial.yaml` files. ### ROS 2 For more details and build instructions, see [here](fixposition_driver_ros2/README.md). #### Installation To install the node, extract / clone the code and `fixposition_gnss_tf` to your catkin workspace's `src` folder: ```bash # The folder structure should look like this fp_public_ws ├── src │ ├── fixposition_driver │ │ ├── fixposition_driver_lib │ │ ├── fixposition_driver_ros1 # will be ignore by colcon when building for ROS2 │ │ ├── fixposition_driver_ros2 │ ├── fixposition_gnss_tf ``` **Add a file named 'COLCON_IGNORE' to `fixposition_driver_ros1` folder.** make sure you have sourced the setup.bash from ros: `/opt/ros/{ROS_DISTRO}/setup.bash`, for example ``` source /opt/ros/foxy/setup.bash ``` and build it with: `colcon build --packages-up-to fixposition_driver_ros2` This will build the ROS2 driver node and all its dependencies. Then source your environment after the build: `source install/setup.bash` #### Launch the Driver - To launch the node in serial mode, run: `ros2 launch fixposition_driver_ros2 serial.launch` - In TCP mode (Wi-Fi): `ros2 launch fixposition_driver_ros2 tcp.launch` - In TCP mode (Ethernet): `ros2 launch fixposition_driver_ros2 tcp.launch` **To change the settings of TCP (IP, Port) or Serial (Baudrate, Port) connections, check the `launch/tcp.yaml` and `launch/serial.yaml` files and read this note below.** > [!NOTE] > ROS2, unlike ROS1, by default uses a `install` directory in the workspace. So when you do `ros2 launch xxx`, the configuration and launch files are taken from the `install` and not directly from the `src` directory. > > If you want to modify the parameters in the YAML files. You can: > - Modify the YAML file in the `src` directory and then re-run `colcon build --packages-up-to fixposition_driver_ros2` to update them into the `install` directory. > > or > - Modify the YAML file in `install`. However, the next time you do `colcon build` they will be overriden by the files in `src`. ## Output of the driver ### Messages and TF tree The output is published on the following: #### Vision-RTK2 Fusion - From **FP_A-ODOMETRY**, at the configured frequency (default 10Hz, output generator -> Fusion frequency): - Messages | Topic | Message Type | Frequency | Description | | --------------------------- | ------------------------- | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `/fixposition/odometry` | `nav_msgs/Odometry` | as configured on web-interface | Position, Orientation from ECEF to FP_POI, Velocity and Angular Velocity in FP_POI | | `/fixposition/odomsh` | `nav_msgs/Odometry` | as configured on web-interface | Position, Orientation from ECEF to FP_POI, Velocity and Angular Velocity in FP_POI. Based on smooth odometry output. | | `/fixposition/odometry_enu` | `nav_msgs/Odometry` | as configured on web-interface | Position, Orientation from ENU0 to FP_POI, Velocity and Angular Velocity in FP_POI | | `/fixposition/vrtk` | `fixposition_driver/VRTK` | as configured on web-interface | Custom Message containing same Odometry information as well as status flags | | `/fixposition/poiimu` | `sensor_msgs/Imu` | as configured on web-interface | Bias Corrected acceleration and rotation rate in FP_POI | | `/fixposition/ypr` | `geometry_msgs/Vector3` | as configured on web-interface | x = Yaw, y = Pitch, z = Roll in radian. Euler angles representation of rotation between ENU and P_POI. Only available after fusion initialization. | - From **FP_A-LLH**, at the configured frequency (default 10Hz, output generator -> Fusion frequency): | Topic | Message Type | Frequency | Description | | ------------------------ | ----------------------- | ------------------------------ | ------------------------------ | | `/fixposition/navsatfix` | `sensor_msgs/NavSatFix` | as configured on web-interface | Latitude, Longitude and Height | #### Vision-RTK2 GNSS Antenna Positions **If GNSS Antenna positions are needed, please enable this on the sensor's configuration interface.** - From **NOV_B-BESTGNSSPOS_GNSS[1,2]**, at the configured frequency, GNSS1 and GNSS2 raw antenna positions (default 5Hz): | Topic | Message Type | Frequency | Description | | -------------------- | ----------------------- | ------------------------------ | ------------------------------ | | `/fixposition/gnss1` | `sensor_msgs/NavSatFix` | as configured on web-interface | Latitude, Longitude and Height | | `/fixposition/gnss2` | `sensor_msgs/NavSatFix` | as configured on web-interface | Latitude, Longitude and Height | - From **NMEA-GP-GGA_GNSS**, **NMEA-GP-RMC_GNSS**, and **NMEA-GP-ZDA_GNSS**, at the configured frequency (default 5Hz): The Vision-RTK2 can also output an average GNSS-based LLH position (i.e., **only GNSS, not Fusion**) and heading estimate based on speed over ground (**SOG**) and course over ground (**COG**) - (i.e., **the platform must be moving for it to be accurate**) by utilizing several NMEA messages, which serves as an auxiliary output until Fusion is fully initialized. This message's output frequency equals the lowest frequency of any of these three message types. **Note: This output should only be used until Fusion is fully initialized.** Warning: This topic will only be populated when the sampling rate of all required NMEA messages is 1 (i.e., the default output frequency of the messages). | Topic | Message Type | Frequency | Description | | -------------------- | ----------------------- | ------------------------------ | ------------------------------ | | `/fixposition/nmea` | `fixposition_driver/NMEA` | as configured on web-interface | Latitude, Longitude and Height | #### Vision-RTK2 IMU data - From **FP_A-RAWIMU**, at 200Hz: | Topic | Message Type | Frequency | Description | | --------------------- | ----------------- | --------- | ----------------------------------------------------------------------------------------- | | `/fixposition/rawimu` | `sensor_msgs/Imu` | 200Hz | Raw (without bias correction) IMU acceleration and angular velocity data in FP_VRTK frame | - From **FP_A-CORRIMU**, at 200Hz: | Topic | Message Type | Frequency | Description | | ---------------------- | ----------------- | --------- | -------------------------------------------------------------------------- | | `/fixposition/corrimu` | `sensor_msgs/Imu` | 200Hz | Bias Corrected IMU acceleration and angular velocity data in FP_VRTK frame | - From **FP_A-TF_POIIMUH**, at 200Hz: | Topic | Message Type | Frequency | Description | | ------------------------ | ----------------------- | ------------------------------ | ------------------------------ | | `/fixposition/imu_ypr` | `geometry_msgs/Vector3` | 200Hz | x = 0.0, y = Pitch, z = Roll in radian. Euler angles representation of rotation between a local horizontal frame and P_POI. Rough estimation using IMU alone. | #### Transforms - TFs: | Frames | Topic | Message needed to be selected on web-interface | Frequency | | ------------------ | ------------ | ---------------------------------------------- | ------------------------------ | | `ECEF-->FP_POI` | `/tf` | `ODOMETRY` | as configured on web-interface | | `ECEF-->FP_ENU` | `/tf` | `ODOMETRY` | as configured on web-interface | | `ECEF-->FP_ENU0` | `/tf` | `ODOMETRY` | as configured on web-interface | | `FP_POI-->FP_IMUH` | `/tf` | `ODOMETRY` | 200Hz | | `FP_POI-->FP_VRTK` | `/tf_static` | `TF_POI_VRTK` | 1Hz | | `FP_VRTK-->FP_CAM` | `/tf_static` | `TF_VRTK_CAM` | 1Hz | - ROS TF Tree: ```mermaid graph TD; ECEF-->FP_POI-->FP_VRTK-->FP_CAM FP_POI-->FP_IMUH ECEF-->FP_ENU ECEF-->FP_ENU0 ``` _Please note that the corresponding messages also has to be selected on the Fixposition V-RTK's configuration interface._ ### Explaination of frame ids | Frame ID | Explaination | | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | | **ECEF** | Earth-Center-Earth-Fixed frame. | | **FP_VRTK** | The coordinate frame on the V-RTK's housing on the Fixposition-Logo "X". | | **FP_POI** | Point-Of-Interest, configured from V-RTK's web-interface with respect to the FP_VRTK frame. By default it is the same as FP_VRTK. | | **FP_ENU** | The **local** East-North-Up coordinate frame with the origin at the same location as FP_POI. | | **FP_ENU0** | The **global fixed** East-North-Up coordinate frame with the origin at the first received ODOMETRY position. Needed for visualization in Rviz. | | **FP_CAM** | The camera coordinate frame of the V-RTK. | | **FP_IMUH** | A local horizontal frame with the origin at the same location as FP_POI. This frame is a rough estimate determined by the IMU alone. | ## Input Wheelspeed through the driver The fp_ros_driver supports inputting a Speed msg (`msg/Speed.msg`) through the `/fixposition/speed` topic. The Speed msg is defined as a vector of WheelSensor msgs (`msg/WheelSensor.msg`). This message in turn, is intended to be a simplified version of the FP_B-MEASUREMENTS, containing three integers (vx, vy, and vz), three booleans (validity of the three velocity integers), and a string indicating the sensor from which the measurement originates. The integer velocity values should be in [mm/s], to have enough precision when being converted into an integer format. Internally, upon arriving to the ros driver, wheelspeed measurements are converted into a full FP_B-MEASUREMENTS message, and sent via the TCP or serial interface to the Vision-RTK2, where they will be further processed. For more details regarding the definition FP_B-MEASUREMENTS message, please refer to [the following page](https://docs.fixposition.com/fd/fp_b-measurements), or to the VRTK2 integration manual. ## Code Documentation Run `doxygen Doxyfile` to generate Doxygen code documentation. ## Fixposition ASCII messages _This is an exerpt from the Integration Manual_ ### Message structure NMEA style framing is used. Frames (messages) are in this form: $FP,msg_type,msg_version,field3,field4,...,fieldN\*CC\r\n Where: - The NMEA style framing: - \$ -- Start character ("$", ASCII 36) - \*CC -- Checksum: "\*" (ASCII 42) and two digit XOR value of all payload characters in captial hexadecimal notation, for example: "FPX" = `'F' ^ 'P' ^ 'X' = 70 ^ 80 ^ 88 = 78 = 0x4e` = checksum `4E` - \r\n -- Sentence termination characters (CR + LF, ASCII 13 + 10) - A Fixposition identifier: - FP -- Fixposition ASCII message identifier, "FP" (ASCII 70 + 80) - Fixposition message type and version: - msg_type (= field1) -- Message type, all captial letters (ASCII 65--90) - msg_version (= field2) -- Message version, decimal number (letters 0--9, ASCII 48--57), range 1--... - Data fields (payload) - field3,field4,...,fieldN -- The structure of the message data is defined by the msg_type and version. Each field can contain all printable 7-bit ASCII characters (ASCII 32–126), excluding the reserved characters `!` (ASCII 33), `$` (ASCII 36), `*` (ASCII 42), `,` (ASCII 44), `\` (ASCII 92), `~` (ASCII 126). - Field separators - All fields (identifier, message type, message version, data fields) are separated by a comma (`,`, ASCII 44) - Null fields - Data fields can be _null_, meaning their value is absent to indicate that no data is available. The data for null fields is the empty string. For example: - Definition: ...,fieldi,fieldi+1,fieldi+2,... - Values: fieldi = 123, fieldi+1 = _null_, fieldi+2 = 456 - Payload string: ...,123,,456,... - Data field types: - _Numeric_: Decimal integer number, one or more digits (0-9) and optional leading "-" sign - _Float (.x)_: Decimal floating point number, one or more digits (0-9) and optional leading "-" sign, with _x_ digits fractional part separated by a dot (".") - _Float (x)_: Decimal floating point number with _x_ significant digits, optional leading "-", optional fractional part separated by a dot (".") - _String_: String of allowed payload characters (but not the `,` field separator) - ... - ... ### ODOMETRY message This message contains full fusion odometry output and additional status information. It is output at the configured rate. Example message (wrapped on multiple lines for readability): $FP,ODOMETRY,2,2231,227610.750000,4279243.1641,635824.2171,4671589.8683,-0.412792,0.290804,-0.123898,0.854216, -17.1078,-0.0526,-0.3252,0.02245,0.00275,0.10369,-1.0385,-1.3707,9.8249,4,1,8,8,1, 0.01761,0.02274,0.01713,-0.00818,0.00235,0.00129,0.00013,0.00015,0.00014,-0.00001,0.00001,0.00002, 0.03482,0.06244,0.05480,0.00096,0.00509,0.00054,fp_release_vr2_2.54.0_160*4F\r\n Message fields: | # | Field | Format | Unit | Example | Description | | ---: | -------------------- | ---------- | --------------------------- | --------------------------- | ---------------------------------------------------------------------- | | 1 | `msg_type` | String | - | `ODOMETRY` | Message type, always `ODOMETRY` for this message | | 2 | `msg_version` | Numeric | - | `2` | Message version, always `2` for this version of the `ODOMETRY` message | | 3 | `gps_week` | Numeric | - | `2231` | GPS week number, range 0--9999 | | 4 | `gps_tow` | Float (.6) | s | `227610.750000` | GPS time of week, range 0.000--604799.999999 | | 5 | `pos_x` | Float (.4) | m | `4279243.1641` | Position in ECEF, X component | | 6 | `pos_y` | Float (.4) | m | `635824.2171` | Position in ECEF, Y component | | 7 | `pos_z` | Float (.4) | m | `4671589.8683` | Position in ECEF, Z component | | 8 | `orientation_w` | Float (.6) | - | `-0.412792` | Quaternion with respect to ECEF, W component | | 9 | `orientation_x` | Float (.6) | - | `0.290804` | Quaternion with respect to ECEF, X component | | 10 | `orientation_y` | Float (.6) | - | `-0.123898` | Quaternion with respect to ECEF, Y component | | 11 | `orientation_z` | Float (.6) | - | `0.854216` | Quaternion with respect to ECEF, Z component | | 12 | `vel_x` | Float (.4) | m/s | `-17.1078` | Velocity in output frame, X component | | 13 | `vel_y` | Float (.4) | m/s | `-0.0526` | Velocity in output frame, Y component | | 14 | `vel_z` | Float (.4) | m/s | `-0.3252` | Velocity in output frame, Z component | | 15 | `rot_x` | Float (.5) | rad/s | `0.02245` | Bias corrected angular velocity in output frame, X component | | 16 | `rot_y` | Float (.5) | rad/s | `0.00275` | Bias corrected angular velocity in output frame, Y component | | 17 | `rot_z` | Float (.5) | rad/s | `0.10369` | Bias corrected angular velocity in output frame, Z component | | 18 | `acc_x` | Float (.4) | m/s2 | `-1.0385` | Bias corrected acceleration in output frame, X component | | 19 | `acc_y` | Float (.4) | m/s2 | `-1.3707` | Bias corrected acceleration in output frame, Y component | | 20 | `acc_z` | Float (.4) | m/s2 | `9.8249` | Bias corrected acceleration in output frame, Z component | | 21 | `fusion_status` | Numeric | - | `4` | Fustion status, see below | | 22 | `imu_bias_status` | Numeric | - | `1` | IMU bias status, see below | | 23 | `gnss1_fix` | Numeric | - | `8` | Fix status of GNSS1 receiver, see below | | 24 | `gnss2_fix` | Numeric | - | `8` | Fix status of GNSS2 receiver, see below | | 25 | `wheelspeed_status` | Numeric | - | `1` | Wheelspeed status, see below | | 26 | `pos_cov_xx` | Float (5) | m2 | `0.01761` | Position covariance, element XX | | 27 | `pos_cov_yy` | Float (5) | m2 | `0.02274` | Position covariance, element YY | | 28 | `pos_cov_zz` | Float (5) | m2 | `0.01713` | Position covariance, element ZZ | | 29 | `pos_cov_xy` | Float (5) | m2 | `-0.00818` | Position covariance, element XY | | 30 | `pos_cov_yz` | Float (5) | m2 | `0.00235` | Position covariance, element YZ | | 31 | `pos_cov_xz` | Float (5) | m2 | `0.00129` | Position covariance, element XZ | | 32 | `orientation_cov_xx` | Float (5) | rad2 | `0.00013` | Velocity covariance, element XX | | 33 | `orientation_cov_yy` | Float (5) | rad2 | `0.00015` | Velocity covariance, element YY | | 34 | `orientation_cov_zz` | Float (5) | rad2 | `0.00014` | Velocity covariance, element ZZ | | 35 | `orientation_cov_xy` | Float (5) | rad2 | `-0.00001` | Velocity covariance, element XY | | 36 | `orientation_cov_yz` | Float (5) | rad2 | `0.00001` | Velocity covariance, element YZ | | 37 | `orientation_cov_xz` | Float (5) | rad2 | `0.00002` | Velocity covariance, element XZ | | 38 | `vel_cov_xx` | Float (5) | m2/s2 | `0.03482` | Velocity covariance, element XX | | 39 | `vel_cov_yy` | Float (5) | m2/s2 | `0.06244` | Velocity covariance, element YY | | 40 | `vel_cov_zz` | Float (5) | m2/s2 | `0.05480` | Velocity covariance, element ZZ | | 41 | `vel_cov_xy` | Float (5) | m2/s2 | `0.00096` | Velocity covariance, element XY | | 42 | `vel_cov_yz` | Float (5) | m2/s2 | `0.00509` | Velocity covariance, element YZ | | 43 | `vel_cov_xz` | Float (5) | m2/s2 | `0.00054` | Velocity covariance, element XZ | | 44 | `sw_version` | String | - | `fp_release_vr2_2.54.0_160` | Software version | Fusion status (`fusion_status`): | Value | Description | | :---: | --------------------------- | | `0` | Not started | | `1` | Vision only | | `2` | Visual inertial fusion | | `3` | Inertial-GNSS fusion | | `4` | Visual-inertial-GNSS fusion | IMU bias status (`imu_bias_status`): | Value | Description | | :---: | ------------------ | | `0` | Not converged | | `1` | IMU bias converged | GNSS fix type (`gnss1_fix`, `gnss2_fix`): | Value | Description | | :---: | --------------------------------- | | `0` | Unknown | | `1` | No fix | | `2` | Dead-reckoning only | | `3` | Time-only fix | | `4` | Single 2D fix | | `5` | Single 3D fix | | `6` | Single 3D fix with dead-reckoning | | `7` | RTK float fix | | `8` | RTK fixed fix | Wheelspeed status (`wheelspeed_status`): | Value | Description | | :---: | -------------------------------------------------------- | | `-1` | No wheelspeed enabled | | `0` | At least one wheelspeed enabled, no wheelspeed converged | | `1` | At least one wheelspeed enabled and converged | Remarks: - The output frame is the frame configured on the web-interface. ### LLH message This message contains time, geographic coordinates and the position covariance of the output frame in East-North-up (ENU). The coordinates are transformed from ECEF using the WGS-84 parameters (see also [[coordinates#vrtk-output-coordinate-system]]). It is output at the configured rate. Example message (wrapped on multiple lines for readability): $FP,LLH,1,2231,227563.250000,47.392357470,8.448121451,473.5857, 0.04533,0.03363,0.02884,0.00417,0.00086,-0.00136*62\r\n Message fields: | # | Field | Format | Unit | Example | Description | | ---: | ------------- | ---------- | ------------- | --------------- | -------------------------------------------------------------------------- | | 1 | `msg_type` | String | - | `LLH` | Message type, always `LLH` for this message | | 2 | `msg_version` | Numeric | - | `1` | Message version, always `1` for this version of the `LLH` message | | 3 | `gps_week` | Numeric | - | `2231` | GPS week number, range 0--9999 | | 4 | `gps_tow` | Float (.6) | s | `227563.250000` | GPS time of week, range 0.000--604799.999999 | | 5 | `latitude` | Float (.9) | deg | `47.392357470` | Latitude, range -90.000000000--90.000000000, > 0 for North, < 0 for South | | 6 | `longitude` | Float (.9) | deg | `8.448121451` | Longitude, range -180.000000000--180.000000000, > 0 for East, < 0 for West | | 7 | `height` | Float (.4) | m | `473.5857` | Ellipsoidal height, range -1000.0000-50000.0000 | | 8 | `pos_cov_ee` | Float (5) | m2 | `0.04533` | Position covariance in ENU, element EE | | 9 | `pos_cov_nn` | Float (5) | m2 | `0.03363` | Position covariance in ENU, element NN | | 10 | `pos_cov_uu` | Float (5) | m2 | `0.02884` | Position covariance in ENU, element UU | | 11 | `pos_cov_en` | Float (5) | m2 | `0.00417` | Position covariance in ENU, element EN | | 12 | `pos_cov_nu` | Float (5) | m2 | `0.00086` | Position covariance in ENU, element NU | | 13 | `pos_cov_eu` | Float (5) | m2 | `-0.00136` | Position covariance in ENU, element EU | ### RAWIMU message This message contains time, acceleration and angular velocity (raw value, no bias correction, only coordinate transformation applied) in the vrtk frame - the X on the sensor. See also [[coordinates#vrtk-output-coordinate-system]]. It is output at 200Hz IMU frequency regardless whether fusion is running or not. Example message: $FP,RAWIMU,1,2197,126191.777855,-0.199914,0.472851,9.917973,0.023436,0.007723,0.002131*34\r\n Message fields: | # | Field | Format | Unit | Example | Description | | ---: | ------------- | ---------- | --------------- | --------------- | -------------------------------------------------------------------- | | 1 | `msg_type` | String | - | `RAWIMU` | Message type, always `RAWIMU` for this message | | 2 | `msg_version` | Numeric | - | `1` | Message version, always `1` for this version of the `RAWIMU` message | | 3 | `gps_week` | Numeric | - | `2197` | GPS week number, range 0--9999 | | 4 | `gps_tow` | Float (.6) | s | `126191.777855` | GPS time of week, range 0.000--604799.999999 | | 5 | `acc_x` | Float (.6) | m/s2 | `-0.199914` | Raw acceleration in output frame, X component | | 6 | `acc_y` | Float (.6) | m/s2 | `0.472851` | Raw acceleration in output frame, Y component | | 7 | `acc_z` | Float (.6) | m/s2 | `9.917973` | Raw acceleration in output frame, Z component | | 8 | `rot_x` | Float (.6) | rad/s | `0.023436` | Raw angular velocity in output frame, X component | | 9 | `rot_y` | Float (.6) | rad/s | `0.007723` | Raw angular velocity in output frame, Y component | | 10 | `rot_z` | Float (.6) | rad/s | `0.002131` | Raw angular velocity in output frame, Z component | ### CORRIMU message This message contains time, acceleration and angular velocity (coordinate transformation and bias correction applied) in the vrtk frame - the X on the sensor. See also [[coordinates#vrtk-output-coordinate-system]]. It is output at 200Hz IMU frequency, but only when fusion is initialized and IMU biases is converged. Example message: $FP,CORRIMU,1,2197,126191.777855,-0.195224,0.393969,9.869998,0.013342,-0.004620,-0.000728*7D\r\n Message fields: | # | Field | Format | Unit | Example | Description | | ---: | ------------- | ---------- | --------------- | --------------- | -------------------------------------------------------------------- | | 1 | `msg_type` | String | - | `CORRIMU` | Message type, always `RAWIMU` for this message | | 2 | `msg_version` | Numeric | - | `1` | Message version, always `1` for this version of the `RAWIMU` message | | 3 | `gps_week` | Numeric | - | `2197` | GPS week number, range 0--9999 | | 4 | `gps_tow` | Float (.6) | s | `126191.777855` | GPS time of week, range 0.000--604799.999 | | 5 | `acc_x` | Float (.6) | m/s2 | `-0.195224` | Raw acceleration in output frame, X component | | 6 | `acc_y` | Float (.6) | m/s2 | `0.393969` | Raw acceleration in output frame, Y component | | 7 | `acc_z` | Float (.6) | m/s2 | `9.869998` | Raw acceleration in output frame, Z component | | 8 | `rot_x` | Float (.6) | rad/s | `0.013342` | Raw angular velocity in output frame, X component | | 9 | `rot_y` | Float (.6) | rad/s | `-0.004620` | Raw angular velocity in output frame, Y component | | 10 | `rot_z` | Float (.6) | rad/s | `-0.000728` | Raw angular velocity in output frame, Z component | Remarks: - The output frame of the IMU messages is the X on VRTK sensor, NOT the frame configured from the webinterface (They are of course the same when on webinterface the configs are 0s). ### TF message This message contains information for static coordinate transformations. Example messages: $FP,TF,2,2233,315835.000000,VRTK,CAM,-0.00000,-0.00000,-0.00000,1.000000,0.000000,0.000000,0.000000*6B\r\n $FP,TF,2,2233,315835.000000,POI,VRTK,-0.99301,-2.01395,-2.99298,0.999995,-0.002616,-0.001748,-0.000868*52\r\n Message fields: | # | Field | Format | Unit | Example | Description | | ---: | --------------- | ---------- | ---- | --------------- | ---------------------------------------------------------------- | | 1 | `msg_type` | String | - | `TF` | Message type, always `TF` for this message | | 2 | `msg_version` | Numeric | - | `2` | Message version, always `2` for this version of the `TF` message | | 3 | `gps_week` | Numeric | - | `2233` | GPS week number, range 0--9999 | | 4 | `gps_tow` | Float (.6) | s | `315835.000000` | GPS time of week, range 0.000--604799.999999 | | 5 | `frame_a` | String | - | `POI` | Target frame (maximum 8 characters: A-Z and 0-9) | | 6 | `frame_b` | String | - | `VRTK` | Initial frame (maximum 8 characters: A-Z and 0-9) | | 7 | `translation_x` | Float (.5) | m | `-0.99301` | Translation, X component | | 8 | `translation_y` | Float (.5) | m | `-2.01395` | Translation, Y component | | 9 | `translation_z` | Float (.5) | m | `-2.99298` | Translation, Z component | | 10 | `orientation_w` | Float (.6) | - | `0.999995` | Rotation in quaternion, W component | | 11 | `orientation_x` | Float (.6) | - | `-0.002616` | Rotation in quaternion, X component | | 12 | `orientation_y` | Float (.6) | - | `-0.001748` | Rotation in quaternion, Y component | | 13 | `orientation_z` | Float (.6) | - | `-0.000868` | Rotation in quaternion, Z component | # Fixposition Odometry Converter This is an extra node is provided to help with the integration of the wheel odometry on your vehicle. For details, see the subfolder [fixposition_odometry_converter_ros1](fixposition_odometry_converter_ros1/README.md) (ROS 1) and [fixposition_odometry_converter_ros2](fixposition_odometry_converter_ros2/README.md) (ROS 2). When building the ROS 1 version add a file named 'CATKIN_IGNORE' to the `fixposition_odometry_converter_ros2` folder. # License This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details