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

Problems with the robot Heading using robot_localization

asked 2016-02-19 11:20:36 -0500

Fenix gravatar image

updated 2016-03-03 09:01:18 -0500

For my Karma, you can see that I am new in ROS. Since some time, I am working with the package robot_localization, using the ROS Indigo distro and ubuntu 14.04, in a simulation using morse ( https://www.openrobots.org/wiki/morse ). I am working in the simulation of a vehicle that executed one lap in loop (like a square). On the vehicle, I have two odometers and one GPS, and I use the EKF_Kalman node for filtering the noise that I added in the signal of each sensor. The GPS not considered the location data in the format UTM, because in morse, the GPS's topic just shares position information from the robot in the scenario in the simulation (I not use the navsat_transform node).

The robot_localization package works, in the other reasons, for the indications made for the package's creators (Tutorials, REP 103 and 105), and the a lot answers in this site (Thanks a lot TOM MOORE). However, after of follow the indications presented by TOM in (yaw angle jumping erratically), it still I have an error with the robot heading, which it is cumulative after each turn in the scene. This is the EKF_launch file content:

<!-- Launch file for ekf_localization_node -->

<launch>

<node pkg="robot_localization" type="ekf_localization_node" name="ekf_localization" clear_params="true">

  <!-- ======== STANDARD PARAMETERS ======== -->

  <param name="frequency" value="50"/>

  <param name="sensor_timeout" value="0.5"/>

  <param name="two_d_mode" value="true"/>


  <!-- Defaults to "map" if unspecified -->
  <param name="map_frame" value="map"/>
  <!-- Defaults to "odom" if unspecified -->
  <param name="odom_frame" value="odom"/>
  <!-- Defaults to "base_link" if unspecified -->
  <param name="base_link_frame" value="base_footprint"/>
  <!-- Defaults to the value of "odom_frame" if unspecified -->
  <param name="world_frame" value="odom"/>

  <param name="transform_time_offset" value="0.1"/>

  <param name="odom0" value="car/odometry"/>
  <param name="odom1" value="car/odometro"/>
  <param name="gps0" value="car/gps"/>

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

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

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


  <param name="odom0_differential" value="true"/>
  <param name="odom1_differential" value="false"/>     
  <param name="gps0_differential" value="false"/>
  <!--param name="imu0_differential" value="false"/-->

  <param name="odom0_relative" value="false"/>
  <param name="odom1_relative" value="true"/>
  <param name="gps0_relative" value="false"/>
  <!--param name="imu0_relative" value="false"/-->

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

  <!-- ======== ADVANCED PARAMETERS ======== -->

  <param name="odom0_pose_rejection_threshold" value="50"/>
  <param name="odom0_twist_rejection_threshold" value="580"/>
  <param name="odom1_pose_rejection_threshold" value="50"/>
  <param name="odom1_twist_rejection_threshold" value="580"/>
  <param name="gps0_pose_rejection_threshold" value="1"/>
  <!--param name="twist0_rejection_threshold" value="1.2"/-->
  <!--param name="imu0_pose_rejection_threshold" value="10"/-->
  <!--param name="imu0_twist_rejection_threshold" value="0.1"/>
  <param name="imu0_linear_acceleration_rejection_threshold" value="0.1"/-->

  <param name="debug"           value="true"/>
  <!-- Defaults to "robot_localization_debug.txt" if unspecified. -->
  <param name="debug_out_file"  value="debug_ekf_localization.txt"/>


  <rosparam param="process_noise_covariance">[0.25, 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 ...
(more)
edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted
2

answered 2016-03-01 13:07:25 -0500

Tom Moore gravatar image

updated 2016-03-03 07:31:17 -0500

Please post a sample input message for each input topic. Also, you seem to have the same topic for odom0 and odom1, but there appears to be a typo in the second one (/car/odometro). Also, you have differential mode turn on for odom0, yet you are only fusing velocity data. Differential mode only applies to pose data. Finally, I'm not quite sure what you're saying the trouble is. If you only fuse yaw velocity, then I would expect the yaw error to grow every time you turn.

EDIT: I'm not sure that my quote from the other question and what I told you are inconsistent. In your question, you remarked

I have an error with the robot heading, which it is cumulative after each turn in the scene

I assumed you meant heading (yaw) variance. Since you are not measuring yaw directly, I was explaining why the variance would grow.

Also, in your /car/odometro topic, you have the frame_id set to odo (note the missing 'm'). The filter is going to ignore that message unless you provide a transform from odo->odom.

edit flag offensive delete link more

Question Tools

1 follower

Stats

Asked: 2016-02-19 11:20:36 -0500

Seen: 492 times

Last updated: Mar 03 '16