ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

CJ Davies's profile - activity

2019-09-18 12:34:43 -0500 received badge  Taxonomist
2019-05-20 01:53:53 -0500 marked best answer [robot_localization] Non zero altitude in /gps/filtered when ~zero_altitude & ~two_d_mode are true

I am trying to use robot_localization to fuse data from a 9DOF IMU & a GPS, via one instance of ukf_localization_node & an instance of navsat_transform_node. I think my setup is more or less working, except that the messages published by the navsat_transform_node on /gps/filtered have a non zero altitude value. Altitude is not important for my application & having the altitude as 0 in these messages would make integration/debugging much easier for me.

The NMEA data from my GPS receiver includes altitude, so the messages on /fix contain this information & I can watch it fluctuate up & down as the receiver sits on my desk. The messages on /odometry/gps have a 0 altitude & the messages on /odometry/filtered have an almost 0 altitude (it fluctuates, but is always on the magnitude of E-14 or E-15). The altitude value in the /gps/filtered messages is fixed at what is presumably an old value from /fix (right now it is 48.4) & does not fluctuate at all as I move the IMU or as the altitude seen in /fix changes.

I have ~zero_altitude set to true in the navsat_transform_node & I have ~two_d_mode set to true in the ukf_localization_node. I have tried setting ~initial_state to specify Z as 0 but this had no effect.

Is this simply because ~zero_altitude only affects the Odometry messages on /odometry/gps & not the NavSatFix messages on /gps/filtered? Is there a solution?

<launch>

  <!-- ======= ======= ======= ======= ======= ======= =======  -->

  <!-- Specify the transform between the 'imu' frame (that IMU data are published on) & the base_link frame (that is rigidly affixed to the robot) -->
  <node pkg="tf2_ros" type="static_transform_publisher" name="bl_imu" args="0 0 0 0 0 0 1 base_link imu" />

  <!-- Specify the transform between the 'gps_link' frame (that GPS data are published on) & the base_link frame (that is rigidly affixed to the robot) -->
  <node pkg="tf2_ros" type="static_transform_publisher" name="bl_gps" args="0 0 0 0 0 0 1 base_link gps_link" />

  <!-- ======= ======= ======= ======= ======= ======= =======  -->

  <!-- subscribes to /nmea_sentence which is raw NMEA data from Arduino/node.js, converts to sensor_msgs/NavSatFix format & publishes on /fix  -->
  <node pkg="nmea_navsat_driver" type="nmea_topic_driver" name="nmea_topic_driver" respawn="true">

  </node>

  <!-- ======= ======= ======= ======= ======= ======= =======  -->

  <!-- subscribes to /odometry/gps (GPS data as odometry from navsat_transform_node) & /imu/data (IMU data from Arduino/node) & publishes on /odometry/filtered -->
  <node pkg="robot_localization" type="ukf_localization_node" name="ukf_localization_node" respawn="true" clear_params="true">

    <param name="map_frame" value="map"/>
    <param name="odom_frame" value="odom"/>
    <param name="base_link_frame" value="base_link"/>
    <param name="world_frame" value="odom"/>

    <param name="imu0" value="/imu/data" />

    <!-- specifies what values the IMU data provides (order is position [F], orientation [T], velocity [F], angular velocity [T], linear acceleration [T] )  -->
    <rosparam param="imu0_config">
      [false, false, false,
      true, true, true,
      false, false, false,
      true, true, true,
      true, true, true]
    </rosparam>

    <param name="imu0_differential" value="false"/>

    <param name="odom0" value="/odometry/gps" />

    <!-- specifies what values the odometry data provies (order is position [T], orientation [F]. velocity [F], angular velocity [F], linear acceleration [F] ) -->
    <rosparam param="odom0_config">
      [true, true, false,
      false, false, false,
      false, false, false,
      false, false, false,
      false, false, false]</rosparam>

    <param name="odom0_differential" value="false ...
(more)
2019-04-08 01:09:00 -0500 marked best answer robot_localization - IMU orientation query

I am trying to use robot_localization to fuse data from a BNO055 IMU & a MTK3339 GPS receiver. I have what appears to be sensible output coming out of the system, however I would like to clarify one thing about the IMU orientation.

My launch file is linked below [1] & sets up a nmea_topic_driver to convert raw NMEA messages from the MTK3339 into NavSatFix messages, then a navsat_transform_node & a ukf_localization_node. The outputs that I am interested in are filtered IMU data (as orientation in x,y,z Euler angles) & filtered GPS data (as latitude & longitude) so I am subscribing to /odometry/filtered (which I then convert from quaternion to Euler) & /gps/filtered.

The quick start guide for the BNO055 [2] shows on page 4 that it outputs orientation data in the ENU convention expected by REP-0103 & robot_localization, except that it gives 0° at North rather than East, so I have set yaw_offset for navsat_transform_node to 1.5707963 as explained by the doc. However there doesn't appear to be an equivalent parameter for the ukf_localization_node. Do I need to specify this 90° in the transform between base_link frame & imu frame?

Any other input on other parts of my setup that may be wrong are of course welcomed!

[1] https://gist.github.com/CJ-Davies/4eb...

[2] https://ae-bst.resource.bosch.com/med...

2019-03-03 12:21:37 -0500 received badge  Famous Question (source)
2018-01-01 15:55:42 -0500 received badge  Notable Question (source)
2017-11-30 02:21:25 -0500 received badge  Famous Question (source)
2017-11-29 08:26:32 -0500 received badge  Notable Question (source)
2017-10-23 03:49:39 -0500 received badge  Popular Question (source)
2017-10-20 10:10:42 -0500 commented question [robot_localization] Non zero altitude in /gps/filtered when ~zero_altitude & ~two_d_mode are true

Thankyou, my mistake was pressing the Preformatted Text button first & then pasting where it said 'enter code here'.

2017-10-20 10:09:51 -0500 edited question [robot_localization] Non zero altitude in /gps/filtered when ~zero_altitude & ~two_d_mode are true

[robot_localization] Non zero altitude in /gps/filtered when ~zero_altitude & ~two_d_mode are true I am trying to us

2017-10-20 09:35:27 -0500 asked a question [robot_localization] Non zero altitude in /gps/filtered when ~zero_altitude & ~two_d_mode are true

[robot_localization] Non zero altitude in /gps/filtered when ~zero_altitude & ~two_d_mode are true I am trying to us

2017-10-16 05:01:40 -0500 received badge  Enthusiast
2017-10-13 07:11:34 -0500 received badge  Popular Question (source)
2017-10-09 09:54:54 -0500 asked a question robot_localization - IMU orientation query

robot_localization - IMU orientation query I am trying to use robot_localization to fuse data from a BNO055 IMU & a