chai3d::cMyCustomDevice Class Reference

This class is a interface to support custom haptic devices (template). More...

#include <CMyCustomDevice.h>

Inheritance diagram for chai3d::cMyCustomDevice:

Public Member Functions

 cMyCustomDevice (unsigned int a_deviceNumber=0)
 Constructor of cMyCustomDevice. More...
 
virtual ~cMyCustomDevice ()
 Destructor of cMyCustomDevice. More...
 
virtual bool open ()
 This method opens a connection to the haptic device. More...
 
virtual bool close ()
 This method closes the connection to the haptic device. More...
 
virtual bool calibrate (bool a_forceCalibration=false)
 This method calibrates the haptic device. More...
 
virtual bool getPosition (cVector3d &a_position)
 This method returns the position of the device. More...
 
virtual bool getRotation (cMatrix3d &a_rotation)
 This method returns the orientation frame of the device end-effector. More...
 
virtual bool getGripperAngleRad (double &a_angle)
 This method returns the gripper angle in radian [rad]. More...
 
virtual bool getUserSwitches (unsigned int &a_userSwitches)
 This method returns the status of all user switches [true = ON / false = OFF]. More...
 
virtual bool setForceAndTorqueAndGripperForce (const cVector3d &a_force, const cVector3d &a_torque, double a_gripperForce)
 This method sends a force [N] and a torque [N*m] and gripper force [N] to the haptic device. More...
 
- Public Member Functions inherited from chai3d::cGenericHapticDevice
 cGenericHapticDevice (unsigned int a_deviceNumber=0)
 Constructor of cGenericHapticDevice. More...
 
virtual ~cGenericHapticDevice ()
 Destructor of cGenericHapticDevice. More...
 
virtual bool getLinearVelocity (cVector3d &a_linearVelocity)
 This method returns the linear velocity of the haptic device. More...
 
virtual bool getJointAnglesRad (double a_jointAnglesRad[C_MAX_DOF])
 This method returns the joint angles of the haptic device. More...
 
virtual bool getAngularVelocity (cVector3d &a_angularVelocity)
 This method returns the angular velocity of haptic device. More...
 
virtual bool getTransform (cTransform &a_transform)
 This method returns the position and orientation of the haptic device through a transformation matrix. More...
 
bool getGripperAngleDeg (double &a_angle)
 This method returns the gripper angle in degrees [deg]. More...
 
virtual bool getGripperAngularVelocity (double &a_gripperAngularVelocity)
 This method returns the angular velocity of the gripper. Units are in radians per second [rad/s]. More...
 
virtual bool getForce (cVector3d &a_force)
 This method returns the sensed force [N] from the haptic device. More...
 
virtual bool getTorque (cVector3d &a_torque)
 This method returns the sensed torque [N*m] from the haptic device. More...
 
virtual bool getGripperForce (double &a_gripperForce)
 This method returns the sensed torque [N*m] from the force gripper. More...
 
virtual bool getUserSwitch (int a_switchIndex, bool &a_status)
 This method returns the status of a selected user switch [true = ON / false = OFF]. More...
 
cHapticDeviceInfo getSpecifications ()
 This method returns the technical specifications of this haptic device. More...
 
virtual void setEnableGripperUserSwitch (const bool a_status)
 This method enables or disables the virtual gripper switch. More...
 
virtual bool getEnableGripperUserSwitch () const
 This method returns the status of the virtual gripper user switch. If true, then gripper is used to emulate a user switch. Return false otherwise. More...
 
bool setForce (const cVector3d &a_force)
 This method sends a force [N] command to the haptic device. More...
 
bool setForceAndTorque (const cVector3d &a_force, const cVector3d &a_torque)
 This method sends a force [N] and torque [N*m] command to the haptic device. More...
 
- Public Member Functions inherited from chai3d::cGenericDevice
 cGenericDevice (unsigned int a_deviceNumber=0)
 Constructor of cGenericDevice. More...
 
virtual ~cGenericDevice ()
 Destructor of cGenericDevice. More...
 
bool isDeviceAvailable ()
 This method returns true if the device is available for communication, false otherwise. More...
 
bool isDeviceReady ()
 This method returns true if the connection to the device has been established by calling method open(), false otherwise. More...
 

Static Public Member Functions

static cMyCustomDevicePtr create (unsigned int a_deviceNumber=0)
 Shared cMyCustomDevice allocator. More...
 
static unsigned int getNumDevices ()
 This method returns the number of devices available from this class of device. More...
 
- Static Public Member Functions inherited from chai3d::cGenericHapticDevice
static cGenericHapticDevicePtr create (unsigned int a_deviceNumber=0)
 Shared cGenericHapticDevice allocator. More...
 
static unsigned int getNumDevices ()
 This method returns the number of haptic devices available for this class of devices. More...
 
