Public Member Functions | Protected Attributes | Private Member Functions | Private Attributes | List of all members
SegwayRMP Class Reference
Inheritance diagram for SegwayRMP:
ThreadedDriver Driver

Public Member Functions

 SegwayRMP (ConfigFile *cf, int section)
virtual int MainSetup ()
 Sets up the resources needed by the driver thread.
virtual void MainQuit ()
 Cleanup method for driver thread (called when main exits)
virtual int ProcessMessage (QueuePointer &resp_queue, player_msghdr *hdr, void *data)
 Message handler.
int CanBusSetup ()
 Sets up the CAN bus for communication.
int USBSetup ()
 Sets up the USB bus for communication.
- Public Member Functions inherited from ThreadedDriver
 ThreadedDriver (ConfigFile *cf, int section, bool overwrite_cmds, size_t queue_maxlen, int interf)
 Constructor with implicit interface.
 ThreadedDriver (ConfigFile *cf, int section, bool overwrite_cmds=true, size_t queue_maxlen=PLAYER_MSGQUEUE_DEFAULT_MAXLEN)
 Constructor for multiple-interface drivers.
virtual ~ThreadedDriver ()
 Destructor.
virtual int Setup ()
 Initialize the driver.
virtual int Shutdown ()
 Finalize the driver.
virtual int Terminate ()
 Terminate the driver.
virtual void Main (void)=0
 Main method for driver thread.
bool Wait (double TimeOut=0.0)
 Wait for new data to arrive on the driver's queue.
virtual void Update ()
 Update non-threaded drivers.
- Public Member Functions inherited from Driver
bool HasSubscriptions ()
virtual void Publish (player_devaddr_t addr, QueuePointer &queue, uint8_t type, uint8_t subtype, void *src=NULL, size_t deprecated=0, double *timestamp=NULL, bool copy=true)
 Publish a message via one of this driver's interfaces.
virtual void Publish (player_devaddr_t addr, uint8_t type, uint8_t subtype, void *src=NULL, size_t deprecated=0, double *timestamp=NULL, bool copy=true)
 Publish a message via one of this driver's interfaces.
virtual void Publish (QueuePointer &queue, player_msghdr_t *hdr, void *src, bool copy=true)
 Publish a message via one of this driver's interfaces.
virtual void Publish (player_msghdr_t *hdr, void *src, bool copy=true)
 Publish a message via one of this driver's interfaces.
 Driver (ConfigFile *cf, int section, bool overwrite_cmds, size_t queue_maxlen, int interf)
 Constructor for single-interface drivers.
 Driver (ConfigFile *cf, int section, bool overwrite_cmds=true, size_t queue_maxlen=PLAYER_MSGQUEUE_DEFAULT_MAXLEN)
 Constructor for multiple-interface drivers.
virtual ~Driver ()
 Destructor.
int GetError ()
 Get last error value.
virtual int Subscribe (player_devaddr_t addr)
 Subscribe to this driver.
virtual int Subscribe (QueuePointer &queue, player_devaddr_t addr)
 Subscribe to this driver.
virtual int Unsubscribe (player_devaddr_t addr)
 Unsubscribe from this driver.
virtual int Unsubscribe (QueuePointer &queue, player_devaddr_t addr)
 Unsubscribe from this driver.
void ProcessMessages (int maxmsgs)
 Process pending messages.
void ProcessMessages (void)
 Process pending messages.
virtual int ProcessInternalMessages (QueuePointer &resp_queue, player_msghdr *hdr, void *data)
 Internal message handler.
virtual bool RegisterProperty (const char *key, Property *prop, ConfigFile *cf, int section)
 Property registration.
virtual bool RegisterProperty (Property *prop, ConfigFile *cf, int section)
 Property registration.

Protected Attributes

player_devaddr_t position_id
player_position2d_data_t position_data
player_devaddr_t position3d_id
player_position3d_data_t position3d_data
player_devaddr_t power_base_id
player_power_data_t power_base_data
player_devaddr_t power_ui_id
player_power_data_t power_ui_data

Private Member Functions

