Difference between revisions of "OpenIGTLink/Protocol/JHUBRP"

From NAMIC Wiki
Jump to: navigation, search
Line 23: Line 23:
 
# [Optional] Navigation soft: show Real time images of the needle insertion
 
# [Optional] Navigation soft: show Real time images of the needle insertion
 
# Manual: Fire biopsy gun
 
# Manual: Fire biopsy gun
 +
  
 
= Set Workphase (Slicer -> Robot) =
 
= Set Workphase (Slicer -> Robot) =
Line 45: Line 46:
 
== EMERGENCY ==
 
== EMERGENCY ==
 
Robot: Responds with status
 
Robot: Responds with status
 +
  
 
= Command / Query (Slicer -> Robot) =
 
= Command / Query (Slicer -> Robot) =

Revision as of 20:31, 2 February 2008

Home < OpenIGTLink < Protocol < JHUBRP

<< OpenIGTLink | Protocol


JHU BRP Robot protocol description


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

Slicer: Send "START_UP" Workphase command
Robot: Initialize robot and respond with status message

PLANNING

Robot: Do nothing, respond with status

CALIBRATION

Robot: Do nothing, respond with status. Waiting for SET_Z_FRAME command (Z-Frame transformation).

TARGETING

Robot: Fail if Z-Frame was not set. Respond with status. Waiting for targets (MOVE command).

MANUAL

Robot: Engage breaks, responds with status.
Slicer sends "GetCoordinate" query periodically to update the display.

EMERGENCY

Robot: Responds with status


Command / Query (Slicer -> Robot)

Command: INITIALIZE

Robot: Initialize, set the encoders, remember this position as "HOME". Respond with status.

Command: SET_Z_FRAME

Robot: Store Z-frame position and orientation (global RAS coordinate system) - respond with status.

Command: MOVE_TO

Robot: Go to this coordinate - position, orientation (later: speed?) (global RAS coordinate system). Respond with status.

Command: INSERT

Robot: Insert the needle to this depth - float (in mm)

Command: BIOPSY

Robot: Take biopsy (Retract Cannula)

Command: HOME

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

Command: STOP

Robot: Stop moving

Command: E_STOP

Robot: Emergency Stop (stop + purges the air lines)

Command: SET_JOINT

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

Command: SET_VELOCITY

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

Command: SET_AIR_PRESSURE

Robot: sets the air pressure / voltage output

Command: LOCK

Robot: Engage brakes - all of them

Command: UNLOCK

Robot: Unlock - disengage the brakes so it can be moved manually

Command: LOCK_AXIS

Robot: Engage brakes on a give axis

Command: UNLOCK_AXIS

Robot: Unlock - disengage the brakes on a give axis, so it can be moved manually

Command: LIMIT_VELOCITY

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

Query: GET_COORDINATE

Robot: Respond with current coordinate (position and orientation in global RAS coordinate system)

Query: GET_STATUS

Robot: Respond with status

Query: GET_BIOPSY

Robot: Respond with Actual Insertion Depth

Query: GET_NR_JOINT

Robot: Get Number of Joints - integer

Query: GET_JOINT

Robot: Get Actual Joint Positions

Query: GET_VELOCITY

Robot: Get Actual Joint Velocities

Query: GET_AIR_PRESSURE

Robot: Get Actual Air Pressures

Query: GET_JOINT_TRACK

Robot: Get Actual Joint Tracking Errors

Query: GET_BRAKE

Robot: Get Brakes status

Query: GET_MOVING

Robot: Get Joint Moving status


Responses sent by the robot (Robot -> Slicer)

Status: STATUS

Response from Robot: Robot done moving, Error message, Emergency stop

Status: BRAKES

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

Status: DONE_MOVING

Response from Robot: Done moving/joint - float[max.16] - true/false for each joint

Response: COORDINATES

Response from Robot: Actual coordinates and insertion depth - 6DOF in global RAS coordinate system

Response: JOINTS

Response from Robot: Number of Joints - integer

Response: JOINT_POS

Response from Robot: Actual joint positions - float[max.16] (joint positions in mm)

Response: JOINT_VEL

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

Response: JOINT_TRACK

Response from Robot: Actual joint tracking error - float[max.16] - "actual joint position" - "set joint position"

Response: AIR_PRESSURE

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