Difference between revisions of "OpenIGTLink/ProtocolV2/Type/SensorData"

From NAMIC Wiki
Jump to: navigation, search
 
(84 intermediate revisions by the same user not shown)
Line 1: Line 1:
[[OpenIGTLink/ProtocolV2/Draft | << Version 2 Draft Page]]
+
[[OpenIGTLink/ProtocolV2/Index | << Version 2 Index Page]]
  
 
=Summary=
 
=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.
+
SENSOR 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=
 
=Message Types=
==TDATA==
+
==SENSOR==
  
 
{| border="1" cellpadding="5" cellspacing="0" align="center"
 
{| border="1" cellpadding="5" cellspacing="0" align="center"
 
|-
 
|-
| align="left style="background:#e0e0e0;" | Data
+
| align="left" style="background:#e0e0e0;" | Data
| align="left style="background:#e0e0e0;" | Type
+
| align="left" style="background:#e0e0e0;" | Type
| align="left style="background:#e0e0e0;" | Description
+
| align="left" style="background:#e0e0e0;" | Description
 
|-
 
|-
| align="left" | NSENSOR
+
| align="left" | LARRAY
| align="left" | UINT16
+
| align="left" | uint8
| align="left" | Number of sensors
+
| align="left" | Length of array (0-255)
 
|-
 
|-
| align="left" | FORMAT
+
| align="left" | STATUS
| align="left" | UINT16
+
| align="left" | uint8
| align="left" |
+
| align="left" | Sensor status (Reserved)
Bit  1: Name flag<br/>
 
Bit  2: Arbitrary value 1          (*)<br/>
 
Bit  3: Arbitrary value 2          (*)<br/>
 
Bit  4: Arbitrary value 3          (*)<br/>
 
Bit  5: Arbitrary value 4          (*)<br/>
 
Bit  8: Position flag              (m)<br/>
 
Bit  9: Velocity flag              (m/s)<br/>
 
Bit 10: Acceleration flag          (m/s^2)<br/>
 
Bit 11: Force flag                (N)<br/>
 
Bit 12: Angle flag                (Rad)<br/>
 
Bit 13: Angular velocity flag     (Rad/s)<br/>
 
Bit 14: Angular acceleration flag    (Rad/s^2)<br/>
 
Bit 15: Torque flag         (N*m)<br/>
 
 
|-
 
|-
| colspan=3 align="left" |SENSOR1
+
| align="left" | UNIT
 +
| align="left" | uint64
 +
| align="left" | See [[OpenIGTLink/ProtocolV2/Unit| 64-bit UNIT field]].
 
|-
 
|-
| align="left" | (NAME)
+
| align="left" | DATA
| align="left" | UINT8[20]
+
| align="left" | float64[LARRAY]
| align="left" | Sensor name
+
| align="left" | value array for sensor 0
 
|-
 
|-
| align="left" | (ARB1)
+
|}
| align="left" | FLOAT32
+
 
| align="left" | Arbitrary value 1
+
 
 +
===Examples===
 +
====Sending 3-axis troque====
 +
A device with 3-axis torque (N*m) sensor is sending data to a data logger program. The following table shows example data format to send 3-axis torque:
 +
 
 +
{| border="1" cellpadding="5" cellspacing="0" align="center"
 
|-
 
|-
| align="left" | (ARB2)
+
| align="left" style="background:#e0e0e0;" | Data
| align="left" | FLOAT32
+
| align="left" style="background:#e0e0e0;" | Type
| align="left" | Arbitrary value 2
+
| align="left" style="background:#e0e0e0;" | Value
 
|-
 
|-
| align="left" | (ARB3)
+
| align="left" | LARRAY
| align="left" | FLOAT32
+
| align="left" | uint8
| align="left" | Arbitrary value 3
+
| align="left" | 3
 
|-
 
|-
| align="left" | (ARB4)
+
| align="left" | STATUS
| align="left" | FLOAT32
+
| align="left" | uint8
| align="left" | Arbitrary value 4
+
| align="left" | 0
 
|-
 
|-
| align="left" | (POSITION)
+
| align="left" | UNIT
| align="left" | FLOAT32[3]
+
| align="left" | uint64
| align="left" | Position (m)
+
| align="left" | 00000010 11000000 00010000 00000000 00000000 00000000 00000000 00000000
 
|-
 
|-
| align="left" | (VEL)
+
| align="left" | DATA
| align="left" | FLOAT32[3]
+
| align="left" | double[3]
| align="left" | Velocity (m/s)
+
| align="left" | {0.0, 0.0, 0.0}
 
|-
 
|-
| align="left" | (ACCEL)
+
|}
| align="left" | FLOAT32[3]
+
 
| align="left" |  Acceleration (m/s^2)
+
====Sending 3-axis force, troque and acceleration====
 +
By binding SENSOR data using BIND type, values from multiple types of sensors can be transferred simultaneously. See [[OpenIGTLink/ProtocolV2/Type/Bind|BIND message description page]] for detail.
 +
 
 +
==GET_SENSOR==
 +
 
 +
{| border="1" cellpadding="5" cellspacing="0" align="center"
 
|-
 
|-
| align="left" | (FORCE)
+
| align="left style="background:#e0e0e0;" | Data
| align="left" | FLOAT32[3]
+
| align="left style="background:#e0e0e0;" | Type
| align="left" | Force (N)
+
| align="left style="background:#e0e0e0;" | Description
 
|-
 
|-
| align="left" | (ANG)
+
|}
| align="left" | FLOAT32[3]
+
 
| align="left" | Angle (rad)
+
==STT_SENSOR==
|-
+
 
| align="left" | (ANGVEL)
+
{| border="1" cellpadding="5" cellspacing="0" align="center"
| 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" style="background:#e0e0e0;" | Data
| align="left" | FLOAT32[3]
+
| align="left" style="background:#e0e0e0;" | Type
| align="left" | Torque (N*m)
+
| align="left" style="background:#e0e0e0;" | Description
 
|-
 
|-
| colspan=3 align="center" style="background:#f0f0f0;" | ...
 
|-
 
| colspan=3 align="left" |SENSOR_N
 
|-
 
| 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" | (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)
 
 
|}
 
|}
  
