0
$\begingroup$

Rosanswers logo

I only have two sensors, gps and and imu, that I am trying to integrate using robot_localization. I've created a launch file based on this question, pasted at the end.

There are a couple of issues. When I run the launch file I'm getting warnings about not having a base_link->map transform. The node handles the transform between odom and base link, do I need to create a transform from odom to map myself? There wasn't anything indicated in the linked answer so I assumed not, but I seem to be missing something. Warnings are pasted below

[ WARN] [1467926395.059514047]: Could not obtain base_link->map transform. Will not remove offset of navsat device from robot's origin.
[ WARN] [1467926397.126389602]: Could not obtain transform from map to base_link. Error was "map" passed to lookupTransform argument source_frame does not exist.

Second, the output of /odometry/gps is stuck at 0 for all values despite my gps data coming in fine, I would guess because of the map to base_link transform issue. Any help figuring out where I went wrong in my setup would be greatly appreciated.

EDIT- After rereading the robot_localization wiki I removed the map_frame line from the file as suggested but get the same results. Why is it still looking for a transform for the map_frame if I'm not using one?

<launch>
<node pkg="tf2_ros" type="static_transform_publisher" name="bl_imu" args="0 0 0 0 0 0 1 base_link imu_link" />

<!-- Start piksi driver, remap spp output to /gps/fix -->
<node pkg="swiftnav_piksi" type="piksi_node" name="piksi_node">
  <param name="port" value="/dev/ttyUSB0" />
  <remap from="fix" to="/gps/fix"/>
</node>

<!-- Start imu running, remap output to /imu/data -->
<node pkg="ros_erle_imu" type="imu_talker" name="imu_talker">
  <remap from="imu9250" to="/imu/data"/>
</node>

<!-- Start  -->
<node pkg="robot_localization" type="ekf_localization_node" name="ekf_localization" clear_params="true">
  <param name="frequency" value="30"/>
  <param name="sensor_timeout" value="0.1"/>
  <param name="two_d_mode" value="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="transform_time_offset" value="0.0"/>

  <param name="odom0" value="/odometry/gps"/>
  <param name="imu0" value="/imu/data"/>

  <rosparam param="odom0_config">[true, true, false,
                                  false, false, false,
                                  false, false, false,
                                  false, false, false,
                                  false, false, false]</rosparam>

  <rosparam param="imu0_config">[false, false, false,
                                 true,  true,  true,
                                 false, false, false,
                                 true,  true,  true,
                                 true,  true,  true]</rosparam>

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

  <rosparam param="process_noise_covariance">[0.05, 0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
                                    0.0, 0.05, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
                                    0.0, 0.0, 0.06, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
                                    0.0, 0.0, 0.0, 0.03, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
                                    0.0, 0.0, 0.0, 0.0, 0.03, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
                                    0.0, 0.0, 0.0, 0.0, 0.0, 0.06, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
                                    0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.025, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
                                    0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.025, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
                                    0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.04, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
                                    0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.01, 0.0, 0.0, 0.0, 0.0, 0.0,
                                    0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.01, 0.0, 0.0, 0.0, 0.0,
                                    0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.02, 0.0, 0.0, 0.0,
                                    0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.01, 0.0, 0.0,
                                    0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.01, 0.0,
                                    0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.015]</rosparam>

  <rosparam param="initial_estimate_covariance">[1e-9, 0,    0,    0,    0,    0,    0,    0,    0,    0,     0,     0,     0,    0,    0,
                                                  0,    1e-9, 0,    0,    0,    0,    0,    0,    0,    0,     0,     0,     0,    0,    0,
                                                  0,    0,    1e-9, 0,    0,    0,    0,    0,    0,    0,     0,     0,     0,    0,    0,
                                                  0,    0,    0,    1e-9, 0,    0,    0,    0,    0,    0,     0,     0,     0,    0,    0,
                                                  0,    0,    0,    0,    1e-9, 0,    0,    0,    0,    0,     0,     0,     0,    0,    0,
                                                  0,    0,    0,    0,    0,    1e-9, 0,    0,    0,    0,     0,     0,     0,    0,    0,
                                                  0,    0,    0,    0,    0,    0,    1e-9, 0,    0,    0,     0,     0,     0,    0,    0,
                                                  0,    0,    0,    0,    0,    0,    0,    1e-9, 0,    0,     0,     0,     0,    0,    0,
                                                  0,    0,    0,    0,    0,    0,    0,    0,    1e-9, 0,     0,     0,     0,    0,    0,
                                                  0,    0,    0,    0,    0,    0,    0,    0,    0,    1e-9,  0,     0,     0,    0,    0,
                                                  0,    0,    0,    0,    0,    0,    0,    0,    0,    0,     1e-9,  0,     0,    0,    0,
                                                  0,    0,    0,    0,    0,    0,    0,    0,    0,    0,     0,     1e-9,  0,    0,    0,
                                                  0,    0,    0,    0,    0,    0,    0,    0,    0,    0,     0,     0,     1e-9, 0,    0,
                                                  0,    0,    0,    0,    0,    0,    0,    0,    0,    0,     0,     0,     0,    1e-9, 0,
                                                  0,    0,    0,    0,    0,    0,    0,    0,    0,    0,     0,     0,     0,    0,    1e-9]</rosparam>