- Static Public Member Functions inherited from chai3d::cGenericDevice
static unsigned int getNumDevices ()
 This method returns the number of haptic devices available for this class of devices. More...
 

Protected Attributes

int m_MyVariable
 A short description of my variable. More...
 
- Protected Attributes inherited from chai3d::cGenericHapticDevice
cVector3d m_prevForce
 Last force sent to haptic device. More...
 
cVector3d m_prevTorque
 Last torque sent to haptic device. More...
 
double m_prevGripperForce
 Last gripper force sent to haptic device. More...
 
cVector3d m_linearVelocity
 Last estimated linear velocity. More...
 
cVector3d m_angularVelocity
 Last estimated angular velocity. More...
 
double m_gripperAngularVelocity
 Last estimated gripper angular velocity. More...
 
cTimestampPos m_historyPos [C_DEVICE_HISTORY_SIZE]
 History position data of the device. More...
 
cTimestampRot m_historyRot [C_DEVICE_HISTORY_SIZE]
 History orientation data of the device. More...
 
cTimestampValue m_historyGripper [C_DEVICE_HISTORY_SIZE]
 History position of device gripper. More...
 
int m_indexHistoryPos
 Current index position in history data table. More...
 
int m_indexHistoryRot
 Current index position in history data table. More...
 
int m_indexHistoryGripper
 Current index position in history data table. More...
 
int m_indexHistoryPosWin
 Last index position used to compute velocity. More...
 
int m_indexHistoryRotWin
 Last index position used to compute velocity. More...
 
int m_indexHistoryGripperWin
 Last index position used to compute velocity. More...
 
double m_linearVelocityWindowSize
 Window time interval for measuring linear velocity. More...
 
double m_angularVelocityWindowSize
 Window time interval for measuring angular velocity. More...
 
double m_gripperVelocityWindowSize
 Window time interval for measuring gripper velocity. More...
 
cPrecisionClock m_clockGeneral
 General clock used to compute velocity signals. More...
 
bool m_gripperUserSwitchEnabled
 If true then virtual gripper user switch is enabled. More...
 
double m_gripperUserSwitchAngleStart
 Position of the gripper when the user encounters the virtual switch. More...
 
double m_gripperUserSwitchAngleClick
 Position of the gripper when the virtual switch is enabled and the "click" occurs. More...
 
double m_gripperUserSwitchForceClick
 Maximum force level at the force gripper when the "click" occurs. More...
 
double m_gripperUserSwitchForceEngaged
 Force level when the gripper is completely closed after the "click" event has occurred. More...
 
double m_virtualGripperAngle
 Virtual gripper current angle in radians [rad]. More...
 
double m_virtualGripperAngleMin
 Virtual gripper minimum angle in radians [rad]. More...
 
double m_virtualGripperAngleMax
 Virtual gripper maximum angle in radians [rad]. More...
 
double m_virtualGripperAngularVelocity
 Virtual speed value used for simulating the opening and closing of the virtual gripper [rad/s]. More...
 
cPrecisionClock m_virtualGripperClock
 Clock for computing the position/velocity of the virtual gripper. More...
 
- Protected Attributes inherited from chai3d::cGenericDevice
bool m_deviceAvailable
 Flag that indicates if the device is available to the computer. More...
 
bool m_deviceReady
 Flag that indicates if connection to device was opened successfully by calling method open(). More...
 
int m_deviceNumber
 Device number ID for this category of devices. Value must be equal or bigger than 0. A value of __-1__ means that the ID has not yet been defined. More...
 

Additional Inherited Members

- Public Attributes inherited from chai3d::cGenericHapticDevice
cHapticDeviceInfo m_specifications
 Technical specifications of haptic device. More...
 
- Protected Member Functions inherited from chai3d::cGenericHapticDevice
void estimateLinearVelocity (cVector3d &a_newPosition)
 Estimate linear velocity of handle by passing the latest position. More...
 
void estimateAngularVelocity (cMatrix3d &a_newRotation)
 Estimate angular velocity of handle by passing the latest orientation frame. More...
 
void estimateGripperVelocity (double a_newGripperPosition)
 Estimate velocity of gripper by passing the latest gripper position. More...
 
double computeGripperUserSwitchForce (const double &a_gripperAngle, const double &a_gripperAngularVelocity)
 This method computes the virtual gripper force. More...
 
bool getGripperUserSwitch ()
 This method returns the status of gripper user switch. Return true if virtual user switch is engaged, __false_ otherwise. More...
 
- Static Protected Member Functions inherited from chai3d::cGenericHapticDevice
static bool openLibraries ()
 This method opens libraries for this class of devices. More...
 
static bool closeLibraries ()
 This method closes libraries for this class of devices. More...
 
- Static Protected Member Functions inherited from chai3d::cGenericDevice
static bool openLibraries ()
 This method opens libraries for this class of devices. More...
 
