Difference between revisions of "OpenIGTLink/Protocol/JHUBRP"

From NAMIC Wiki
Jump to: navigation, search
Line 24: Line 24:
  
 
==  START_UP ==
 
==  START_UP ==
Initialize robot, respond with status as part of the command
+
Slicer: Send "START_UP" Workphase command<br />
 +
Robot: Initialize robot and respond with status message
  
 
== PLANNING ==
 
== PLANNING ==
Respond with status
+
Robot: Do nothing, respond with status
  
 
== CALIBRATION ==
 
== CALIBRATION ==
Robot responds with status
+
Robot: Do nothing, respond with status. Waiting for SET_Z_FRAME command (Z-Frame transformation).
  
 
== TARGETING ==
 
== TARGETING ==
Robot responds with status
+
Robot: Fail if Z-Frame was not set. Respond with status. Waiting for targets (MOVE command).
  
 
== MANUAL ==
 
== MANUAL ==
Robot responds with status. <br />
+
Robot: Engage breaks, responds with status. <br />
 
Slicer sends "GetCoordinate" query periodically to update the display.
 
Slicer sends "GetCoordinate" query periodically to update the display.
  
 
== EMERGENCY ==
 
== EMERGENCY ==
Robot responds with status
+
Robot: Responds with status
  
 
= Query / Command (Slicer -> Robot) =
 
= Query / Command (Slicer -> Robot) =
  
 
== Command: INITIALIZE ==
 
== Command: INITIALIZE ==
Initialize robot (calibration, set the encoders, this will be "home") - respond with status
+
Robot: Initialize, set the encoders, remember this position as "HOME". Respond with status.
  
 
== Command: SET_Z_FRAME ==
 
== Command: SET_Z_FRAME ==
Z-frame position and orientation (global RAS coordinate system) - respond with status
+
Robot: Store Z-frame position and orientation (global RAS coordinate system) - respond with status.
  
 
== Command: MOVE_TO ==
 
== Command: MOVE_TO ==
Go to coordinate - position, orientation (later: speed) (global RAS coordinate system)
+
Robot: Go to this coordinate - position, orientation (later: speed?) (global RAS coordinate system). Respond with status.
  
 
== Query: GET_COORDINATE ==
 
== Query: GET_COORDINATE ==
Get Coordinates (position and orientation in global RAS coordinate system)
+
Robot: Respond with current coordinate (position and orientation in global RAS coordinate system)
  
 
== Query: GET_STATUS ==
 
== Query: GET_STATUS ==
Get Robot Status
+
Robot: Respond with status
  
 
== Command: INSERT ==
 
== Command: INSERT ==
Insertion depth - float (in mm)
+
Robot: Insert the needle to this depth - float (in mm)
  
 
== Command: BIOPSY ==
 
== Command: BIOPSY ==
Take biopsy (Retract Cannula)
+
Robot: Take biopsy (Retract Cannula)
  
 
== Query: GET_BIOPSY ==
 
== Query: GET_BIOPSY ==
Get Actual Insertion Depth  
+
Robot: Respond with Actual Insertion Depth  
  
 
== Command: HOME ==
 
== Command: HOME ==
Go to Home (collapses the robot to remove/replace needle)
+
Robot: Go to Home (collapses the robot to remove/replace needle)
  
 
== Command: STOP ==
 
== Command: STOP ==
Stop moving
+
Robot: Stop moving
  
 
== Command: E_STOP ==
 
== Command: E_STOP ==
Emergency Stop (stop + purges the air lines)
+
Robot: Emergency Stop (stop + purges the air lines)
  
 
== Command: SET_JOINT ==
 
== Command: SET_JOINT ==
Set Joint Positions - float[max.16] - move joint here
+
Robot: Set Joint Positions - float[max.16] - move joint here
  
 
== Command: SET_VELOCITY ==
 
== Command: SET_VELOCITY ==
Set Joint Velocities - float[max.16] - move joint with this speed
+
Robot: Set Joint Velocities - float[max.16] - move joint with this speed
  
 
== Query: GET_NR_JOINT ==
 
== Query: GET_NR_JOINT ==
Get Number of Joints - integer
+
Robot: Get Number of Joints - integer
  
 
== Query: GET_JOINT ==
 
== Query: GET_JOINT ==
Get Actual Joint Positions
+
Robot: Get Actual Joint Positions
  
 
== Query: GET_VELOCITY==
 
