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

From NAMIC Wiki
Jump to: navigation, search
 
(35 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=
Line 13: Line 13:
 
| align="left" style="background:#e0e0e0;" | Description
 
| align="left" style="background:#e0e0e0;" | Description
 
|-
 
|-
| align="left" | NSENSORS
+
| align="left" | LARRAY
| align="left" | uint16
 
| align="left" | Number of sensors
 
|-
 
| colspan=3 align="left" style="background:#e0e0e0;" |FORMAT 0
 
|-
 
| align="left" | LARRAY 0
 
 
| align="left" | uint8
 
| align="left" | uint8
 
| align="left" | Length of array (0-255)
 
| align="left" | Length of array (0-255)
 
|-
 
|-
| align="left" | UNIT 0
+
| align="left" | STATUS
| align="left" | uint64
 
| align="left" | See bellow
 
|-
 
| align="left" | NAMELEN 0
 
 
| align="left" | uint8
 
| align="left" | uint8
| align="left" | Name length
+
| align="left" | Sensor status (Reserved)
 
|-
 
|-
| colspan=3 align="left" style="background:#f0f0f0;"|...
+
| align="left" | UNIT
|-
+
| align="left" | uint64
| colspan=3 align="left" style="background:#e0e0e0;" |FORMAT (NSENSORS-1)
+
| align="left" | See [[OpenIGTLink/ProtocolV2/Unit| 64-bit UNIT field]].
|-
 
| align="left" | LARRAY (NSENSORS-1)
 
| align="left" | int8
 
| align="left" | Length of array (0-255)
 
|-
 
| align="left" | UNIT (NSENSORS-1)
 
| align="left" | int64
 
| align="left" | see bellow
 
|-
 
| align="left" | NAMELEN (NSENSORS-1)
 
| align="left" | uint8
 
| align="left" | Name length
 
|-
 
| colspan=3 align="left" style="background:#e0e0e0;" |NAME Table
 
|-
 
| align="left" | NAME 0
 
| align="left" | char[NAMELEN]
 
| align="left" | Name
 
|-
 
| colspan=3 align="left" style="background:#f0f0f0;"|...
 
|-
 
| align="left" | NAME (NSENSORS-1)
 
| align="left" | char[NAMELEN (NSENSORS-1)]
 
| align="left" | Name
 
|-
 
| align="left" | Padding*
 
| align="left" | uint8 or none
 
| align="left" | padding to align DATA with WORD
 
|-
 
| colspan=3 align="left" style="background:#e0e0e0;" |DATA
 
 
|-
 
|-
| align="left" | DATA 0
+
| align="left" | DATA
| align="left" | float64[LARRAY 0]
+
| align="left" | float64[LARRAY]
 
| align="left" | value array for sensor 0
 
| align="left" | value array for sensor 0
|-
 
| align="left" | DATA 1
 
| align="left" | float64[LARRAY 1]
 
| align="left" | value array for sensor 1
 
|-
 
| colspan=3 align="left" style="background:#f0f0f0;"|...
 
|-
 
| align="left" | DATA (NSENSORS-1)
 
| align="left" | float64[LARRAY (NSENSORS-1)]
 
| align="left" | value array for sensor (NSENSORS-1)
 
 
|-
 
|-
 
|}
 
|}
  
In C/C++, the size of padding is determined by:
 
(NAMELEN0 + NAMELEN1 + ... ) % 2 == 0) ? 0 : 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:
  
===Definition of UNIT field===
 
UNIT is a 64-bit field to specify a unit consisting of SI-prefix (e.g. milli, micro, kilo etc...) and combination of SI-base and/or SI-derived unites.
 
 
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...
 
  |PREFIX |  UNIT0  |  EXP0 |  UNIT1  |  EXP1 |  UNIT2  | EXP2
 
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...
 
  0              1              2              3              4
 
 
    ...-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 
        EXP2 |  UNIT3  |  EXP3 |  UNIT4  |  EXP4 |  UNIT5  |  EXP5 |
 
    ...-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 
        4              5              6              7
 
 
