This project involves two entities - Intuitive Surgical Inc. (ISI) and ERC-CISST (Computer Integrated Surgical Systems and Technology) at Johns Hopkins University (JHU). We are developing a simulation sandbox using open source libraries which would allow developers to create new object models and applications using the daVinci System. Currently, we would be focusing our sandbox to work with the daVinci S Surgeon Console present in the Swirnow Mock Operating Room at JHU.
The project aims to create a framework for slave side simulation of the daVinci system using open source
dependencies (except for the ISI-BBAPI [4], which is used to communicate back and forth with the robot. The ISI-BBAPI was available to us due to an agreement between ISI and JHU. This is binary package so that people do not tamper with the robot.)
ISI has already created a “Sandbox” containing some object models and a couple of training tasks using H3D[5], an open source scene graph API. Currently, the sandbox communicates directly to the Skills Simulator (which is a computer as shown above in the block diagram attached to the console) using the ISI-SIM-API and can be used only with the Skills Simulator, which is compatible with the specific Si consoles only. However, we would like to build this sandbox using the CISST libraries and the SAW framework [2, 3] as it would allow us to create a component based application which can have any master device on one end sending commands driving the simulated tools on the other end.
As seen in the figure above, the PC running the simulation sandbox would be communicating back and forth with the master console via the CISST-SAW wrapper of the ISI BB API via a network connection. Additionally, the sandbox would be rendering stereo simulation (based on the H3D library) on the stereo viewer of the console via DVI cables. The flow of information within the sandbox is shown below.
H3DViewer: This is a
GUI-based loader distributed along with the H3DAPI. It is able to load X3D files containing the scene graph information.
X3D File(s): X3D is an xml-based file format to describe the different nodes within the scene-graph. H3DAPI has X3D nodes which can be used in the x3d file to specify their relationship with the other nodes in the graph. Nodes can have different functions like graphic models, collision models, rigid body models, etc. These nodes can be routed (connected) to each other to pass and update their field members as per changes in the scene.
Graphics Nodes: These describe the different objects in the scene and their rendering properties. X3D files for models can be developed from CAD files using some conversion softwares. These X3D files can then be used in the definition of the graphics nodes.
Python Script: This node is to load python scripts and pass variable and make function calls to the python script.
H3DPhysics Nodes: These nodes are present in the physics toolkit distributed with the H3DAPI. Physics rendering is achieved using these nodes like collision models, rigid body models, joints, PID control, etc.
Virtual Slaves node: This is the custom node that we have created for our sandbox. It is used to pass information about the desired joint positions to the PID nodes which then drive the simulation. This node is also a CISST component so that it can communicate with the other components for getting updated target joint values.
The following components have been developed for this project:
cisstDaVinci(cdv)ReadWrite (mtsTaskPeriodic):
Existing cisst multitask component built using isi-bbapi to communicate to and from the robot
Added methods to it so as to disengage the real slaves from the masters during the use of the console as a simulator.
Provides interfaces to send master manipulator's cartesian positions and console user events.
mtsTeleOperation (mtsTaskPeriodic):
Developed to bridge between any master and simulated slave component for information passing.
Requires interfaces to receive information from master(s)
Provides interfaces to send information to slave(s) (their desired cartesian positions)
Manages state of the system like “Clutched”, “CameraControl”, etc.
mtsVirtualSlavesCore (mtsTaskPeriodic):
Developed to emulate the core on the slave side of the daVinci robot
Requires interfaces to receive desired slave cartesian pose
Provides interfaces to send desired slave joint positions
Performs inverse kinematics using the cisstRobot library and known DH-parameters
VirtualSlaves (X3DChildNode, mtsComponent):
Developed this H3DNode as well as mtsComponent to pass information to and from the rendering engine
Requires interfaces to receive the desired slave joint positions
Instantiates all the above classes as well as the component manager to manage these components
“Routes” the target joint values to the PIDCollection nodes in H3D
ISI Nodes (H3D Nodes):
Developed by Ashwin for the Sim Sandbox
SevenDOF: data structure for storing the seven joint values
PIDCollection, JointPID, PrismaticJointPID, RevoluteJointPID: PID controllers moving the joints to the target positions