Skip to content
Franklin King edited this page Feb 22, 2024 · 16 revisions

Supported builds:

Software Version Dependencies
Windows 10 Visual Studio 17 2022
Prostate BRP Interface https://github.com/ProstateBRP/BRPRobot2021/commit/f194071cb8c945800b1eaa507f2b9cc0fa163cc9 SlicerZFrameRegistration, SlicerOpenIGTLink
SlicerZFrameRegistration https://github.com/SlicerProstate/SlicerZFrameRegistration/commit/28d43dd19c5052dbcc51ff79a108f91f32e5ea16 replaced a folder with Rebecca's code. SlicerDevelopmentToolbox
SlicerDevelopmentToolbox Slicer Extensions Manager or https://github.com/QIICR/SlicerDevelopmentToolbox -
SlicerOpenIGTLink Slicer Extensions Manager or https://github.com/openigtlink/SlicerOpenIGTLink -
SlicerIGT Slicer Extensions Manager or https://github.com/SlicerIGT/SlicerIGT -
Slicer 5.02 Stable: https://github.com/Slicer/Slicer/commit/a4420c378ebe8d84928f10bd3040d48181890a3b Qt 5.15.2

✔️ Builds successfully
✔️ Works with test data in simulation
➖ Works with physical robot

Software Version Dependencies
Windows 11 Visual Studio 17.2.1
Prostate BRP Interface https://github.com/ProstateBRP/BRPRobot2021/commit/f194071cb8c945800b1eaa507f2b9cc0fa163cc9 SlicerZFrameRegistration, SlicerOpenIGTLink
SlicerZFrameRegistration https://github.com/SlicerProstate/SlicerZFrameRegistration/commit/28d43dd19c5052dbcc51ff79a108f91f32e5ea16 replaced a folder with Rebecca's code. SlicerDevelopmentToolbox
SlicerDevelopmentToolbox Slicer Extensions Manager or https://github.com/QIICR/SlicerDevelopmentToolbox -
SlicerOpenIGTLink Slicer Extensions Manager or https://github.com/openigtlink/SlicerOpenIGTLink -
SlicerIGT Slicer Extensions Manager or https://github.com/SlicerIGT/SlicerIGT -
Slicer 5.02 Stable: https://github.com/Slicer/Slicer/commit/a4420c378ebe8d84928f10bd3040d48181890a3b Qt 5.15.2

✔️ Builds successfully
✔️ Works with test data in simulation
➖ Works with physical robot

Software Version Dependencies
Ubuntu 20.04 GCC
Prostate BRP Interface https://github.com/ProstateBRP/BRPRobot2021/commit/f194071cb8c945800b1eaa507f2b9cc0fa163cc9 SlicerZFrameRegistration, SlicerOpenIGTLink, libeigen3-dev
SlicerZFrameRegistration https://github.com/SlicerProstate/SlicerZFrameRegistration/commit/28d43dd19c5052dbcc51ff79a108f91f32e5ea16 replaced a folder with Rebecca's code. SlicerDevelopmentToolbox
SlicerDevelopmentToolbox Slicer Extensions Manager or https://github.com/QIICR/SlicerDevelopmentToolbox Slicer
SlicerOpenIGTLink Slicer Extensions Manager or https://github.com/openigtlink/SlicerOpenIGTLink Slicer
SlicerIGT Slicer Extensions Manager or https://github.com/SlicerIGT/SlicerIGT SlicerIGSIO, Slicer
SlicerIGSIO Slicer Extensions Manager or https://github.com/IGSIO/SlicerIGSIO Slicer
Slicer 5.02 Stable: https://github.com/Slicer/Slicer/commit/a4420c378ebe8d84928f10bd3040d48181890a3b Qt 5.15.2

➖ Builds successfully
➖ Works with test data in simulation
➖ Works with physical robot


Testing architecture:

Robot Communication Test Build: https://github.com/ProstateBRP/ProstateRobotCommunication Submodule of Prostate Robot repository

Built separately for testing purposes and uses a dummy Prostate Robot

Slicer Communication Test Build: (Tentative) Script sends OpenIGTLink commands mimicking 3D Slicer

Communication Test Scenarios:

Normal operation

  1. START_UP sent from Slicer to Robot
  2. ACK sent from Robot to Slicer
  3. STATUS sent from Robot to Slicer
  4. CALIBRATION sent from Slicer to Robot
  5. ACK sent from Robot to Slicer
  6. STATUS sent from Robot to Slicer
  7. TRANSFORM (calibration) sent from Slicer to Robot
  8. ACK sent from Robot to Slicer
  9. STATUS sent from Robot to Slicer
  10. PLANNING sent from Slicer to Robot
  11. ACK sent from Robot to Slicer
  12. STATUS sent from Robot to Slicer
  13. TRANSFORM (target) sent from Slicer to Robot
  14. ACK sent from Robot to Slicer
  15. STATUS sent from Robot to Slicer
  16. TARGETING sent from Slicer to Robot
  17. ACK sent from Robot to Slicer
  18. TRANSFORM (target) sent from Robot to Slicer
  19. STATUS (Reachable) sent from Robot to Slicer
  20. [Tentative] Slicer waits for ACK from Robot to Slicer for end of movement
  21. MOVE sent from Slicer to Robot
  22. ACK sent from Robot to Slicer
  23. STATUS sent from Robot to Slicer