int HandlePositionConfig (QueuePointer &resp_queue, uint32_t subtype, void *data, size_t len)
int HandlePosition3DConfig (QueuePointer &resp_queue, uint32_t subtype, void *data, size_t len)
int Read ()
int CanBusRead ()
int USBRead ()
int Diff (uint32_t from, uint32_t to, bool first)
int Write (CanPacket &pkt)
virtual void Main ()
void MakeStatusCommand (CanPacket *pkt, uint16_t cmd, uint16_t val)
void MakeVelocityCommand (CanPacket *pkt, int32_t xspeed, int32_t yawspeed)
void MakeShutdownCommand (CanPacket *pkt)
void UpdateData (rmp_frame_t *)

Private Attributes

BusType bus_type
const char * portname
const char * caniotype
const char * usb_device
int timeout_counter
float max_xspeed
float max_yawspeed
bool firstread
DualCANIOcanio
USBIOusbio
float curr_xspeed
float curr_yawspeed
float last_xspeed
float last_yawspeed
bool speed_change
bool motor_allow_enable
bool motor_enabled
uint32_t last_raw_yaw
uint32_t last_raw_left
uint32_t last_raw_right
uint32_t last_raw_foreaft
double odom_x
double odom_y
double odom_yaw

Additional Inherited Members

- Public Attributes inherited from Driver
QueuePointer ret_queue
 Last requester's queue.
player_devaddr_t device_addr
 Default device address (single-interface drivers)
int entries
 Total number of entries in the device table using this driver.
bool alwayson
 Always on flag.
QueuePointer InQueue
 Queue for all incoming messages for this driver.
- Protected Member Functions inherited from ThreadedDriver
virtual void StartThread (void)
virtual void StopThread (void)
 Cancel (and wait for termination) of the driver thread.
void TestCancel ()
 enable thread cancellation and test for cancellation
- Static Protected Member Functions inherited from ThreadedDriver
static void * DummyMain (void *driver)
 Dummy main (just calls real main).
static void DummyMainQuit (void *driver)
 Dummy main cleanup (just calls real main cleanup).

Member Function Documentation

void SegwayRMP::Main ( void  )
privatevirtual

@ TODO report better timestamps, possibly using time info from the RMP

Todo:
We are getting intermittent timeouts. Does not break functionality, but should be checked.

References PLAYER_ERROR, PLAYER_MSG0, PLAYER_MSG2, PLAYER_MSGTYPE_DATA, PLAYER_POSITION2D_DATA_STATE, PLAYER_POSITION3D_DATA_STATE, PLAYER_POWER_DATA_STATE, PLAYER_WARN, Driver::ProcessMessages(), and Driver::Publish().

void SegwayRMP::MainQuit ( void  )
virtual

Cleanup method for driver thread (called when main exits)

Overload this method and to do additional cleanup when the driver thread exits.

Reimplemented from ThreadedDriver.

References PLAYER_MSG0.

int SegwayRMP::ProcessMessage ( QueuePointer resp_queue,
player_msghdr hdr,
void *  data 
)
virtual

Message handler.

This function is called once for each message in the incoming queue. Reimplement it to provide message handling. Return 0 if you handled the message and -1 otherwise

Parameters
resp_queueThe queue to which any response should go.
hdrThe message header
dataThe message body
Todo:
Handle config requests

Reimplemented from Driver.

References player_msghdr::addr, player_devaddr::index, player_devaddr::interf, Message::MatchMessage(), player_pose2d::pa, PLAYER_MSGTYPE_CMD, PLAYER_MSGTYPE_REQ, PLAYER_POSITION2D_CMD_VEL, PLAYER_POSITION3D_CMD_SET_VEL, player_pose2d::px, player_pose3d::px, player_pose3d::pyaw, player_msghdr::size, player_position2d_cmd_vel::state, player_position3d_cmd_vel::state, player_msghdr::subtype, player_msghdr::type, player_position2d_cmd_vel::vel, and player_position3d_cmd_vel::vel.

void SegwayRMP::UpdateData ( rmp_frame_t data_frame)
private

The documentation for this class was generated from the following files:

Last updated 12 September 2005 21:38:45