'''PREFIX (4bit)'''
 
 
{| border="1" cellpadding="5" cellspacing="0" align="center"
 
{| border="1" cellpadding="5" cellspacing="0" align="center"
 
|-
 
|-
| align="left" style="background:#eeeeee;" | Value
+
| align="left" style="background:#e0e0e0;" | Data
| align="left" style="background:#eeeeee;" | SI-prefix
+
| align="left" style="background:#e0e0e0;" | Type
| align="left" style="background:#eeeeee;" | Value
+
| align="left" style="background:#e0e0e0;" | Value
| align="left" style="background:#eeeeee;" | SI-prefix
 
 
|-
 
|-
| align="left" | 0x0
+
| align="left" | LARRAY
| align="left" | None
+
| align="left" | uint8
| align="left" | --
+
| align="left" | 3
| align="left" |--
 
 
|-
 
|-
| align="left" | 0x1
+
| align="left" | STATUS
| align="left" | deka (deca) (1e1)
+
| align="left" | uint8
| align="left" | 0x9
+
| align="left" | 0
| align="left" | deci (1e-1)
 
 
|-
 
|-
| align="left" | 0x2
+
| align="left" | UNIT
| align="left" | hecto (1e2)
+
| align="left" | uint64
| align="left" | 0xA
+
| align="left" | 00000010 11000000 00010000 00000000 00000000 00000000 00000000 00000000
| align="left" | centi (1e-2)
 
 
|-
 
|-
| align="left" | 0x3
+
| align="left" | DATA
| align="left" | kilo (1e3)
+
| align="left" | double[3]
| align="left" | 0xB
+
| align="left" | {0.0, 0.0, 0.0}
| align="left" | milli (1e-3)
 
|-
 
| align="left" | 0x4
 
| align="left" | mega (1e6)
 
| align="left" | 0xC
 
| align="left" | micro (1e-6)
 
|-
 
| align="left" | 0x5
 
| align="left" | giga (1e9)
 
| align="left" | 0XD
 
| align="left" | nano (1e-9)
 
|-
 
| align="left" | 0x6
 
| align="left" | tera (1e12)
 
| align="left" | 0XE
 
| align="left" | pico (1e-12)
 
|-
 
| align="left" | 0x7
 
| align="left" | peta (1e15)
 
| align="left" | 0XF
 
| align="left" | femto (1e-15)
 
 
|-
 
|-
 
|}
 
|}
  
 +
====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.
  
'''UNIT(6bit)'''
+
==GET_SENSOR==
<center>SI base units</center>
 
