Long-term Localisation with LIDAR (L3)
L3 is a state-estimator for road-vehicles, using inexpensive readily-available LIDAR sensors. Orthogonally-mounted off-the-shelf SICK LIDAR scanners are used to estimate vehicle state using an information- theoretic optimisation. The L3 software runs in real-time, and has been tested over hundreds of kilometres (and many months) of data taken by the road-vehicles of the Mobile Robotics Group at Oxford.
L3 uses the concept of push-broom LIDAR. In this scheme, a statically-mounted LIDAR is "pushed" through the environment, building up a 3D representation, as shown below:
This converts a single 2D LIDAR into a 3D sensor. To reconstruct this point cloud, we need to know the velocity (both angular and linear) of the sensor through the environment. For this, we make use of a second, horizontally-mounted LIDAR to extract the rotational and linear velocity components:
Using these velocities, we can then reconstruct a local "swathe" of retrospective point-cloud data.
An example robotics toolkit, written in Javascsript to show the fundamentals of Simultaneous Localisation and Mapping (SLAM), and the principles of Markovian localisation. Example localisation methods in include that of the Extended Kalman Filter (EKF), and a Particle Filter (PF).
A set of bindings for the Mission Oriented Operating System (MOOS), maintained by the Oxford Mobile Robotics Group. The bindings use Boost.Python as the interface layer, allowing the code to make full use of MOOS improvements (as of MOOS V10, binary message transmission, compression, asynchronous send-receive).
from pymoos.XPCTcpSocket import * from pymoos.CMOOSMsg import * from pymoos.CMOOSCommObject import * from pymoos.CMOOSCommPkt import * ... m = MOOSApp() m.SetOnConnectCallBack( m.DoRegistrations ) m.SetOnMailCallBack( m.MailCallback ) ... m.Run()
Gumstix modules are powerful, lightweight computing modules developed specifically for embedded applications. Get the source available here, then:
$ bitbake -b moos.bb
import com.robots.MOOS.JMOOSCommClient; JMOOSCommClient j = new JMOOSCommClient( app_name, server, port );