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

Indoor GPS with Navsat_transform

asked 2017-05-02 10:39:33 -0600

bluehash gravatar image

I have a set of Marvelmind robotics indoor GPS beacons and have it setup with pose data(no yaw, only x,y) published on a topic with msg type: nav_msgs::Odometry

Is there a way to get this works with the Navsat transform? UTM co-ordinates are not used here.

Is this the route to go:

  1. One instance of robot_localization with continuous sensors, in odom_frame.
  2. Second instance of robot_localization with output of (1.) + GPS(pose0) in map frame

I'm using this documentation as a reference. Thanks.

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted

answered 2017-05-04 02:47:58 -0600

Tom Moore gravatar image

updated 2017-05-04 11:24:24 -0600

The point of navsat_transform_node is to convert GPS data into world-frame coordinates in a nav_msgs/Odometry message. The sensor you are describing is not actually a GPS, and already provides the (X, Y) position of your robot, so just use that data directly as an input to the EKF (i.e., don't bother running navsat_transform_node).

Also, I don't recommend feeding the output of (1) into (2). Just fuse the same inputs that (1) has, and add the input for the indoor GPS sensor.

Remember that you don't want to have more than one EKF input measuring the same pose variable (X, Y, Z, roll, pitch, or yaw).

EDIT 1 to clarify previous answer:

Sure, you can run two state estimation nodes. You can do something like this:

  • EKF (odom): fuse wheel encoder odometry (velocities) and IMU
  • EKF (map): fuse wheel encoder odometry (velocities), IMU, and the nav_msgs/Odometry message that is being spit out by your indoor "GPS."

My point is that if you had a real GPS unit, the role of navsat_transform_node would be to convert latitude and longitude into a pose that you can fuse into the second EKF. Since you already have the indoor beacons spitting out pose data in a message type that the EKF can take in directly, you don't need navsat_transform_node.

edit flag offensive delete link more


A little confused with the documentation here and what you said. Do I still use two state estimation nodes? The GPS is discontinuous. 1. Cont. sensors with world_frame as odom. 2. Cont. sensors + GPS with world_frame as map. What happens to the output of 1. in this case?

bluehash gravatar image bluehash  ( 2017-05-04 07:24:46 -0600 )edit

Please correct me if I am wrong, to my current understanding navsat_transfrom_node not only transforms GPS data into nav_msgs/Odometry message but also finds a transformation between the starting point of the robot and the first GPS measurement. My indoor GPS beacons report poses in the different coordinate frame then the starting frame of the robot. Is there any package that would take care of this transformation for me? Alternatively, what would be the most convenient way to achieve the same behavior? Modify navsat_transform_node to work with indoor GPS beacons instead of normal GPS?

Chrisando gravatar image Chrisando  ( 2019-06-06 06:24:59 -0600 )edit

You should just be able to create a simple python node that takes in the initial pose of your robot in your world frame, and the initial pose that comes from your indoor GPS beacons, creates a static transform between them, and publishes. Then the EKF can receive your GPS poses, transform them, and fuse them.

Tom Moore gravatar image Tom Moore  ( 2019-06-13 02:19:46 -0600 )edit

Thank you Tom for answer! How about to orientation problem? (GPS only gives x,y,z position). Shall I make my robot move forward some distance and calculate orientation based on that? How is it usually done? Thank you!

Chrisando gravatar image Chrisando  ( 2019-06-13 03:11:17 -0600 )edit

If you lack an IMU, then yes, that seems like a valid approach.

Tom Moore gravatar image Tom Moore  ( 2019-07-03 04:10:02 -0600 )edit

Question Tools

1 follower


Asked: 2017-05-02 10:39:33 -0600

Seen: 777 times

Last updated: May 04 '17