== Query: GET_VELOCITY==
Get Actual Joint Velocities
+
Robot: Get Actual Joint Velocities
  
 
== Query: GET_AIR_PRESSURE ==
 
== Query: GET_AIR_PRESSURE ==
Get Actual Air Pressures
+
Robot: Get Actual Air Pressures
  
 
== Query: GET_JOINT_TRACK ==
 
== Query: GET_JOINT_TRACK ==
Get Actual Joint Tracking Errors
+
Robot: Get Actual Joint Tracking Errors
  
 
== Query: GET_BRAKE ==
 
== Query: GET_BRAKE ==
Get Brakes status
+
Robot: Get Brakes status
  
 
== Query: GET_MOVING ==
 
== Query: GET_MOVING ==
Get Joint Moving status
+
Robot: Get Joint Moving status
  
 
== Command: LOCK ==
 
== Command: LOCK ==
Lock (engage brakes - all of them)
+
Robot: Engage brakes - all of them
  
 
== Command: UNLOCK ==
 
== Command: UNLOCK ==
Unlock (disengage the brakes so it can be moved manually)
+
Robot: Unlock - disengage the brakes so it can be moved manually
  
 
== Command: LIMIT_VELOCITY==
 
== Command: LIMIT_VELOCITY==
Set entire robot velocity limit in Robot Coords. - float (like 10 mm/s)  
+
Robot: Set entire robot velocity limit in Robot Coords. - float (like 10 mm/s)  
 
 
  
 
= Responses sent by the robot (Robot -> Slicer) =
 
= Responses sent by the robot (Robot -> Slicer) =
 
== Value: COORDINATES ==
 
== Value: COORDINATES ==
Actual coordinates and insertion depth - 6DOF in global RAS coordinate system
+
Response from Robot: Actual coordinates and insertion depth - 6DOF in global RAS coordinate system
  
 
== Status: STATUS ==
 
== Status: STATUS ==
Robot done moving, Error message, Emergency stop  
+
Response from Robot: Robot done moving, Error message, Emergency stop  
  
 
== Response: JOINTS ==
 
== Response: JOINTS ==
Number of Joints - integer
+
Response from Robot: Number of Joints - integer
  
 
== Response: JOINT_POS ==
 
== Response: JOINT_POS ==
Actual joint positions - float[max.16] (joint positions in mm)
+
Response from Robot: Actual joint positions - float[max.16] (joint positions in mm)
  
 
== Response: JOINT_VEL ==
 
== Response: JOINT_VEL ==
Actual joint velocities - float[max.16] (joint velocities in mm/s)
+
Response from Robot: Actual joint velocities - float[max.16] (joint velocities in mm/s)
  
 
== Response: JOINT_TRACK ==
 
== Response: JOINT_TRACK ==
Actual joint tracking error - float[max.16] - "actual joint position" - "set joint position"
+
Response from Robot: Actual joint tracking error - float[max.16] - "actual joint position" - "set joint position"
  
 
== Response: AIR_PRESSURE ==
 
== Response: AIR_PRESSURE ==
Actual air pressures - float[max.32] - two per joint! (PSI for each valve)
+
Response from Robot: Actual air pressures - float[max.32] - two per joint! (PSI for each valve)
  
 
== Status: BRAKES ==
 
== Status: BRAKES ==
Brake status - float[max.16] - true(locked)/false(loose) for each joint
+
Response from Robot: Brake status - float[max.16] - true(locked)/false(loose) for each joint
  
 
== Status: DONE_MOVING ==
 
== Status: DONE_MOVING ==
Done moving/joint - float[max.16] - true/false for each joint
+
Response from Robot: Done moving/joint - float[max.16] - true/false for each joint

Revision as of 19:17, 2 February 2008

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

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

Query / Command (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.

Query: GET_COORDINATE

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

Query: GET_STATUS

Robot: Respond with status

Command: INSERT

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

Command: BIOPSY

Robot: Take biopsy (Retract Cannula)

Query: GET_BIOPSY

Robot: Respond with Actual Insertion Depth

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

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

Command: LOCK

Robot: Engage brakes - all of them

Command: UNLOCK

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

Command: LIMIT_VELOCITY

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

Responses sent by the robot (Robot -> Slicer)

Value: COORDINATES

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

Status: STATUS

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

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)

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