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

agurman's profile - activity

2022-08-30 03:16:05 -0500 received badge  Taxonomist
2021-02-02 20:47:31 -0500 marked best answer robot_localization with GPS map frame won't stay fixed

Hey guys,

I'm running a dual ekf setup of robot_localization to fuse GPS alongside navsat_transform_node which provideds the map->utm transform. I have been trying to figure this out for days now but i can't get this map frame's orientation to stay aligned with the odom frame?

I am running a gnss heading receiver which provides the true earth referenced heading which i fuse in both state estimation nodes as a pose message. My understanding is, since the only source of orientation is coming from this one message for both nodes, they should both always have the same rotation? The map frame initially is the same as odom but after some driving around and turning the robot it goes wild and very inaccurate. My gps is an RTK GPS setup i have confirmed that accuracy down to 5mm and a heading accuracy of 0.1 degree, so i know there is no issue with my GPS.

Below is my robot_localization configuration:

ekf_se_odom:
  frequency: 20
  two_d_mode: true
  sensor_timeout: 0.15
  transform_time_offset: 0.0
  transform_timeout: 0.0
  print_diagnostics: true
  debug: false

  map_frame: map
  odom_frame: odom
  base_link_frame: base_link
  world_frame: odom

  odom0: /warthog_velocity_controller/odom
  odom0_config: [false, false, false,
                 false, false, false,
                 true, true, false,
                 false, false, true,
                 false, false, false]
  odom0_queue_size: 10
  odom0_nodelay: true
  odom0_differential: false
  odom0_relative: false

  pose0: /gps/odometry
  pose0_config: [false, false, false,
                 false, false, true,
                 false, false, false,
                 false, false, false,
                 false, false, false]
  pose0_queue_size: 10
  pose0_nodelay: true
  pose0_differential: false
  pose0_relative: false

  imu0: /mcu_imu/data
  imu0_config: [false, false, false,
                false, false, false,
                false, false, false,
                false, false, true,
                true, true, false]
  imu0_differential: false
  imu0_nodelay: false
  imu0_relative: false
  imu0_queue_size: 10

  use_control: false

ekf_se_map:
  frequency: 20
  sensor_timeout: 0.15
  two_d_mode: true
  transform_time_offset: 0.0
  transform_timeout: 0.0
  print_diagnostics: true
  debug: false
  debug_out_file: "/home/alec/debug_ekf.txt"

  map_frame: map
  odom_frame: odom
  base_link_frame: base_link
  world_frame: map

  odom0: /warthog_velocity_controller/odom
  odom0_config: [false, false, false,
                 false, false, false,
                 true, true, false,
                 false, false, true,
                 false, false, false]
  odom0_queue_size: 10
  odom0_nodelay: true
  odom0_differential: false
  odom0_relative: false

  pose0: /gps/odometry
  pose0_config: [false, false, false,
                 false, false, true,
                 false, false, false,
                 false, false, false,
                 false, false, false]
  pose0_queue_size: 10
  pose0_nodelay: true
  pose0_differential: false
  pose0_relative: false

  odom2: /bunkbot_localization/odometry/gps
  odom2_config: [true,  true,  false,
                 false, false, false,
                 false, false, false,
                 false, false, false,
                 false, false, false]
  odom2_queue_size: 10
  odom2_nodelay: true
  odom2_differential: false
  odom2_relative: false

  imu0: /mcu_imu/data
  imu0_config: [false, false, false,
                false, false, false,
                false, false, false,
                false, false, true,
                true, true, false]
  imu0_differential: false
  imu0_nodelay: true
  imu0_relative: false
  imu0_queue_size: 10

  use_control: false

Below is my navsat_transform_node configuration:

navsat_transform:
  broadcast_utm_transform: true
  delay: 3.0
  frequency: 20
  magnetic_declination_radians: 0.0 # Set this depdending on origin location in the world
  publish_filtered_gps: true
  use_odometry_yaw: true
  wait_for_datum: false
  yaw_offset: 0.0 
  zero_altitude: true

I set the use_odometry_yaw to true as my heading is fused into the odometry and not from the IMU, i also set yaw_offset to 0 as the heading is 0 when facing east.

Here are some GIF's of the current behaviour:

image description

image description

And below is a GIF of my ... (more)

2021-01-29 03:57:17 -0500 received badge  Student (source)
2020-12-27 08:48:58 -0500 received badge  Favorite Question (source)
2020-01-20 09:35:40 -0500 received badge  Nice Answer (source)
2020-01-10 07:43:39 -0500 received badge  Famous Question (source)
2019-09-23 08:17:02 -0500 received badge  Notable Question (source)
2019-09-23 08:17:02 -0500 received badge  Popular Question (source)
2019-09-10 08:53:36 -0500 received badge  Famous Question (source)
2019-08-27 01:27:03 -0500 received badge  Famous Question (source)
2019-08-22 06:25:09 -0500 received badge  Famous Question (source)
2019-08-15 12:23:02 -0500 received badge  Famous Question (source)
2019-08-15 12:23:02 -0500 received badge  Notable Question (source)
2019-07-23 22:20:06 -0500 commented question ROS over VPN, communicate on different subnet