{| border="1" cellpadding="5" cellspacing="0" align="center"
 
|-
 
| align="left" style="background:#eeeeee;" | Value
 
| align="left" style="background:#eeeeee;" | SI base unit name
 
| align="left" style="background:#eeeeee;" | Value
 
| align="left" style="background:#eeeeee;" | SI base unit name
 
|-
 
| align="left" | 0x01
 
| align="left" | meter
 
| align="left" | 0x05
 
| align="left" | kelvin
 
|-
 
| align="left" | 0x02
 
| align="left" | gram
 
| align="left" | 0x06
 
| align="left" | mole
 
|-
 
| align="left" | 0x03
 
| align="left" | second
 
| align="left" | 0x07
 
| align="left" | candela
 
|-
 
| align="left" | 0x04
 
| align="left" | ampere
 
| align="left" | --
 
| align="left" | --
 
|-
 
|}
 
  
<center>SI derived units</center>
 
 
{| border="1" cellpadding="5" cellspacing="0" align="center"
 
{| border="1" cellpadding="5" cellspacing="0" align="center"
 
|-
 
|-
| align="left" style="background:#eeeeee;" | Value
+
| align="left style="background:#e0e0e0;" | Data
| align="left" style="background:#eeeeee;" | Unit name
+
| align="left style="background:#e0e0e0;" | Type
| align="left" style="background:#eeeeee;" | dimension
+
| align="left style="background:#e0e0e0;" | Description
| align="left" style="background:#eeeeee;" | Value
 
| align="left" style="background:#eeeeee;" | Unit name
 
| align="left" style="background:#eeeeee;" | dimension
 
|-
 
| align="left" | 0x08
 
| align="left" | radian
 
| align="left" | meter/meter
 
| align="left" | 0x12
 
| align="left" | ohm
 
| align="left" | meter^2-kilogram/second^3-ampere^2
 
|-
 
| align="left" | 0x09
 
| align="left" | steradian
 
| align="left" | meter^2/meter^2
 
| align="left" | 0x14
 
| align="left" | siemens
 
| align="left" | second^3-ampere^2/meter^2-kilogram
 
|-
 
| align="left" | 0x0A
 
| align="left" | hertz
 
| align="left" | /second
 
| align="left" | 0x15
 
| align="left" | weber
 
| align="left" | meter^2-kilogram/second^2-ampere
 
|-
 
| align="left" | 0x0B
 
| align="left" | newton
 
| align="left" | meter-kilogram/second^2
 
| align="left" | 0x16
 
| align="left" | tesla
 
| align="left" | kilogram/second^2-ampere
 
|-
 
| align="left" | 0x0C
 
| align="left" | pascal
 
| align="left" | kilogram/meter-second^2
 
| align="left" | 0x17
 
| align="left" | henry
 
| align="left" | meter^2-kilogram/second^2-ampere^2
 
|-
 
| align="left" | 0x0D
 
| align="left" | joule
 
| align="left" | meter^2-kilogram/second^2
 
| align="left" | 0x18
 
| align="left" | lumen
 
| align="left" | candela-steradian
 
|-
 
| align="left" | 0x0E
 
| align="left" | watt
 
| align="left" | meter^2-kilogram/second^3
 
| align="left" | 0x19
 
| align="left" | lux
 
| align="left" | candela-steradian/meter^2
 
|-
 
| align="left" | 0x0F
 
| align="left" | coulomb
 
| align="left" | second-ampere
 
| align="left" | 0x1A
 
| align="left" | becquerel
 
| align="left" | /second
 
|-
 
| align="left" | 0x10
 
| align="left" | volt
 
| align="left" | meter^2-kilogram/second^3-ampere
 
| align="left" | 0x1B
 
| align="left" | gray
 
| align="left" | meter^2/second^2
 
|-
 
| align="left" | 0x11
 
| align="left" | farad
 
| align="left" | second^4-ampere^2/meter^2-kilogram
 
| align="left" | 0x1C
 
| align="left" | sievert
 
| align="left" | meter^2/second^2
 
 
|-
 
|-
 
|}
 
|}
  
 +
==STT_SENSOR==
  
'''EXP''' (4-bit)
 
 
{| border="1" cellpadding="5" cellspacing="0" align="center"
 
{| border="1" cellpadding="5" cellspacing="0" align="center"
 
|-
 
|-
| align="left" style="background:#eeeeee;" | Value
+
| align="left" style="background:#e0e0e0;" | Data
| align="left" style="background:#eeeeee;" | Exponent
+
| align="left" style="background:#e0e0e0;" | Type
| align="left" style="background:#eeeeee;" | Value
+
| align="left" style="background:#e0e0e0;" | Description
| align="left" style="background:#eeeeee;" | Exponent
 
|-
 
| align="left" | 0x0
 
| align="left" | ^0
 
| align="left" | --
 
| align="left" |--
 
|-
 
| align="left" | 0x1
 
| align="left" | ^1
 
| align="left" | 0xF
 
| align="left" | ^-1
 
|-
 
| align="left" | 0x2
 
| align="left" | ^2
 
| align="left" | 0xE
 
| align="left" | ^-2
 
|-
 
| align="left" | 0x3
 
| align="left" | ^3
 
| align="left" | 0xD
 
| align="left" | ^-3
 
|-
 
| align="left" | 0x4
 
| align="left" | ^4
 
| align="left" | 0xC
 
| align="left" | ^-4
 
|-
 
| align="left" | 0x5
 
| align="left" | ^5
 
| align="left" | 0XB
 
| align="left" | ^-5
 
|-
 
| align="left" | 0x6
 
| align="left" | ^6
 
| align="left" | 0XA
 
| align="left" | ^-6
 
|-
 
| align="left" | 0x7
 
| align="left" | ^7
 
| align="left" | 0X9
 
| align="left" | ^-7
 
 
|-
 
|-
 
|}
 
|}
  
