opensurgsim
Public Member Functions | Protected Attributes | Friends | List of all members
SurgSim::Devices::NovintDevice Class Reference

A class implementing the communication with a Novint Falcon device. More...

#include <NovintDevice.h>

Inheritance diagram for SurgSim::Devices::NovintDevice:
SurgSim::Input::CommonDevice SurgSim::Input::DeviceInterface SurgSim::Framework::Accessible SurgSim::Framework::FactoryBase1< DeviceInterface, std::string >

Public Member Functions

 NovintDevice (const std::string &name)
 Constructor. More...
 
 SURGSIM_CLASSNAME (SurgSim::Devices::NovintDevice)
 
virtual ~NovintDevice ()
 Destructor.
 
void setSerialNumber (const std::string &serialNumber)
 Sets the serial number used to register this device with the hardware library. More...
 
bool getSerialNumber (std::string *serialNumber) const
 Gets the serial number used to register this device with the hardware library. More...
 
void setInitializationName (const std::string &initializationName)
 Sets the name used to register this device with the hardware library. More...
 
bool getInitializationName (std::string *initializationName) const
 Gets the name used to register this device with the hardware library. More...
 
bool initialize () override
 Fully initialize the device. More...
 
bool isInitialized () const override
 
void setPositionScale (double scale)
 Sets the position scale for this device. More...
 
double getPositionScale () const
 Gets the position scale for this device.
 
void setOrientationScale (double scale)
 Sets the orientation scale for this device. More...
 
double getOrientationScale () const
 Gets the orientation scale for this device.
 
void set7DofDevice (bool val)
 Sets whether or not this is supposed to be a 7Dof device. More...
 
virtual bool is7DofDevice () const
 Query if this object represents a 7 degree of freedom hardware device. More...
 
void setMaxForce (double force)
 Set the maximum force that can be sent to the device. More...
 
double getMaxForce () const
 
void setAntigrav (Math::Vector3d antigrav)
 Set a constant force that gets added to all forces sent to the hardware. More...
 
Math::Vector3d getAntigrav () const
 
double getYawOffset () const
 
void setYawOffset (double yawOffset)
 Set constant offset for yaw. More...
 
double getPitchOffset () const
 
void setPitchOffset (double pitchOffset)
 Set constant offset for pitch. More...
 
double getRollOffset () const
 
void setRollOffset (double rollOffset)
 Set constant offset for roll. More...
 
double getToolDofOffset () const
 
void setToolDofOffset (double toolDofOffset)
 Set constant offset for tool DOF. More...
 
- Public Member Functions inherited from SurgSim::Input::CommonDevice
 CommonDevice (const std::string &name)
 Constructor. More...
 
 CommonDevice (const std::string &name, const DataStructures::DataGroup &inputData)
 Constructor. More...
 
 CommonDevice (const std::string &name, DataStructures::DataGroup &&inputData)
 Constructor. More...
 
virtual ~CommonDevice ()
 Destructor.
 
std::string getName () const override
 Return a (hopefully unique) device name.
 
std::string getClassName () const override
 The class name for this class. More...
 
void setNameForCallback (const std::string &name)
 Set the name used for calling the input consumers and output producer. More...
 
std::string getNameForCallback () const
 Get the name used for calling the input consumers and output producer. More...
 
bool addInputConsumer (std::shared_ptr< InputConsumerInterface > inputConsumer) override
 Adds an input consumer that will be notified when the application input state is updated. More...
 
bool removeInputConsumer (std::shared_ptr< InputConsumerInterface > inputConsumer) override
 Removes an input consumer previously added via addInputConsumer. More...
 
void clearInputConsumers () override
 Removes all InputConsumers.
 
bool setOutputProducer (std::shared_ptr< OutputProducerInterface > outputProducer) override
 Sets an output producer that will be asked for application output state when the device needs it. More...
 
bool removeOutputProducer (std::shared_ptr< OutputProducerInterface > outputProducer) override
 Removes an output producer previously added via setOutputProducer. More...
 
