ohmm-sw


Open Hardware Mobile Manipulator (OHMM) Software

Open Hardware Mobile Manipulator (OHMM) Software

http://ohmm-sw.googlecode.com/svn/wiki/images/grasp-closeup-pov-lcd-small.jpg'>http://ohmm-sw.googlecode.com/svn/wiki/images/grasp-closeup-pov-lcd-tiny.jpg' align='left' />

This repository contains the Open Hardware Mobile Manipulator AVR Low Level Processor (LLP) and ARM High Level Processor (HLP) sourcecode.

The OHMM hardware source is also open.

The LLP we currently use is the Pololu Orangutan SVP 1284, which is based on the Atmel ATmega1284P AVR microcontroller. Code for the LLP is developed with avr-gcc.

The HLP we currently use is the Pandaboard A2+ (not ES) running Ubuntu natty (11.04). Code for the HLP is mainly in Java. We provide ARM builds for a variety of external libraries including OpenCV, JavaCV, libfreenect, and OpenNI (in our testing libfreenect is significantly faster and more reliable than OpenNI on the Pandaboard, and it now includes depth-to-RGB registration). We are currently developing a ROS interface.

The Monitor Program

The main code for the LLP is a monitor program that communicates with the HLP over USB serial. A user can interact directly with the monitor in ASCII command mode using a terminal program (e.g. minicom or ckermit). Or the OHMM Java layer can run on the HLP and manage communications with the LLP, adding extended high-level functionality including vision processing and JScheme scripting. With a longer USB cable it is possible to substitute any external computer compatible with the Orangutan SVP for the onboard HLP. (Mac OS X is unfortunately not currently compatible; Ubuntu running in VMware is a workaround.) We are also experimenting with an option to use a netbook as the onboard HLP.

The LLP monitor program consists of the following set of modules; full documentation for each is given in the corresponding header files llp/monitor/ohmm/*.h:

  • ohmm - top-level module
  • task - schedules foreground and background periodic tasks
  • wdt - manges the hardware watchdog dimer
  • lcd - interface to the LLP 2x16 LCD display
  • bat - monitors the battery
  • sense - interface to analog and digital sensors connected to the LLP
  • mot - interface and velocity controller for the drive motors and encoders
  • ax12 - general half-duplex interface to daisy-chained Robotis AX12 servos attached to an async serial port on the LLP
  • arm - arm kinematics arm-specific control of the AX12s
  • hlp - HLP serial communications
  • cmd - monitor command processor

Installation

The build system currently supports Ubuntu lucid (10.04) i386 and natty (11.04) i386 and armel, only. Facilities are included to support site-local extensions for various things (currently llp/monitor, hlp/ohmm, hlp/scripts/*.tar.gz, hlp/scripts/nm-scripts/nm-system-connections, and hlp/ext/ejre) by looking for a parallel directory tree under ohmm-sw-site, the location of which is either specified by the environment variable OHMM_SW_SITE or, if that is not defined, assumed to be a sibling of the top-level directory of the ohmm-sw checkout. See the README files in those places for more info.

Typical build and install steps from a fresh checkout on the HLP:

  1. hlp/scripts/ohmm-configure.sh is provided as a convenience to do initial system configuration, including installing various optional packages both from the official repositories and from hlp/ext/*.
  1. Connect the LLP to the HLP and power it up. Then run make; make program in llp/monitor to flash the LLP.

  2. Run make in hlp/ohmm to build the HLP Java code.

  3. ./run-class OHMMShell -r PORT in that same directory runs a JScheme REPL to interact with the robot, where PORT is usually /dev/ttyACM1.

  4. ./run-class CvDemo or ./run-class CvKinect run camera and Kinect demos, respectively; these will open a window iff a display is available, i.e. if you are running headless but logged in with ssh -X -C or if you connected a monitor, keyboard, and mouse to the HLP and did a local graphical login. They will also start a HTTP multipart image server which can be accessed at IP:8080/server.html where IP is the network address of the HLP. The latter typically uses much less bandwidth than X remote display with ssh -X -C.

License

GPLv2

This information and/or software is provided by the author "as is" and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall the author be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this information and/or software, even if advised of the possibility of such damage.

Project Information

The project was created on Dec 29, 2011.

Labels:
Hardware Robotics Arm avr pandaboard kinect opencv