Documentation for the Validation and Verification of the OSMOSIS experiment using GenoM3 and various V&V tools/framework.

This project contains all the GenoM3 components needed for the OSMOSIS case study . It can be used with ROS or PocoLibs middleware, with a simulation in gazebo or on the real robot.


Most components are common to both simulation and the real robot, even if some are on the robot only.

Common components

  • Navigation is in charge of the waypoints navigation of the robot. Given a graph of positions x,y,z, (even if z is ignored) with their connectivity, the module is able to produce a sequence of targets in the target port, the robot must reach to get to the final position.

  • RWLSensor is a mokup of a module used to check the airport RunWay light.

  • PotentialField produces a speed reference (vx,wz) to try to reach the target port (from Navigation), avoiding obstacles found in a Scan (a PointCloud from velodyne in this experiment, or a LaserScan for other experiments). This implementation is heavily inspired from the following paper (and the matlab code provided by the authors): Avoiding local minima in the potential field method using input-to-state stability, 10.1016/j.conengprac.2016.07.008. The module figures out which of PCL or Scan to use according to which port is available. In the OSMOSIS experiment, it uses the scan from an Hokuyo LRF, with Minnie it takes the Point Cloud from a Velodyne. It builds a "discretized" OccupancyGrid and figure out where are the contiguous obstacles. It produces a repulsive force, an attractive one and a V force (see the paper) and execute the result after adding them all.

  • joystick publishes the status of the joystick buttons and axes. These are used both by rmp440 and SafetyPilot to take control of the robot.

  • SafetyPilot is getting the speed produced by PotentialField and is responsible to stop the robot in case, despite PotentialField avoiding obstacles, it is getting too close to an obstacle. Moreover, it reads (at all time) the joystick port so that the user can take control and override the PotentialField PFCmd speed. In fact, if the robot gets too close to an obstacle and stop, the joystick is the only solution to get the robot away from it. It produces a speed reference which is usually tracked by rmp440 (or RobotDriver in the OSMOSIS experiment).

  • RobotDriver we do not have the Robotnik source to fully implement this component. For now it is a proxy to get the /odom topic from the real robot controler (and copy them in the proper Pose port), and provides the /summit_xl_control/cmd_vel topic to the real controller from the SafetyPilot Cmd port.

  • LaserDriver tested with an Hokuyo UTM-30LX at LAAS and on the real robot. The simulator version (git branch proxy_simu) will grab and copy the sensor_msgs/LaserScan topics from Gazebo, and write it in the Scan port.

Robot only components

  • GPSDriver, even if GPS driver was initially developped for this module (inspired by the same componend developped at ONERA) we would now use the one developped at LAAS, which is more versatile: gps. It publishes a gps Pose position. With an rtk base, it provides a very accurate position.

  • IMUDriver publishes the angular velocity and acceleration. This can be used by pom.

The figure below show all the components as well as their ports (produced by the component they are attached to, and read by the component(s) with an arrow pointing to the port). For example the pose port is produced by pom and read by Navigation, RWLSensor and PotentialField.

Most components are using some IDL types defined in the openrobots-idl2 and felix-idl projects.

Robot setup

The exact setup used on the robot is the following. Most of the GenoM components are available as sub-projects.

*OSMOSIS* on the real robot

Simulation setup

There is also a simulation setup which can be used (instructions on how to install it can be found here ). It has less functional modules (as some of them are handled by the Gazebo simulator).

*OSMOSIS* in simlation