segwayrmp
Drivers

Segway RMP mobile robot. More...

Segway RMP mobile robot.

Todo:
  Enable advanced functionality (ramp speeds, etc)

The segwayrmp driver provides control of a Segway RMP (Robotic Mobility Platform), which is an experimental robotic version of the Segway HT (Human Transport), a kind of two-wheeled, self-balancing electric scooter. Four wheeled versions are also available, and consist of two independent two-wheeled platforms bolted together. Thus, two instances of this driver should be able to control a four-wheeled version.

The driver has been updated to the 3.0 API to the point that it compiles and runs. Position2d commands and odometry have been tested and work, and both batteries report voltages. Testing has only been done over USB, with a Segway RMP400 platform.

This segwayrmp driver supports a usb interface for the newer RMP UI protocol. It also maintains compatibility for the older CAN interface.

Compile-time dependencies

- libcanlib (from Kvaser)

Notes

- Because of its power, weight, height, and dynamics, the Segway RMP is a potentially dangerous machine. Be very careful with it.
- Although the RMP driver does not actually support motor power control from software, for safety you must explicitly enable the motors using a `PLAYER_POSITION2D_REQ_MOTOR_POWER` or `PLAYER_POSITION3D_REQ_MOTOR_POWER` (depending on which interface you are using). You must also enable the motors in the command packet, by setting the `state` field to 1.
- For safety, this driver will stop the RMP (i.e., send zero velocities) if no new command has been received from a client in the previous 400ms or so. Thus, even if you want to continue moving at a constant velocity, you must continuously send your desired velocities.
- Most of the configuration requests have not been tested.
- Currently, the only supported type of CAN I/O is "kvaser", which uses Kvaser, Inc.'s CANLIB interface library. This library provides access to CAN cards made by Kvaser, such as the LAPcan II. However, the CAN I/O subsystem within this driver is modular, so that it should be pretty straightforward to add support for other CAN cards.
- This driver uses version 2.0 of the Segway RMP Interface Guide as a reference. It may break compatibility with the older CAN only models, but none were available for testing to verify.

Provides

- position2d
  - This interface returns odometry data, and accepts velocity commands.
- position3d
  - This interface returns odometry data (x, y and yaw) from the wheel encoders, and attitude data (pitch and roll) from the IMU. The driver accepts velocity commands (x vel and yaw vel).
- power
  - Returns the current battery voltage (72 V when fully charged).
- power
  - Returns the current UI battery voltage (12 V when fully charged).

Configuration requests

- position interface
  - PLAYER_POSITION2D_REQ_MOTOR_POWER
- position3d interface
  - PLAYER_POSITION3D_REQ_MOTOR_POWER

Requires

- none

Configuration file options

- bus (string)
  - Default: "canbus"
  - Communication Protocol: "usb" or "canbus"
- usb_device (string)
  - Default: "/dev/ttyUSB0"
  - Device port, when using bus option "usb"
- canio (string)
  - Default: "kvaser"
  - Type of CANbus driver, when using bus option "canbus"
- max_xspeed (length / sec)
  - Default: 0.5 m/s
  - Maximum linear speed
- max_yawspeed (angle / sec)
  - Default: 40 deg/sec
  - Maximum angular speed

Example

    driver
    (
      name "segwayrmp"
      provides ["position2d:0" "position3d:0" "power:0" "ui:::power:1"]
      bus "usb"
      usb_device "/dev/ttyUSB1"
      max_xspeed 1.5
      max_yawspeed 80
    )

Author
  John Sweeney, Brian Gerkey, Andrew Howard, Eric Grele, Goutham Mallapragda, Anthony Cascone, Rich Mattes

Last updated 12 September 2005 21:38:45