bool hasOutputProducer () override
 Query if this object has output producer. More...
 
void clearOutputProducer () override
 Removes any OutputProducer.
 
- Public Member Functions inherited from SurgSim::Input::DeviceInterface
virtual ~DeviceInterface ()
 Virtual destructor (empty).
 
- Public Member Functions inherited from SurgSim::Framework::Accessible
 Accessible ()
 Default Constructor.
 
 ~Accessible ()
 Destructor.
 
template<class T >
getValue (const std::string &name) const
 Retrieves the value with the name by executing the getter if it is found and tries to convert it to the given type. More...
 
boost::any getValue (const std::string &name) const
 Retrieves the value with the name by executing the getter if it is found. More...
 
template<class T >
bool getValue (const std::string &name, T *value) const
 Retrieves the value with the name by executing the getter if it is found, and converts it to the type of the output parameter. More...
 
void setValue (const std::string &name, const boost::any &value)
 Sets a value of a property that has setter. More...
 
bool isReadable (const std::string &name) const
 Check whether a property is readable. More...
 
bool isWriteable (const std::string &name) const
 Check whether a property is writable. More...
 
void setGetter (const std::string &name, GetterType func)
 Sets a getter for a given property. More...
 
void setSetter (const std::string &name, SetterType func)
 Sets a setter for a given property. More...
 
void setAccessors (const std::string &name, GetterType getter, SetterType setter)
 Sets the accessors getter and setter in one function. More...
 
void removeAccessors (const std::string &name)
 Removes all the accessors (getter and setter) for a given property. More...
 
void forwardProperty (const std::string &name, const Accessible &target, const std::string &targetProperty)
 Adds a property with the given name that uses the targets accessors, in effect forwarding the value to the target. More...
 
void setSerializable (const std::string &name, EncoderType encoder, DecoderType decoder)
 Sets the functions used to convert data from and to a YAML::Node. More...
 
void setDecoder (const std::string &name, DecoderType decoder)
 Sets the functions used to convert data from a YAML::Node. More...
 
YAML::Node encode () const
 Encode this Accessible to a YAML::Node. More...
 
void decode (const YAML::Node &node, const std::vector< std::string > &ignoredProperties=std::vector< std::string >())
 Decode this Accessible from a YAML::Node, will throw an exception if the data type cannot be converted. More...
 
std::vector< std::string > getProperties ()
 
template<>
boost::any getValue (const std::string &name) const
 

Protected Attributes

bool m_7DofDevice
 True if the device is 7Dof, false if the device is 3Dof.
 
double m_maxForce
 The maximum force magnitude (in Newtons) that should be sent to the hardware.
 
Math::Vector3d m_antigrav
 The anti-gravity force in Newtons.
 
double m_yawOffset
 
double m_pitchOffset
 
double m_rollOffset
 
double m_toolDofOffset
 

Friends

class NovintScaffold
 

Additional Inherited Members

- Public Types inherited from SurgSim::Framework::Accessible
typedef std::function< boost::any(void)> GetterType
 
typedef std::function< void(boost::any)> SetterType
 
typedef std::function< YAML::Node(void)> EncoderType
 
typedef std::function< void(const YAML::Node *)> DecoderType
 
- Public Types inherited from SurgSim::Framework::FactoryBase1< DeviceInterface, std::string >
typedef ObjectFactory1< DeviceInterface, std::string > FactoryType
 
- Static Public Member Functions inherited from SurgSim::Framework::FactoryBase1< DeviceInterface, std::string >
static FactoryTypegetFactory ()
 
- Protected Member Functions inherited from SurgSim::Input::CommonDevice
virtual void pushInput ()
 Push application input to consumers.
 
virtual bool pullOutput ()
 Pull application output from a producer.
 
DataStructures::DataGroupgetInputData ()
 Getter for the input data DataGroup. More...
 
const DataStructures::DataGroupgetOutputData () const
 Getter for the output data DataGroup. More...
 

