Difference between revisions of "OpenIGTLink/Protocol/JHUBRP"
Line 24: | Line 24: | ||
== START_UP == | == START_UP == | ||
− | Initialize robot | + | Slicer: Send "START_UP" Workphase command<br /> |
+ | Robot: Initialize robot and respond with status message | ||
== PLANNING == | == PLANNING == | ||
− | + | Robot: Do nothing, respond with status | |
== CALIBRATION == | == CALIBRATION == | ||
− | Robot | + | Robot: Do nothing, respond with status. Waiting for SET_Z_FRAME command (Z-Frame transformation). |
== TARGETING == | == TARGETING == | ||
− | Robot | + | 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 | + | Robot: Responds with status |
= Query / Command (Slicer -> Robot) = | = Query / Command (Slicer -> Robot) = | ||
== Command: INITIALIZE == | == Command: INITIALIZE == | ||
− | Initialize | + | 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 == | ||
− | + | Robot: Respond with current coordinate (position and orientation in global RAS coordinate system) | |
== Query: GET_STATUS == | == Query: GET_STATUS == | ||
− | + | Robot: Respond with status | |
== Command: INSERT == | == Command: INSERT == | ||
− | + | 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 == | ||
− | + | 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 == | ||
− | + | Robot: Engage brakes - all of them | |
== Command: UNLOCK == | == Command: UNLOCK == | ||
− | Unlock | + | 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 < JHUBRPContents
- 1 System Diagram
- 2 Workflow
- 3 Set Workphase (Slicer -> Robot)
- 4 Query / Command (Slicer -> Robot)
- 4.1 Command: INITIALIZE
- 4.2 Command: SET_Z_FRAME
- 4.3 Command: MOVE_TO
- 4.4 Query: GET_COORDINATE
- 4.5 Query: GET_STATUS
- 4.6 Command: INSERT
- 4.7 Command: BIOPSY
- 4.8 Query: GET_BIOPSY
- 4.9 Command: HOME
- 4.10 Command: STOP
- 4.11 Command: E_STOP
- 4.12 Command: SET_JOINT
- 4.13 Command: SET_VELOCITY
- 4.14 Query: GET_NR_JOINT
- 4.15 Query: GET_JOINT
- 4.16 Query: GET_VELOCITY
- 4.17 Query: GET_AIR_PRESSURE
- 4.18 Query: GET_JOINT_TRACK
- 4.19 Query: GET_BRAKE
- 4.20 Query: GET_MOVING
- 4.21 Command: LOCK
- 4.22 Command: UNLOCK
- 4.23 Command: LIMIT_VELOCITY
- 5 Responses sent by the robot (Robot -> Slicer)
System Diagram
Workflow
- Scanner: Scout image acquisition with the landmark close to the prostate
- Navigation soft and scanner: Calculate Z-frame position, scan a slice through the Z-frame
- Repeat previous step if the Z-frame is not visible enough to register the robot
- Scanner: 3D volume acquisition of the prostate
- Navigation soft: Select (or import) the targets, show needle path, allow modification
- Navigation soft: Calculate the target and path, send it to the robot
- Robot: Execute command
- [Optional] Navigation soft: send current robot coordinates to the Real Time scanner IO for needle tracking, display image
- Navigation soft: Display robot position and status
- Scanner: Confirm robot location before biopsy
- Manual: Insert biopsy needle
- [Optional] Navigation soft: show Real time images of the needle insertion
- 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