Thanks for all the useful comments guys. @gvdhoorn, you are correct, the VM is behind the firewall and i am trying to co

2019-07-23 22:19:56 -0500 commented question ROS over VPN, communicate on different subnet

Thanks for all the useful comments guys. @gvdhoorn, you are correct, the VM is behind the firewall and i am trying to co

2019-07-23 22:19:32 -0500 commented question ROS over VPN, communicate on different subnet

Thanks for all the useful comments guys. @gvdhoorn, you are correct, the VM is behind the firewall and i am trying to co

2019-07-23 22:18:25 -0500 commented question ROS over VPN, communicate on different subnet

Thanks for all the useful comments guys. @gvdhoorn, you are correct, the VM is behind the firewall and i am trying to co

2019-07-23 22:18:11 -0500 commented question ROS over VPN, communicate on different subnet

Thanks for all the useful comments guys. @gvdhoorn, you are correct, the VM is behind the firewall and i am trying to co

2019-06-19 12:19:03 -0500 received badge  Notable Question (source)
2019-06-08 20:03:00 -0500 received badge  Famous Question (source)
2019-06-08 20:03:00 -0500 received badge  Notable Question (source)
2019-06-06 04:28:18 -0500 received badge  Popular Question (source)
2019-06-06 02:34:49 -0500 marked best answer RTK GPS Localization in known static map

Hey guys,

I just have a few question based on localization and mapping with an RTK GPS setup for outdoor navigation.