</node>

<!-- navsat_transform -->
<node pkg="robot_localization" type="navsat_transform_node" name="navsat_transform" respawn="true" output="screen">
   <param name="frequency" value="30"/>
   <param name="delay" value="3"/>
   <param name="magnetic_declination_radians" value="0.190240888"/>
   <param name="yaw_offset" value="1.570796327"/>
   <param name="zero_altitude" value="true"/>
   <param name="broadcast_utm_transform" value="false"/>
   <param name="publish_filtered_gps" value="true"/>
   <param name="use_odometry_yaw" value="false"/>
   <param name="wait_for_datum" value="false"/>

</node>

</launch>

EDIT 2- IMU

header: 
seq: 1522
stamp: 
secs: 1468000016
nsecs: 240786098
frame_id: imu_link
orientation: 
 x: 0.00976581033319
 y: -0.0116279097274
 z: 0.194468542933
 w: 0.979070544243
orientation_covariance: [0.0025, 0.0, 0.0, 0.0, 0.0025, 0.0, 0.0, 0.0, 0.0025]
angular_velocity: 
 x: 0.0
 y: 0.0
 z: 0.0
angular_velocity_covariance: [0.02, 0.0, 0.0, 0.0, 0.02, 0.0, 0.0, 0.0, 0.02]
linear_acceleration: 
 x: 0.287402331829
 y: 0.0
 z: 9.9489107132
linear_acceleration_covariance: [0.04, 0.0, 0.0, 0.0, 0.04, 0.0, 0.0, 0.0, 0.04]

GPS

header: 
seq: 1738
stamp: 
  secs: 1468000156
  nsecs: 872385898
frame_id: gps
status: 
  status: 0
  service: 1
latitude: 37.773469084
longitude: -122.417696017
altitude: 5.37939040617
position_covariance: [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]
position_covariance_type: 0

Originally posted by igd on ROS Answers with karma: 46 on 2016-07-07

Post score: 0


Original comments

Comment by Tom Moore on 2016-07-08:
Please post sample input messages.

Comment by igd on 2016-07-08:
Added the rostopic echo output for /gps/fix and /imu/data, I'll figure out how to share a bag file as well

EDIT- So the warnings were from incorrectly set frame_ids. If I delete the map frame and change odom and world to gps they're silenced. Position is still drifting a ton though.

Comment by igd on 2016-07-08:
Bag file https://github.com/swift-nav/ros_rover/blob/master/2016-07-08-20-03-16.bag GPS/IMU data only bag file https://github.com/swift-nav/ros_rover/blob/master/2016-07-08-21-42-57.bag

$\endgroup$

1 Answer 1

0
$\begingroup$

Rosanswers logo

Turns out my issue was from still not setting my frames correctly. I made a static transform between gps (the frame_id of my /gps/fix messages) and base link, left the map_frame as map, and set odom_frame and world_frame to odom, now I'm getting reasonable results. My launch file is below in case it might be useful to anyone with similar issues

<!-- Start piksi driver, remap spp output to /gps/fix -->
<node pkg="swiftnav_piksi" type="piksi_node" name="piksi_node">
  <param name="port" value="/dev/ttyUSB0" />
  <remap from="fix" to="/gps/fix"/>
</node>

<!-- Start imu running, remap output to /imu/data -->
<node pkg="ros_erle_imu" type="imu_talker" name="imu_talker">
  <remap from="imu9250" to="/imu/data"/>
</node>