Detailed Description

A class implementing the communication with a Novint Falcon device.

This should provide basic support for any device that can communicate using the Novint HDAL SDK toolkit, such as the off-the-shelf Novint Falcon haptic gaming controller. Note that certain devices may require device-specific support in the code to enable particular hardware features. In particular, the Novint Falcon with the Open Surgery Grip will not be able to produce torques unless it is accessed using the NovintOsgDevice class.

Application input provided by the device:
type name
pose "pose" Device pose (units are meters)*.
scalar "toolDof" %7th Dof (e.g., handle open/close angle)
bool "button1" State of the first device button if present.**
bool "button2" State of the second device button if present.**
bool "button3" State of the third device button if present.**
bool "button4" State of the third device button if present.**
bool "isHomed" Device homing status.
bool "isPositionHomed" Device homing status, position only.
bool "isOrientationHomed" Device homing status, orientation only.
* The workspace of an off-the-shelf Novint Falcon is +z points out from the face of the Falcon, +y points up, and +x points to your right if you are looking at the face of the Falcon (a right-hand frame). The workspace of both 7dof OSG Falcons in a pair is +x towards the right Falcon, +y up, and +z towards the user (a right-hand frame). Thus, if the 7dof OSG Falcons are setup in a typical configuration such that the left Falcon is to the user's left and the right Falcon is to the user's right, then the workspace will be the same as an off-the-shelf Falcon placed directly facing the user. The identity orientation for an OSG Falcon is with the handle of the tool parallel to the floor (pitch), and pointed towards the user (yaw)...therefore in the home pose, the "business end" of the tool points away from the user along the -z axis. **button1 through 4 correspond to the buttons 0 through 3 provided by the HDAL SDK, but a custom Novint device might have fewer than 4 buttons.
Application output used by the device:
type name
vector "force" Device output force (units are newtons).
vector "torque" Device output torque (in newton-meters, 7Dof only).
bool "gravityCompensation" Enable or disable hardware gravity compensation.

Constructor & Destructor Documentation

§ NovintDevice()

SurgSim::Devices::NovintDevice::NovintDevice ( const std::string &  name)
explicit

Constructor.

Parameters
nameA unique name for the device that will be used by the application.

Member Function Documentation

§ getAntigrav()

Math::Vector3d SurgSim::Devices::NovintDevice::getAntigrav ( ) const
Returns
The constant force that gets added to all forces sent to the hardware (in Newtons).

§ getInitializationName()

bool SurgSim::Devices::NovintDevice::getInitializationName ( std::string *  initializationName) const

Gets the name used to register this device with the hardware library.

Parameters
[out]initializationNameThe initialization name, if set.
Returns
true if the initializationName has been set

§ getMaxForce()

double SurgSim::Devices::NovintDevice::getMaxForce ( ) const
Returns
The maximum force (in Newtons) that can be sent to the device.

§ getPitchOffset()

double SurgSim::Devices::NovintDevice::getPitchOffset ( ) const
Returns
The constant offset for pitch in radians.

§ getRollOffset()

double SurgSim::Devices::NovintDevice::getRollOffset ( ) const
Returns
The constant offset for roll in radians.

§ getSerialNumber()

bool SurgSim::Devices::NovintDevice::getSerialNumber ( std::string *  serialNumber) const

Gets the serial number used to register this device with the hardware library.

Parameters
[out]serialNumberThe serial number, if set.
Returns
true if the serialNumber has been set.

§ getToolDofOffset()

double SurgSim::Devices::NovintDevice::getToolDofOffset ( ) const
Returns
The constant offset for the tool DOF (e.g., grasp) in radians.

§ getYawOffset()

double SurgSim::Devices::NovintDevice::getYawOffset ( ) const
Returns
The constant offset for yaw in radians.

§ initialize()

bool SurgSim::Devices::NovintDevice::initialize ( )
overridevirtual

Fully initialize the device.

When the manager object creates the device, the internal state of the device usually isn't fully initialized yet. This method performs any needed initialization.

