A common tool in robot navigation and control is a local coordinate frame and a set of utilities for converting from geographic coordinates (a geodetic system) to a local, Cartesian coordinate frame. As an example, consider the image below form the North east down Wikipedia page.
In this case the North east down (NED) coordinate frame is represented by the green rectangle. The location of this rectangle is specified as an latitude and longitude point (phi and lambda), the local origin. Now we can produce a one-to-one mapping between the NED frame and the latitude, longitude, altitude frame. Navigation and control within this local frame is much simpler, because we are using a rectilinear coordinate frame in meters, rather than decimal degrees.
There are a number of conventions for local coordinate frames, depending on the application. For aerospace applications the NED and earth-centered, earth-fixed (ECEF) frames are common. Below are two simple local frame conventions that are suitable to navigation and control of outdoor robots with limited transit distances (1000's of m).
Local Coordinate Frame Options
The code (C++, Python and MATLAB) for both options is in the geonav_transform ROS package (http://wiki.ros.org/geonav_transform)
- The C++ inline functions for UTM conversions are in the include/geonav_transform/navsat_conversions.h header file.
- The Python modules are installed in the Python environment as part of the ROS package (http://wiki.ros.org/rospy_tutorials/Tutorials/Makefile). The interface for both is documented on the ROS wiki, API section: http://docs.ros.org/indigo/api/geonav_transform/html/py-modindex.html
- The MATLAB toolboxes for geonav and alvinxy are in the
matlabfolder of the package. See the
The geonav local coordinates are based on UTM coordinates. The local origin location is specified as a latitude and longitude. To convert a second latitude and longitude location to the a local position, relative to the origin, both coordinates are transformed to a UTM. The difference between the UTM Eastings is the local X location. The difference between the UTM Nothings is the local Y location.
AlvinXY coordinates are very simple. The equirectilinear 2D system essentially considers the x-axis to point east and the y-axis to point north (east-north-up or ENU, which is consistent with ROS REP 103) We define an arbitrary latitude and longitude origin(lat0 and lon0) which is equivalent to x=0, y=0. Typically the origin is chosen to be a small distance south and west of the work area so that the resulting x and y values are small (order of 1000's) and positive. With this origin (lat0,lon0) the x/y position of any other lat/lon point is determined based on a conversion from degrees (lat/lon) to meters. The conversion comes from Bowditch!
Below is an implementation of the conversion from Chris Murphy's paper: C. Murphy and H. Singh, "Rectilinear coordinate frames for Deep sea navigation," 2010 IEEE/OES Autonomous Underwater Vehicles, Monterey, CA, 2010, pp. 1-10.