This class is a interface to support custom haptic devices (template). More...
#include <CMyCustomDevice.h>
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... | |
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.
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)
|
virtual |
Destructor of cMyCustomDevice.
|
inlinestatic |
|
virtual |
This method opens a connection to your device.
Reimplemented from chai3d::cGenericHapticDevice.
|
virtual |
This method closes the connection to your device.
Reimplemented from chai3d::cGenericHapticDevice.
|
virtual |
This method calibrates your device.
Reimplemented from chai3d::cGenericHapticDevice.
|
virtual |
This method returns the position of your device. Units are meters [m].
a_position | Return value. |
Reimplemented from chai3d::cGenericHapticDevice.
|
virtual |
This method returns the orientation frame of your device end-effector
a_rotation | Return value. |
Reimplemented from chai3d::cGenericHapticDevice.
|
virtual |
This method returns the gripper angle in radian.
a_angle | Return value. |
Reimplemented from chai3d::cGenericHapticDevice.
|
virtual |
This method returns status of all user switches [true = ON / false = OFF].
a_userSwitches | Return the 32-bit binary mask of the device buttons. |
Reimplemented from chai3d::cGenericHapticDevice.
|
virtual |
This method sends a force [N] and a torque [N*m] and gripper torque [N*m] to your haptic device.
a_force | Force command. |
a_torque | Torque command. |
a_gripperForce | Gripper force command. |
Reimplemented from chai3d::cGenericHapticDevice.
|
static |
This method returns the number of devices available from this class of device.
|
protected |