HBot is designed to run on linux-enabled embedded designs, taking profit of various communautary projects (see dependencies). For the moment, three platforms are targeted:

  • any full-featured laptop or dekstop computer with Linux; this platform is especially used for testing on simulated robotics environments. Tests have been performed on these configurations:
    • Ubuntu 9.04 amd64
    • Debian unstable PowerPC G4
  • Motorola EZX: linux smartphones with xscale pxa270 SoC; hardware support for this platform is possible thanks to the OpenEZX project. I use the Angström distribution from the OpenEmbedded project.
  • BeagleBoard: SBC based on TI OMAP 3530. I plan to use the Angström distribution for this platform too.

Hardware controllers

HBot is the central computing entity for controlling a robot, but will need hardware or software control points for specialized moves:

  • Player is a communautary project serving as an hardware abstraction layer for a lot of robots; it can also be used for simulating a robotics environment with the Stage project. HBot along with Player has been tested with these configurations:
    • roomba 4xx, with mixed results; as I only have a roomba 530, I needed to tweak player a little to have it run. Moreover the control chain is too long for a satisfactory reactivity.
    • Stage simulator, using a fake pioneer robot, with bumpers, perfect odometry and laser rangefinder. This simulator is widely used for hbot development.
    • Both Player and Stage development kind of stopped, and I had to fix a few things to make them run in my environment. Here are the fixed source packages: player-3.0.2+.tar.gz and stage-3.2.2+.tar.gz
  • SSC-32 is a controller board developped by Lynxmotion for controlling up to 32 servmotors and getting up to 4 analog input. Communication between HBot-enabled host and SSC-32 is done by serial connection. Hardware features supported by HBot for SSC-32 are PWM devices (servos and continuous servos) and analogic devices (such as sharp IR sensors)
  • Roomba 5xx open interface enables low-level control of a roomba robot. Communication is done through a serial connection. Hardware features supported so far include: driving, start/stop vacuum motors, get odometry counters, bumpers, leds and songs.

Mapping features

One of the main goals of HBot is to create and maintain maps of robot's surroundings. Two kind of map exists, with several access algortihms for each:

  • Occupancy grid maps, with various implementation characteristics:
    • easy to be extended thanks to a structure by chunks
    • easy to be copied with a “copy-on-write” principle
    • easy to be maintained or deleted with reference counters on chunks
    • function operator for immediate access to map contents
  • Vectorial maps, using CGAL for its geometric data structures and algorithms
    • created from an occupancy grid map, thanks to the potrace project for bitmap vectorization
    • maintained as a polygon with holes thanks to CGAL
    • gives the possibility to simplify the map, execute a triangulation for pathfinding, and test a path for collision.

As said above, vectorial maps are created from occupancy grid maps. The latter are created with one of the map generation processes:

  • Occupancy map generation, by drawing the robot moves on the map as clear cells
  • Rangefinder map generation, using a sensor for analyzing the robot's environment
  • Rangefinder with SLAM (Simultaneous Location and Mapping) algorithm, with a basic particle filter; this is the same as Rangefinder map generation, except that map correlation is used to cope with positionning and sensors errors.

Movement Planning

HBot provides different level of abstraction for robot movements:

  • free moves, for directly command translation and rotation speeds
  • waypoint moves, for moving the robot to a given coordinates (without path calculation)
  • PID controlled moves, for a closed-loop controller on the move, that ensures a correct distance (or angle) is realized
  • Pathfinding, using a TA* algorithm (A* search algorithms based on a triangulated vectorial map) for computing move to a given destination avoiding known obstacles.

Autonomous decisions and remote control

HBot provides a scripting mechanism, for configuring the robot and the algorithms in use, and define specific behaviors depending on external or internal events. The same scripting mechanism can be used to send orders to the robot:

  • lua binding of HBot capabilities, for very simple definition and scripting of the robot configuration and behavior (e.g. jumping back when a bumper is hit, and cutting all moves for some seconds)
  • lua interpreter for remote control using a text interface
  • a graphical interface is available to remotely control the robot (sending lua commands to the robot over TCP/IP); this interface has the following features
    • display robot's maps
    • control robot basic moves from the GUI
    • control robot basic moves with a gamepad (including sensor scan and vacuum engine control)
    • give advanced move order to the robot, and get a feedback on the path found and used by the robot

Some pictures and videos are available.

features.txt · Last modified: 2014/01/24 15:43 by hadrien
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS La rache Driven by DokuWiki