Implements SurgSim::Input::DeviceInterface.

§ is7DofDevice()

bool SurgSim::Devices::NovintDevice::is7DofDevice ( ) const
virtual

Query if this object represents a 7 degree of freedom hardware device.

Returns
true if 7 degree of freedom device, false if not.

§ isInitialized()

bool SurgSim::Devices::NovintDevice::isInitialized ( ) const
overridevirtual
Returns
true if the device has been initialized and has not yet been finalized.

Implements SurgSim::Input::DeviceInterface.

§ set7DofDevice()

void SurgSim::Devices::NovintDevice::set7DofDevice ( bool  val)

Sets whether or not this is supposed to be a 7Dof device.

If the hardware is not actually 7Dof, the resulting device will never home. If the hardware is 7Dof, and this is not called, the resulting device will act like a typical 3Dof.

Parameters
valtrue for a 7Dof device.

§ setAntigrav()

void SurgSim::Devices::NovintDevice::setAntigrav ( Math::Vector3d  antigrav)

Set a constant force that gets added to all forces sent to the hardware.

Parameters
antigravThe anti-gravity force in Newtons.

§ setInitializationName()

void SurgSim::Devices::NovintDevice::setInitializationName ( const std::string &  initializationName)

Sets the name used to register this device with the hardware library.

To use an initialization name, the 'devices.yaml' file must be in the working directory, (see example at Data/devices.yaml) with an entry of the form "initializationName: serialNumber". An empty string indicates the first available device.

Parameters
initializationNameThe initialization name.
See also
setSerialNumber

§ setMaxForce()

void SurgSim::Devices::NovintDevice::setMaxForce ( double  force)

Set the maximum force that can be sent to the device.

Higher force values will be scaled to this magnitude. Generally Falcons are robust enough that commanding excessive forces will not cause a problem, but in-development systems may overheat if over-driven.

Parameters
forceThe maximum force magnitude (in Newtons) that will be sent to the hardware.

§ setOrientationScale()

void SurgSim::Devices::NovintDevice::setOrientationScale ( double  scale)

Sets the orientation scale for this device.

The orientation scale controls how much the pose changes for a given device rotation. The default value for a raw device tries to correspond to the actual physical motion of the device.

Parameters
scaleThe multiplicative factor to apply to the rotation angles.

§ setPitchOffset()

void SurgSim::Devices::NovintDevice::setPitchOffset ( double  pitchOffset)

Set constant offset for pitch.

Parameters
pitchOffsetThe pitch offset in radians.

§ setPositionScale()

void SurgSim::Devices::NovintDevice::setPositionScale ( double  scale)

Sets the position scale for this device.

The position scale controls how much the pose changes for a given device translation. The default value for a raw device tries to correspond to the actual physical motion of the device.

Parameters
scaleThe multiplicative factor to apply to the position.

§ setRollOffset()

void SurgSim::Devices::NovintDevice::setRollOffset ( double  rollOffset)

Set constant offset for roll.

Parameters
rollOffsetThe roll offset in radians.

§ setSerialNumber()

void SurgSim::Devices::NovintDevice::setSerialNumber ( const std::string &  serialNumber)

Sets the serial number used to register this device with the hardware library.

An empty string indicates the first available device.

Parameters
serialNumberThe serial number.
See also
setInitializationName

§ setToolDofOffset()

void SurgSim::Devices::NovintDevice::setToolDofOffset ( double  toolDofOffset)

Set constant offset for tool DOF.

Parameters
toolDofOffsetThe toolDof offset in radians.

§ setYawOffset()

void SurgSim::Devices::NovintDevice::setYawOffset ( double  yawOffset)

Set constant offset for yaw.

Parameters
yawOffsetThe yaw offset in radians.

Member Data Documentation

§ m_yawOffset

double SurgSim::Devices::NovintDevice::m_yawOffset
protected

For 7Dof device, the euler angle offsets that should be added to the angles provided by the hardware.


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