===Examples===
+
<center> or </center>
====Sending 3-axis position====
+
 
A device with 3-axis force (N), 3-axis torque (N*m) and 3-axis acceleration (mm/s^2) sensors is sending data to a data logger program. The names of the sensors are "FORCE", "TORQUE", and "ACCEL." The message structure may be as follows:
 
 
{| 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;" | Value
+
| align="left" style="background:#e0e0e0;" | Description
 
|-
 
|-
| align="left" | NSENSORS
+
| align="left" | RESOL
| align="left" | uint16
+
| align="left" | uint64
| align="left" | 3
+
| align="left" | Minimum interval between message (ns). Same format as [[OpenIGTLink/Timestamp|TimeStamp]]
|-
 
| align="left" | LARRAY 0
 
| align="left" | uint8
 
| align="left" | 3
 
|-
 
| align="left" | PREFIX 0
 
| align="left" | int8
 
| align="left" | 0
 
|-
 
| align="left" | DIMENSION 0
 
| align="left" | uint8[6]
 
| align="left" | 0x58 0x00 0x00 0x00 0x00 0x00 (N)
 
|-
 
| align="left" | NAME0
 
| align="left" | char[20]
 
| align="left" | "FORCE"
 
|-
 
| align="left" | LARRAY 1
 
| align="left" | uint8
 
| align="left" | 3
 
|-
 
| align="left" | PREFIX 1
 
| align="left" | int8
 
| align="left" | 0
 
|-
 
| align="left" | DIMENSION 1
 
| align="left" | uint8[6]
 
| align="left" | 0x58 0x08 0x00 0x00 0x00 0x00 (N*m)
 
|-
 
| align="left" | NAME 1
 
| align="left" | char[20]
 
| align="left" | "TORQUE"
 
|-
 
| align="left" | LARRAY 2
 
| align="left" | uint8
 
| align="left" | 3
 
|-
 
| align="left" | PREFIX 2
 
| align="left" | int8
 
| align="left" | 0
 
|-
 
| align="left" | DIMENSION 2
 
| align="left" | uint8[6]
 
| align="left" | 0x08 0x03 0x00 0x00 0x00 0x00 (m/s^2)
 
|-
 
| align="left" | NAME 2
 
| align="left" | char[20]
 
| align="left" | "ACCEL"
 
|-
 
| align="left" | DATA 0
 
| align="left" | double[3]
 
| align="left" | {0.0, 0.0, 0.0}
 
|-
 
| align="left" | DATA 1
 
| align="left" | double[3]
 
| align="left" | {0.0, 0.0, 0.0}
 
|-
 
| align="left" | DATA 2
 
| align="left" | double[3]
 
| align="left" | {0.0, 0.0, 0.0}
 
 
|-
 
|-
 
|}
 
|}
  
==GET_SENSOR==
+
==STP_SENSOR==
 +
 
  
 
{| border="1" cellpadding="5" cellspacing="0" align="center"
 
{| border="1" cellpadding="5" cellspacing="0" align="center"
Line 397: Line 107:
 
|-
 
|-
 
|}
 
|}
 
 
==STT_SENSOR==
 
 
N/A
 
 
==STP_SENSOR==
 
 
N/A
 
 
  
 
==RTS_SENSOR==
 
==RTS_SENSOR==
  
N/A
+
{| border="1" cellpadding="5" cellspacing="0" align="center"
 +
|-
 +
| align="left style="background:#e0e0e0;" | Data
 +
| align="left style="background:#e0e0e0;" | Type
 +
| align="left style="background:#e0e0e0;" | Description
 +
|-
 +
| align="left" | Status
 +
| align="left" | 8 bit unsigned
 +
| align="left" | 0: Success 1: Error
 +
|-
 +
|}
  
 
=Implementations=
 
=Implementations=

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