Difference between revisions of "OpenIGTLink/ProtocolV2/Type/SensorData"
(→TDATA) |
(→TDATA) |
||
Line 30: | Line 30: | ||
Bit 11: Force flag (N)<br/> | Bit 11: Force flag (N)<br/> | ||
Bit 12: Angle flag (Rad)<br/> | Bit 12: Angle flag (Rad)<br/> | ||
− | Bit 13: | + | Bit 13: Angular velocity flag (Rad/s)<br/> |
− | Bit 14: | + | Bit 14: Angular acceleration flag (Rad/s^2)<br/> |
Bit 15: Torque flag (N*m)<br/> | Bit 15: Torque flag (N*m)<br/> | ||
|- | |- | ||
− | | | + | | colspan=3 align="left" |SENSOR1 |
− | |||
− | |||
|- | |- | ||
− | | align="left" | | + | | align="left" | (NAME) |
− | | align="left" | | + | | align="left" | UINT8[20] |
− | | align="left" | | + | | align="left" | Sensor name |
+ | |- | ||
+ | | align="left" | (ARB1) | ||
+ | | align="left" | FLOAT32 | ||
+ | | align="left" | Arbitrary value 1 | ||
+ | |- | ||
+ | | align="left" | (ARB2) | ||
+ | | align="left" | FLOAT32 | ||
+ | | align="left" | Arbitrary value 2 | ||
+ | |- | ||
+ | | align="left" | (ARB3) | ||
+ | | align="left" | FLOAT32 | ||
+ | | align="left" | Arbitrary value 3 | ||
+ | |- | ||
+ | | align="left" | (ARB4) | ||
+ | | align="left" | FLOAT32 | ||
+ | | align="left" | Arbitrary value 4 | ||
+ | |- | ||
+ | | align="left" | (POSITION) | ||
+ | | align="left" | FLOAT32[3] | ||
+ | | align="left" | Position (m) | ||
+ | |- | ||
+ | | align="left" | (VEL) | ||
+ | | align="left" | FLOAT32[3] | ||
+ | | align="left" | Velocity (m/s) | ||
+ | |- | ||
+ | | align="left" | (ACCEL) | ||
+ | | align="left" | FLOAT32[3] | ||
+ | | align="left" | Acceleration (m/s^2) | ||
+ | |- | ||
+ | | align="left" | (FORCE) | ||
+ | | align="left" | FLOAT32[3] | ||
+ | | align="left" | Force (N) | ||
+ | |- | ||
+ | | align="left" | (ANG) | ||
+ | | align="left" | FLOAT32[3] | ||
+ | | align="left" | Angle (rad) | ||
+ | |- | ||
+ | | align="left" | (ANGVEL) | ||
+ | | align="left" | FLOAT32[3] | ||
+ | | align="left" | Angular velocity (rad/s) | ||
+ | |- | ||
+ | | align="left" | (ANGVEL) | ||
+ | | align="left" | FLOAT32[3] | ||
+ | | align="left" | Angular accelearation (rad/s^2) | ||
+ | |- | ||
+ | | align="left" | (TORQUE) | ||
+ | | align="left" | FLOAT32[3] | ||
+ | | align="left" | Torque (N*m) | ||
|- | |- | ||
| colspan=3 align="center" style="background:#f0f0f0;" | ... | | colspan=3 align="center" style="background:#f0f0f0;" | ... | ||
|- | |- | ||
− | | align="left" | | + | | colspan=3 align="left" |SENSOR_N |
− | | align="left" | | + | |- |
− | | align="left" | | + | | align="left" | (NAME) |
+ | | align="left" | UINT8[20] | ||
+ | | align="left" | Sensor name | ||
+ | |- | ||
+ | | align="left" | (ARB1) | ||
+ | | align="left" | FLOAT32 | ||
+ | | align="left" | Arbitrary value 1 | ||
+ | |- | ||
+ | | align="left" | (ARB2) | ||
+ | | align="left" | FLOAT32 | ||
+ | | align="left" | Arbitrary value 2 | ||
+ | |- | ||
+ | | align="left" | (ARB3) | ||
+ | | align="left" | FLOAT32 | ||
+ | | align="left" | Arbitrary value 3 | ||
+ | |- | ||
+ | | align="left" | (ARB4) | ||
+ | | align="left" | FLOAT32 | ||
+ | | align="left" | Arbitrary value 4 | ||
+ | |- | ||
+ | | align="left" | (POSITION) | ||
+ | | align="left" | FLOAT32[3] | ||
+ | | align="left" | Position (m) | ||
+ | |- | ||
+ | | align="left" | (VEL) | ||
+ | | align="left" | FLOAT32[3] | ||
+ | | align="left" | Velocity (m/s) | ||
+ | |- | ||
+ | | align="left" | (ACCEL) | ||
+ | | align="left" | FLOAT32[3] | ||
+ | | align="left" | Acceleration (m/s^2) | ||
+ | |- | ||
+ | | align="left" | (FORCE) | ||
+ | | align="left" | FLOAT32[3] | ||
+ | | align="left" | Force (N) | ||
|- | |- | ||
− | | align="left" | | + | | align="left" | (ANG) |
− | | align="left" | | + | | align="left" | FLOAT32[3] |
− | | align="left" | | + | | align="left" | Angle (rad) |
|- | |- | ||
− | | align="left" | | + | | align="left" | (ANGVEL) |
− | | align="left" | | + | | align="left" | FLOAT32[3] |
− | | align="left" | | + | | align="left" | Angular velocity (rad/s) |
|- | |- | ||
− | | align="left" | | + | | align="left" | (ANGVEL) |
− | | align="left" | | + | | align="left" | FLOAT32[3] |
− | | align="left" | | + | | align="left" | Angular accelearation (rad/s^2) |
|- | |- | ||
+ | | align="left" | (TORQUE) | ||
+ | | align="left" | FLOAT32[3] | ||
+ | | align="left" | Torque (N*m) | ||
|} | |} | ||
Revision as of 04:11, 14 July 2010
Home < OpenIGTLink < ProtocolV2 < Type < SensorDataContents
Summary
SDATA is a message type, which is used to transfer sensor reading, 3-axis position, velocity, acceleration, angle, angle velocity and angle acceleration. The message format is intended for manipulator control and various types of sensors.
Message Types
TDATA
Data | Type | Description |
NSENSOR | UINT16 | Number of sensors |
FORMAT | UINT16 |
Bit 1: Name flag |
SENSOR1 | ||
(NAME) | UINT8[20] | Sensor name |
(ARB1) | FLOAT32 | Arbitrary value 1 |
(ARB2) | FLOAT32 | Arbitrary value 2 |
(ARB3) | FLOAT32 | Arbitrary value 3 |
(ARB4) | FLOAT32 | Arbitrary value 4 |
(POSITION) | FLOAT32[3] | Position (m) |
(VEL) | FLOAT32[3] | Velocity (m/s) |
(ACCEL) | FLOAT32[3] | Acceleration (m/s^2) |
(FORCE) | FLOAT32[3] | Force (N) |
(ANG) | FLOAT32[3] | Angle (rad) |
(ANGVEL) | FLOAT32[3] | Angular velocity (rad/s) |
(ANGVEL) | FLOAT32[3] | Angular accelearation (rad/s^2) |
(TORQUE) | FLOAT32[3] | Torque (N*m) |
... | ||
SENSOR_N | ||
(NAME) | UINT8[20] | Sensor name |
(ARB1) | FLOAT32 | Arbitrary value 1 |
(ARB2) | FLOAT32 | Arbitrary value 2 |
(ARB3) | FLOAT32 | Arbitrary value 3 |
(ARB4) | FLOAT32 | Arbitrary value 4 |
(POSITION) | FLOAT32[3] | Position (m) |
(VEL) | FLOAT32[3] | Velocity (m/s) |
(ACCEL) | FLOAT32[3] | Acceleration (m/s^2) |
(FORCE) | FLOAT32[3] | Force (N) |
(ANG) | FLOAT32[3] | Angle (rad) |
(ANGVEL) | FLOAT32[3] | Angular velocity (rad/s) |
(ANGVEL) | FLOAT32[3] | Angular accelearation (rad/s^2) |
(TORQUE) | FLOAT32[3] | Torque (N*m) |
GET_TDATA
Data | Type | Description |
STT_TDATA
Data | Type | Description |
Resolution | 32 bit unsigned | Minimum time between two frames. Use 0 for as fast as possible. If e.g. 50 ms is specified, the maximum update rate will be 20 Hz. |
Coordinate system name | char[20] | Coordinate system to use. Can be empty for default coordinate system. (not included if action = 2) |
- All tracking data from one frame is included.
- Invisible/unavailable trackers/instruments are not included.
- Easy to develop. Sample pseudo code: while(true) { recv(trackingdata); updateView(trackingdata); }
- Usually the tracking data will be sent using the standard coordinate system, which is also used for POINT, IMAGE, ... But this does only work after patient registration. Therefore the body of START_PUSH has an optional field for specifing the coordinate system "CAMERA". To switch back to the standard coordinate system, one has to send STOP_PUSH and afterwards START_PUSH without explicitly specifing the camera coordinate system.
STP_TDATA
Data | Type | Description |
RTS_TDATA
Implementations
The TDATA message type is implemented in the following source code.
Contributors
Alexander Schaal
Comments
Junichi:
- How about adding 8- or 16-bit status field in TDATA? This will allow us to indicate that coordinate system is not registered. I would like to keep START_PUSH message simple....
Alexander:
- What status types can be specified?
- In the case the coordinate system is not valid, a STATUS message should be returned.
- Well, I understand that you would like to keep it as simple as possible. We really like to specifiy the coordinate system like "Camera" or "Patient". We could also specifiy a SET_COORD message, but I think this would be overkill. I still vote for a data specific argument field in START_PUSH. Maybe other future data types can also use this field?
- Due to consistency, I think we should add this field to STOP_PUSH, too.
- We would like to allow only one TDATA push for each client at a time, so a second START_PUSH will stop the first and start the second. A STOP_PUSH will stop the push regardless of the arguments in the body. What do you think about that?
Junichi:
- I haven't defined status types... it can be a bit array like: bit 0: registered or not; bit 1: line-of-site error; ....
- Do you think it is useful? if not, we can omit it.
- I agree that we need a way to specify coordinate system. It's good idea to have data specific field in the START_PUSH.
- I agree with the last comment. I would say one TDATA push for each device name, because multiple data sources may exist. The coordinate system can be overwritten by another START_PUSH message with the same device name and type.
Alexander:
- I think we don't need the status type. But maybe we define a TDATA in v3 after collecting some feedback from different users. I could think about other fields like diameter of instruments, etc. But for now I would like to keep TDATA as simple as possible.
- Ok, starting another trackingdata push with the same device name will implictly stop the first one. But if another device name is used, a second push will be started.