==GET_TDATA==
+
<center> or </center>
  
 
{| border="1" cellpadding="5" cellspacing="0" align="center"
 
{| border="1" cellpadding="5" cellspacing="0" align="center"
 
|-
 
|-
| align="left style="background:#e0e0e0;" | Data
+
| align="left" style="background:#e0e0e0;" | Data
| align="left style="background:#e0e0e0;" | Type
+
| align="left" style="background:#e0e0e0;" | Type
| align="left style="background:#e0e0e0;" | Description
+
| align="left" style="background:#e0e0e0;" | Description
 +
|-
 +
| align="left" | RESOL
 +
| align="left" | uint64
 +
| align="left" | Minimum interval between message (ns). Same format as [[OpenIGTLink/Timestamp|TimeStamp]]
 
|-
 
|-
 
|}
 
|}
  
 +
==STP_SENSOR==
  
==STT_TDATA==
 
  
 
{| border="1" cellpadding="5" cellspacing="0" align="center"
 
{| border="1" cellpadding="5" cellspacing="0" align="center"
Line 166: Line 108:
 
|}
 
|}
  
==STP_TDATA==
+
==RTS_SENSOR==
  
 
{| border="1" cellpadding="5" cellspacing="0" align="center"
 
{| border="1" cellpadding="5" cellspacing="0" align="center"
Line 173: Line 115:
 
| align="left style="background:#e0e0e0;" | Type
 
| align="left style="background:#e0e0e0;" | Type
 
| align="left style="background:#e0e0e0;" | Description
 
| align="left style="background:#e0e0e0;" | Description
 +
|-
 +
| align="left" | Status
 +
| align="left" | 8 bit unsigned
 +
| align="left" | 0: Success 1: Error
 
|-
 
|-
 
|}
 
|}
 
==RTS_TDATA==
 
 
  
 
=Implementations=
 
=Implementations=
 
The TDATA message type is implemented in the following source code.
 
The TDATA message type is implemented in the following source code.
*[http://svn.na-mic.org/NAMICSandBox/trunk/OpenIGTLink/Source/igtlTrackingDataMessage.h igtlTrackingDataMessage.h]
+
<!--
*[http://svn.na-mic.org/NAMICSandBox/trunk/OpenIGTLink/Source/igtlTrackingDataMessage.cxx igtlTrackingDataMessage.cxx]
+
*[http://svn.na-mic.org/NAMICSandBox/trunk/OpenIGTLink/Source/igtlSensorMessage.h igtlSensorMessage.h]
 +
*[http://svn.na-mic.org/NAMICSandBox/trunk/OpenIGTLink/Source/igtlSensorMessage.cxx igtlSensorMessage.cxx]
 +
-->
  
 
=Contributors=
 
=Contributors=
Alexander Schaal
+
Junichi Tokuda, Yuichiro Hayashi
  
 
=Comments=
 
=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.
 

Latest revision as of 04:44, 30 November 2011

Home < OpenIGTLink < ProtocolV2 < Type < SensorData

<< Version 2 Index Page

Summary

SENSOR 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

SENSOR

Data Type Description
LARRAY uint8 Length of array (0-255)
STATUS uint8 Sensor status (Reserved)
UNIT uint64 See 64-bit UNIT field.
DATA float64[LARRAY] value array for sensor 0


Examples

Sending 3-axis troque

A device with 3-axis torque (N*m) sensor is sending data to a data logger program. The following table shows example data format to send 3-axis torque:

Data Type Value
LARRAY uint8 3
STATUS uint8 0
UNIT uint64 00000010 11000000 00010000 00000000 00000000 00000000 00000000 00000000
DATA double[3] {0.0, 0.0, 0.0}

Sending 3-axis force, troque and acceleration

By binding SENSOR data using BIND type, values from multiple types of sensors can be transferred simultaneously. See BIND message description page for detail.

GET_SENSOR

Data Type Description

STT_SENSOR

Data Type Description
or
Data Type Description
RESOL uint64 Minimum interval between message (ns). Same format as TimeStamp

STP_SENSOR

Data Type Description

RTS_SENSOR

Data Type Description
Status 8 bit unsigned 0: Success 1: Error

Implementations

The TDATA message type is implemented in the following source code.

Contributors

Junichi Tokuda, Yuichiro Hayashi

Comments