static bool closeLibraries ()
 This method closes libraries for this class of devices. More...
 

Detailed Description

This class provides the basics to easily interface CHAI3D to your own custom haptic device.

Simply follow the 11 commented step in file CMyCustomDevice.cpp and complete the code accordingly. Depending of the numbers of degrees of freedom of your device, not all methods need to be implemented. For instance, if your device does not provide any rotation degrees of freedom, simply ignore the getRotation() method. Default values will be returned correctly if these are not implemented on your device. In the case of rotations for instance, the identity matrix is returned.

You may also rename this class in which case you will also want to customize the haptic device handler to automatically detect your device. Please consult method update() of the cHapticDeviceHandler class that is located in file CHapticDeviceHandler.cpp . Simply see how the haptic device handler already looks for device of type cMyCustomDevice.

If you are encountering any problems with your implementation, check for instance file cDeltaDevices.cpp which implement supports for the Force Dimension series of haptic devices. In order to verify the implementation use the 01-device example to get started. Example 11-effects is a great demo to verify how basic haptic effects may behave with you haptic devices. If you do encounter vibrations or instabilities, try reducing the maximum stiffness and/or damping values supported by your device. (see STEP-1 in file CMyCustomDevice.cpp).
Make sure that your device is also communicating fast enough with your computer. Ideally the communication period should take less than 1 millisecond in order to reach a desired update rate of at least 1000Hz. Problems can typically occur when using a slow serial port (RS232) for instance.

Constructor & Destructor Documentation

chai3d::cMyCustomDevice::cMyCustomDevice ( unsigned int  a_deviceNumber = 0)

Constructor of cMyCustomDevice.

Maximum recommended angular damping factor Kv (if actuated torques are available)

Maximum recommended angular damping factor Kv for the force gripper. (if actuated gripper is available)

chai3d::cMyCustomDevice::~cMyCustomDevice ( )
virtual

Destructor of cMyCustomDevice.

Member Function Documentation

static cMyCustomDevicePtr chai3d::cMyCustomDevice::create ( unsigned int  a_deviceNumber = 0)
inlinestatic
bool chai3d::cMyCustomDevice::open ( )
virtual

This method opens a connection to your device.

Returns
true if the operation succeeds, false otherwise.

Reimplemented from chai3d::cGenericHapticDevice.

bool chai3d::cMyCustomDevice::close ( )
virtual

This method closes the connection to your device.

Returns
true if the operation succeeds, false otherwise.

Reimplemented from chai3d::cGenericHapticDevice.

bool chai3d::cMyCustomDevice::calibrate ( bool  a_forceCalibration = false)
virtual

This method calibrates your device.

Returns
true if the operation succeeds, false otherwise.

Reimplemented from chai3d::cGenericHapticDevice.

bool chai3d::cMyCustomDevice::getPosition ( cVector3d a_position)
virtual

This method returns the position of your device. Units are meters [m].

Parameters
a_positionReturn value.
Returns
true if the operation succeeds, false otherwise.

Reimplemented from chai3d::cGenericHapticDevice.

bool chai3d::cMyCustomDevice::getRotation ( cMatrix3d a_rotation)
virtual

This method returns the orientation frame of your device end-effector

Parameters
a_rotationReturn value.
Returns
true if the operation succeeds, false otherwise.

Reimplemented from chai3d::cGenericHapticDevice.

bool chai3d::cMyCustomDevice::getGripperAngleRad ( double &  a_angle)
virtual

This method returns the gripper angle in radian.

Parameters
a_angleReturn value.
Returns
true if the operation succeeds, false otherwise.

Reimplemented from chai3d::cGenericHapticDevice.

bool chai3d::cMyCustomDevice::getUserSwitches ( unsigned int &  a_userSwitches)
virtual

This method returns status of all user switches [true = ON / false = OFF].

Parameters
a_userSwitchesReturn the 32-bit binary mask of the device buttons.
Returns
true if the operation succeeds, false otherwise.

Reimplemented from chai3d::cGenericHapticDevice.

bool chai3d::cMyCustomDevice::setForceAndTorqueAndGripperForce ( const cVector3d a_force,
const cVector3d a_torque,
double  a_gripperForce 
)
virtual

This method sends a force [N] and a torque [N*m] and gripper torque [N*m] to your haptic device.

Parameters
a_forceForce command.
a_torqueTorque command.
a_gripperForceGripper force command.
Returns
true if the operation succeeds, false otherwise.

Reimplemented from chai3d::cGenericHapticDevice.

unsigned int chai3d::cMyCustomDevice::getNumDevices ( )
static

This method returns the number of devices available from this class of device.

Returns
true if the operation succeeds, false otherwise.

Member Data Documentation

int chai3d::cMyCustomDevice::m_MyVariable
protected

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