I'm running a setup with RTK GPS positioning and heading, i use a dual kalman filter setup of the robot_localization package to produce an odom (wheel odometry + imu + gps heading) and map (wheel odometry + imu + gps heading + gps position) frame, Now my questions are:

  1. Can i localize my robot in a provided static map (say using map_server) using only RTK GPS (no amcl), i understand the navsat_transform_node i am using provides a transform for the map->odom frame (and implicitly map->base_link) and in conjuction with the utm transform i can localize the robot in the world, but upon initialization how does the robot know where to start in a given map (map and odom frame at t=0 start at the robot's origin), would i need to apply some sort of offset to the static map based on the robot's gps position on start, if so how?

  2. Is is possible to manually build a static map offline instead of using a real-time mapping algorithm such as SLAM. For example by grabbing a satellite image of the target field and building a map image based on some grid with a resolution and then coloring (as per value interpretation standards of the map_server package) the respective free, unknown and occupied space?.

2019-05-29 07:09:17 -0500 asked a question ROS over VPN, communicate on different subnet

ROS over VPN, communicate on different subnet Hey guys, Brief of my current setup, I have access to a VPN network using

2019-05-28 23:15:03 -0500 received badge  Self-Learner (source)
2019-05-28 00:25:49 -0500 answered a question Velodyne VLP16 frequency too low

I managed to resolve this issue. For anyone encountering this in the future, within the configuration web interface for

2019-05-25 02:20:38 -0500 received badge  Famous Question (source)
2019-05-24 12:21:50 -0500 received badge  Popular Question (source)
2019-05-24 06:46:00 -0500 received badge  Popular Question (source)
2019-05-24 06:46:00 -0500 received badge  Notable Question (source)
2019-05-23 00:49:07 -0500 edited question Velodyne VLP16 frequency too low

Velodyne VLP16 frequency too low Hey guys, Im running a velodyne VLP16, however i am having issues with it's publish fr

2019-05-22 01:37:01 -0500 edited question Velodyne VLP16 frequency too low

Velodyne VLP16 frequency too low Hey guys, Im running a velodyne VLP16, however i am having issues with it's publish fr

2019-05-22 01:35:54 -0500 edited question Velodyne VLP16 frequency too low

Velodyne VLP16 frequency too low Hey guys, Im running a velodyne VLP16, however i am having issues with it's publish fr

2019-05-22 01:18:42 -0500 edited question Velodyne VLP16 frequency too low

Velodyne VLP16 frequency too low Hey guys, Im running a velodyne VLP16, however i am having issues with it's publish fr

2019-05-22 00:36:43 -0500 edited question Velodyne VLP16 frequency too low

Velodyne VLP16 frequency too low Hey guys, Im running a velodyne VLP16, however i am having issues with it's publish fr

2019-05-22 00:35:36 -0500 commented answer RTK GPS Localization in known static map

Thanks tom for that reply! I did manage to figure this out, when i start my mapping routine, i save the current gnss pos

2019-05-21 22:18:08 -0500 edited question Velodyne VLP16 frequency too low

Velodyne VLP16 frequency too low Hey guys, Im running a velodyne VLP16, however i am having issues with it's publish fr

2019-05-21 22:17:25 -0500 asked a question Velodyne VLP16 frequency too low

Velodyne VLP16 frequency too low Hey guys, Im running a velodyne VLP16, however i am having issues with it's publish fr

2019-05-15 03:08:37 -0500 received badge  Famous Question (source)
2019-05-15 03:08:33 -0500 received badge  Notable Question (source)
2019-05-07 00:01:10 -0500 commented question Merge multiple saved maps

You are correct, the origin of a map is the bottom left corner, this logic is fine, and based on the origin parameter in

2019-05-06 23:53:52 -0500 received badge  Popular Question (source)
2019-05-05 23:19:32 -0500 commented question Merge multiple saved maps

Hey! thanks for the reply, unfortunately this doesnt work for me. If i have a map say, Map A, with some origin, and i go

2019-05-05 23:19:21 -0500 commented question Merge multiple saved maps

Unfortunately this doesnt work for me. If i have a map say, Map A, with some origin, and i go out and record another map

2019-05-05 20:24:52 -0500 asked a question Merge multiple saved maps

Merge multiple saved maps Hey guys, Does anyone know of any package, or method, to combine multiple saved maps. I am no

2019-04-21 05:30:01 -0500 marked best answer ros3djs URDF not visible, but mesh loading works?

Hey guys,

Im trying to use ros3djs to setup a web interface and load my URDF. I've seen this problem around on the net but nobody seems to have a fix for it? My urdf just isn't loading however there is no visible errors. Below is how i am currently loading in the urdf:

this.rosBridgeServer = new ROSLIB.Ros({
  url: 'ws://localhost:9090'
})
//Create 3D Ros viewer.
this.rosViewer3D = new ROS3D.Viewer({
  divID : this.rosViewer3DContainer.id,
  width : 800,
  height : 600,
  antialias : true,
  intensity : 0.05,
  background : '#303030'
});

// Add a grid.
this.rosViewer3D.addObject(new ROS3D.Grid());

// Setup a client to listen to TFs.
this.rosTFClient = new ROSLIB.TFClient({
  ros : this.rosBridgeServer,
  angularThres : 0.01,
  transThres : 0.01,
  rate : 10.0
});

// Setup the URDF client.
this.rosUrdfClient = new ROS3D.UrdfClient({
  ros : this.rosBridgeServer,
  tfClient : this.rosTFClient,
  path : 'http://127.0.0.1:3000/',
  rootObject : this.rosViewer3D.scene,
  loader : ROS3D.COLLADA_LOADER,
  param: 'robot_description'
});

I am using the following library versions (where ros3djs is the most recent version downloaded for local debugging):

<script src="https://static.robotwebtools.org/threejs/r89/three.min.js"></script>
<script src="https://static.robotwebtools.org/threejs/current/STLLoader.js"></script>
<script src="https://static.robotwebtools.org/EventEmitter2/0.4.14/eventemitter2.js"></script>
<script src="https://static.robotwebtools.org/ros3djs/0.18.0/ColladaLoader.js"></script>
<script src="https://static.robotwebtools.org/roslibjs/0.20.0/roslib.min.js"></script>
<script src="/js/ros3d.js"></script>

All my mesh files are in both .stl and .dae, i know the collada loader is working because i can load a mesh completely fine by using the ros3djs MeshResource:

const mesh = new ROS3D.MeshResource({
    resource: 'warthog_description/meshes/chassis.dae',
    path: 'http://localhost:3000/',
    warnings: true
});

this.rosViewer3D.add(mesh)

and in ros3d.js in the Urdf class if i make the following change to load the meshes instead of the SceneNode all the meshes from the urdf file are loaded (but of course not correctly linked to their respective TF's as SceneNode does)

Line 54670 from ros3d.js:

// ignore mesh files which are not in Collada or STL format
if (fileType === '.dae' || fileType === '.stl') {
  // create the model
  var mesh = new MeshResource({
    path : path,
    resource : uri,
    loader : loader,
    material : colorMaterial
  });

  // check for a scale
  if(link.visuals[i].geometry.scale) {
    mesh.scale.copy(visual.geometry.scale);
  }

  // create a scene node with the model
  var sceneNode = new SceneNode({
    frameID : frameID,
    pose : visual.origin,
    tfClient : tfClient,
    object : mesh
  });
  // this.add(sceneNode);
  this.add(mesh); // ADDING THIS LINE LOADS ALL MESHES COMPLETELY FINE??????
} else {
  console.warn('Could not load geometry mesh: '+uri);
}
2019-04-21 00:24:54 -0500 answered a question ros3djs URDF not visible, but mesh loading works?

Issue solved! For anyone who run's into this issue, my problem was that the tf2_web_republisher node wasn't running. Th

2019-04-20 21:31:01 -0500 commented question robot_localization estimate drifts for a stationary robot in rviz

A couple of things, how are you handling your IMU data, is it being passed through a filter such as imu_filter_madgwick

2019-04-20 21:20:19 -0500 asked a question ros3djs URDF not visible, but mesh loading works?

ros3djs URDF not visible, but mesh loading works? Hey guys, Im trying to use ros3djs to setup a web interface and load

2019-04-17 09:16:35 -0500 received badge  Teacher (source)