<!-- Start  -->
<node pkg="robot_localization" type="ekf_localization_node" name="ekf_localization" clear_params="true">
  <param name="frequency" value="30"/>
  <param name="sensor_timeout" value="0.1"/>
  <param name="two_d_mode" value="false"/>
 
  <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="transform_time_offset" value="0.0"/>

  <param name="odom0" value="/odometry/gps"/>
  <param name="imu0" value="/imu/data"/>

  <rosparam param="odom0_config">[true, true, false,
                                  false, false, false,
                                  false, false, false,
                                  false, false, false,
                                  false, false, false]</rosparam>

  <rosparam param="imu0_config">[false, false, false,
                                 false,  false,  true,
                                 false, false, false,
                                 false,  false,  true,
                                 false,  false,  false]</rosparam>

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

  <param name="odom0_relative" value="false"/>
  <param name="imu0_relative" value="false"/>

  <param name="imu0_remove_gravitational_acceleration" value="true"/>
  <param name="print_diagnostics" value="true"/>

  <param name="odom0_queue_size" value="10"/>
  <param name="imu0_queue_size" value="10"/>

  <param name="debug"           value="false"/>
  <param name="debug_out_file"  value="debug_ekf_localization.txt"/>

  <rosparam param="process_noise_covariance">[0.05, 0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
                                          0.0, 0.05, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
                                          0.0, 0.0, 0.06, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
                                          0.0, 0.0, 0.0, 0.03, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
                                          0.0, 0.0, 0.0, 0.0, 0.03, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
                                          0.0, 0.0, 0.0, 0.0, 0.0, 0.06, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
                                          0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.025, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
                                          0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.025, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
                                          0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.04, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
                                          0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.01, 0.0, 0.0, 0.0, 0.0, 0.0,
                                          0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.01, 0.0, 0.0, 0.0, 0.0,
                                          0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.02, 0.0, 0.0, 0.0,
                                          0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.01, 0.0, 0.0,
                                          0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.01, 0.0,
                                          0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.015]</rosparam>

  <rosparam param="initial_estimate_covariance">[1e-9, 0,    0,    0,    0,    0,    0,    0,    0,    0,     0,     0,     0,    0,    0,
                                                  0,    1e-9, 0,    0,    0,    0,    0,    0,    0,    0,     0,     0,     0,    0,    0,
                                                  0,    0,    1e-9, 0,    0,    0,    0,    0,    0,    0,     0,     0,     0,    0,    0,
                                                  0,    0,    0,    1e-9, 0,    0,    0,    0,    0,    0,     0,     0,     0,    0,    0,
                                                  0,    0,    0,    0,    1e-9, 0,    0,    0,    0,    0,     0,     0,     0,    0,    0,
                                                  0,    0,    0,    0,    0,    1e-9, 0,    0,    0,    0,     0,     0,     0,    0,    0,
                                                  0,    0,    0,    0,    0,    0,    1e-9, 0,    0,    0,     0,     0,     0,    0,    0,
                                                  0,    0,    0,    0,    0,    0,    0,    1e-9, 0,    0,     0,     0,     0,    0,    0,
                                                  0,    0,    0,    0,    0,    0,    0,    0,    1e-9, 0,     0,     0,     0,    0,    0,
                                                  0,    0,    0,    0,    0,    0,    0,    0,    0,    1e-9,  0,     0,     0,    0,    0,
                                                  0,    0,    0,    0,    0,    0,    0,    0,    0,    0,     1e-9,  0,     0,    0,    0,
                                                  0,    0,    0,    0,    0,    0,    0,    0,    0,    0,     0,     1e-9,  0,    0,    0,
                                                  0,    0,    0,    0,    0,    0,    0,    0,    0,    0,     0,     0,     1e-9, 0,    0,
                                                  0,    0,    0,    0,    0,    0,    0,    0,    0,    0,     0,     0,     0,    1e-9, 0,
                                                  0,    0,    0,    0,    0,    0,    0,    0,    0,    0,     0,     0,     0,    0,    1e-9]</rosparam>
</node>

<!-- navsat_transform -->
<node pkg="robot_localization" type="navsat_transform_node" name="navsat_transform" respawn="true" output="screen">
   <param name="frequency" value="30"/>
   <param name="delay" value="3"/>
   <param name="magnetic_declination_radians" value="0.190240888"/>
   <param name="yaw_offset" value="1.570796327"/>
   <param name="zero_altitude" value="true"/>
   <param name="broadcast_utm_transform" value="true"/>
   <param name="publish_filtered_gps" value="true"/>
   <param name="use_odometry_yaw" value="false"/>
   <param name="wait_for_datum" value="false"/>

</node>

</launch>

Originally posted by igd with karma: 46 on 2016-07-08

This answer was ACCEPTED on the original site

Post score: 1


Original comments

Comment by JadTawil on 2017-09-25:
would you explain your reasoning in selectring the true/false configuration for odom0_config and imu0_config?

i.e. why is odom0 not true for velocities as well? from the documentaion of robot localization: If the odometry provides both position and linear velocity, fuse the linear velocity

Comment by yip on 2023-04-16:
i thought because when choose gps as odom, it doesn't provide the velocity as we konw.

Comment by Kaushal on 2023-08-02:
I am trying to make the robot localization work with Gazebo. I keep getting the above error. But it is random. Sometimes I get it sometimes I dont. I am spawning my URDF in Gazebo and robot state publisher is publishing to the TF tree. That is where I am getting the frames.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.