Improper calibration matrix sent

  1. START_UP sent from Slicer to Robot
  2. ACK sent from Robot to Slicer
  3. STATUS sent from Robot to Slicer
  4. CALIBRATION sent from Slicer to Robot
  5. ACK sent from Robot to Slicer
  6. STATUS sent from Robot to Slicer
  7. TRANSFORM (calibration) sent from Slicer to Robot
  8. ACK sent from Robot to Slicer
  9. Slicer displays Calibration error

Target sent by Slicer is out of bounds

  1. START_UP sent from Slicer to Robot
  2. ACK sent from Robot to Slicer
  3. STATUS sent from Robot to Slicer
  4. CALIBRATION sent from Slicer to Robot
  5. ACK sent from Robot to Slicer
  6. STATUS sent from Robot to Slicer
  7. TRANSFORM (calibration) sent from Slicer to Robot
  8. ACK sent from Robot to Slicer
  9. STATUS sent from Robot to Slicer
  10. PLANNING sent from Slicer to Robot
  11. ACK sent from Robot to Slicer
  12. STATUS sent from Robot to Slicer
  13. TRANSFORM (target) sent from Slicer to Robot
  14. ACK sent from Robot to Slicer
  15. STATUS sent from Robot to Slicer
  16. TARGETING sent from Slicer to Robot
  17. ACK sent from Robot to Slicer
  18. TRANSFORM (target) sent from Robot to Slicer
  19. STATUS (NOT reachable) sent from Robot to Slicer
  20. Slicer displays error

Emergency Stop activated during Move to Target

  1. START_UP sent from Slicer to Robot
  2. ACK sent from Robot to Slicer
  3. STATUS sent from Robot to Slicer
  4. CALIBRATION sent from Slicer to Robot
  5. ACK sent from Robot to Slicer
  6. STATUS sent from Robot to Slicer
  7. TRANSFORM (calibration) sent from Slicer to Robot
  8. ACK sent from Robot to Slicer
  9. STATUS sent from Robot to Slicer
  10. PLANNING sent from Slicer to Robot
  11. ACK sent from Robot to Slicer
  12. STATUS sent from Robot to Slicer
  13. TRANSFORM (target) sent from Slicer to Robot
  14. ACK sent from Robot to Slicer
  15. STATUS sent from Robot to Slicer
  16. TARGETING sent from Slicer to Robot
  17. ACK sent from Robot to Slicer
  18. TRANSFORM (target) sent from Robot to Slicer
  19. STATUS (Reachable) sent from Robot to Slicer
  20. EMERGENCY STOP sent from Slicer to Robot
  21. Slicer displays that Robot has stopped

Build Instructions:

  1. Install Slicer from source. FINAL: Navigate to: /BRPRobot2021/ and copy ZFrameRegistration folder. Next step: Navigate to /SlicerZFrameRegistration/ and replace the ZFrameRegistration folder with the folder copied in the previous step by pasting it into the folder's root directory. NOTE Make sure you replace the whole folder.

Project Week Oct 15 - Oct 22.

The goal of the project week is to implement the Open IGT Protocol clients/servers using CMake. We will use the latest OpenIGTLink (compiled elsewhere) to be linked to both WPI and BWH software.

It is expected, but not necessary, that each party will develop an independent bridging software that communicates with their proprietary software via shared memory, peer-to-peer socket communication etc. when a party compiles the other party's software in a simulation mode, this communication with the proprietary software is cut.

[Real mode] WPI control software ---- WPI bridging software <----[this project] ----> BWH bridging software ---- Slicer

[Simulation mode] (looping with different responses from simulation patterns) WPI bridging software <----[this project] ----> BWH bridging software (looping with simulated behavioral responses from Slicer)

The goal of the hackason week is to etablish [simulation mode] using https://www.na-mic.org/wiki/ProstateBRP_OpenIGTLink_Communication_June_2013.

Step 1: Create a CMake environment to compile an example code from TrackerClient in and TrackerServer in BWH. Create CMake in the BRPRobot2001 that compiles CMake's in WPI and BWH directory.

(Rebecca: Added String Example CMakeFiles and .cxx files to BRPRobot-bridge-Slicer. Allows us to pull from the GitHub and compile example clients/servers on our individual desktops.)

Hint https://github.com/ProstateBRP/CommunicationTest/blob/master/CMakeLists.txt

Step 2: Add WPI_SIMULATION ON/OFF and BWH_SIMULATION ON/OFF in the parent Cmake, pass it to individual CMakes in BWH and WPI directory, and compile different in ON mode and OFF mode.

Step 3: modify TrackerClient in WPI, and TrackerServer in BWH, and changes phases. Specificaly implement the following in BWH, and WPI should respond according to the protocol. Use if(simulation) wisely. Define global variable to store phases.

Hint -- https://github.com/ProstateBRP/CommunicationTest/blob/master/RobotSimulatorTargetingPhase.cxx

STRING(CMD_XXXX, START_UP) >> STRING(CMD_XXXX, PLANNING) >> STRING(CMD_XXXX, CALIBRATION) >> STRING(CMD_XXXX, TARGETING) >> STRING (CMD_XXXX, MANUAL) >> STRING(CMD_XXXX, STOP) >> STRING(CMD_XXXX, EMERGENCY) >> GET_TRANSFORM(CURRENT_POSITION) >> GET_STATUS(CURRENT_STATUS) >> ?? CONFIRM COMMAND STRUCTURE FOR STATUS REQUEST