OpenIGTLink/Protocol/JHUBRP

From NAMIC Wiki
Revision as of 19:04, 2 February 2008 by Csoma (talk | contribs)
Jump to: navigation, search
Home < OpenIGTLink < Protocol < JHUBRP

<< OpenIGTLink | Protocol

System Diagram

MRI Robot System Diagram2.png

Workflow

  1. Scanner: Scout image acquisition with the landmark close to the prostate
  2. Navigation soft and scanner: Calculate Z-frame position, scan a slice through the Z-frame
  3. Repeat previous step if the Z-frame is not visible enough to register the robot
  4. Scanner: 3D volume acquisition of the prostate
  5. Navigation soft: Select (or import) the targets, show needle path, allow modification
  6. Navigation soft: Calculate the target and path, send it to the robot
  7. Robot: Execute command
  8. [Optional] Navigation soft: send current robot coordinates to the Real Time scanner IO for needle tracking, display image
  9. Navigation soft: Display robot position and status
  10. Scanner: Confirm robot location before biopsy
  11. Manual: Insert biopsy needle
  12. [Optional] Navigation soft: show Real time images of the needle insertion
  13. Manual: Fire biopsy gun

Set Workphase (Slicer -> Robot)

START_UP

Initialize robot, respond with status as part of the command

PLANNING

Respond with status

CALIBRATION

Robot responds with status

TARGETING

Robot responds with status

MANUAL

Robot responds with status.
Slicer sends "GetCoordinate" query periodically to update the display.

EMERGENCY

Robot responds with status

Query / Command (Slicer -> Robot)

Command: INITIALIZE

Initialize robot (calibration, set the encoders, this will be "home") - respond with status

Command: SET_Z_FRAME

Z-frame position and orientation (global RAS coordinate system) - respond with status

Command: MOVE_TO

Go to coordinate - position, orientation (later: speed) (global RAS coordinate system)

Query: GET_COORDINATE

Get Coordinates (position and orientation in global RAS coordinate system)

Query: GET_STATUS

Get Robot Status

Command: INSERT

Insertion depth - float (in mm)

Command: BIOPSY

Take biopsy (Retract Cannula)

Query: GET_BIOPSY

Get Actual Insertion Depth

Command: HOME

Go to Home (collapses the robot to remove/replace needle)

Command: STOP

Stop moving

Command: E_STOP

Emergency Stop (stop + purges the air lines)

Command: SET_JOINT

Set Joint Positions - float[max.16] - move joint here

Command: SET_VELOCITY

Set Joint Velocities - float[max.16] - move joint with this speed

Query: GET_NR_JOINT

Get Number of Joints - integer

Query: GET_JOINT

Get Actual Joint Positions

Query: GET_VELOCITY

Get Actual Joint Velocities

Query: GET_AIR_PRESSURE

Get Actual Air Pressures

Query: GET_JOINT_TRACK

Get Actual Joint Tracking Errors

Query: GET_BRAKE

Get Brakes status

Query: GET_MOVING

Get Joint Moving status

Command: LOCK

Lock (engage brakes - all of them)

Command: UNLOCK

Unlock (disengage the brakes so it can be moved manually)

Command: LIMIT_VELOCITY

Set entire robot velocity limit in Robot Coords. - float (like 10 mm/s)


Responses sent by the robot (Robot -> Slicer)

Value: COORDINATES

Actual coordinates and insertion depth - 6DOF in global RAS coordinate system

Status: STATUS

Robot done moving, Error message, Emergency stop

Response: JOINTS

Number of Joints - integer

Response: JOINT_POS

Actual joint positions - float[max.16] (joint positions in mm)

Response: JOINT_VEL

Actual joint velocities - float[max.16] (joint velocities in mm/s)

Response: JOINT_TRACK

Actual joint tracking error - float[max.16] - "actual joint position" - "set joint position"

Response: AIR_PRESSURE

Actual air pressures - float[max.32] - two per joint! (PSI for each valve)

Status: BRAKES

Brake status - float[max.16] - true(locked)/false(loose) for each joint

Status: DONE_MOVING

Done moving/joint - float[max.16] - true/false for each joint