vrpn
07.33
Virtual Reality Peripheral Network
vrpn_Tracker_Crossbow.h
Go to the documentation of this file.
1
// vrpn_Tracker_Crossbow.h
2
// This file contains the class header for a Crossbow RGA300CA Tracker.
3
// This version was written in the summer of 2005 by Chris VanderKnyff.
4
5
#ifndef VRPN_TRACKER_CROSSBOW_H
6
#define VRPN_TRACKER_CROSSBOW_H
7
8
#include "quat.h"
// for q_type
9
#include "
vrpn_Configure.h
"
// for VRPN_API
10
#include "
vrpn_Shared.h
"
// for timeval
11
#include "
vrpn_Tracker.h
"
// for vrpn_Tracker_Serial
12
#include "
vrpn_Types.h
"
// for vrpn_int16, vrpn_uint16, etc
13
14
class
VRPN_API
vrpn_Connection
;
15
16
class
VRPN_API
vrpn_Tracker_Crossbow
:
public
vrpn_Tracker_Serial
{
17
public
:
26
27
vrpn_Tracker_Crossbow
(
const
char
*name,
vrpn_Connection
*c,
28
const
char
*port =
"/dev/ttyS0"
,
long
baud = 38400,
29
float
g_range = 2.0f,
float
ar_range = 100.0f);
30
31
~
vrpn_Tracker_Crossbow
();
32
33
// Run through the main loop once, sending notification messages as necessary
34
virtual
void
mainloop
();
35
36
// Reset the tracker.
37
void
reset
();
38
39
// Get reports from the serial port
40
int
get_report
();
41
42
// Retrieve the device's serial number. This is cached between resets.
43
vrpn_uint32 get_serial_number();
44
45
// Retrieve the device's version string. This is cached between resets.
46
const
char
*get_version_string();
47
48
// Recalibrates and zeros the device's rate sensors over a specified # of samples.
49
// This takes about 3-4ms per sample, during which time the process blocks.
50
// The device does not have to be level when zeroing, but must be still.
51
void
recalibrate(vrpn_uint16 num_samples = 20000);
52
53
protected
:
54
struct
raw_packet
{
55
vrpn_uint16
header
;
56
vrpn_int16
roll_angle
;
57
vrpn_int16
pitch_angle
;
58
vrpn_int16
yaw_rate
;
59
vrpn_int16
accel_x
;
60
vrpn_int16
accel_y
;
61
vrpn_int16
accel_z
;
62
vrpn_uint16
timer
;
63
vrpn_int16
temp_voltage
;
64
vrpn_int16
part_number
;
65
vrpn_int16
status
;
66
vrpn_uint16
checksum
;
67
};
68
69
struct
timeval init_time;
70
float
lin_accel_range
;
71
float
ang_accel_range
;
72
73
vrpn_uint32
device_serial
;
// Device serial number
74
char
*
device_version
;
// Device version string
75
76
int
just_read_something
;
77
78
void
unbuffer_packet(
raw_packet
&dest,
unsigned
char
*buffer);
79
int
validate_packet(
const
raw_packet
&packet);
80
void
process_packet(
const
raw_packet
&packet);
81
82
float
convert_scalar(vrpn_int16 data,
float
scale)
const
;
83
void
xb_quat_from_euler(q_type destQuat,
double
pitch,
double
roll)
const
;
84
85
void
send_report
();
86
87
void
ping();
88
89
};
90
91
#endif
92
vrpn_Tracker_Crossbow::raw_packet::roll_angle
vrpn_int16 roll_angle
Definition:
vrpn_Tracker_Crossbow.h:56
vrpn_Tracker.h
vrpn_Tracker_Crossbow::raw_packet::accel_y
vrpn_int16 accel_y
Definition:
vrpn_Tracker_Crossbow.h:60
vrpn_Tracker_Crossbow::raw_packet::accel_z
vrpn_int16 accel_z
Definition:
vrpn_Tracker_Crossbow.h:61
vrpn_Tracker_Crossbow::device_serial
vrpn_uint32 device_serial
Definition:
vrpn_Tracker_Crossbow.h:73
vrpn_Types.h
vrpn_Tracker_Crossbow
Definition:
vrpn_Tracker_Crossbow.h:16
vrpn_Tracker_Crossbow::lin_accel_range
float lin_accel_range
Definition:
vrpn_Tracker_Crossbow.h:70
vrpn_Tracker_Crossbow::ang_accel_range
float ang_accel_range
Definition:
vrpn_Tracker_Crossbow.h:71
vrpn_Tracker_Crossbow::raw_packet::pitch_angle
vrpn_int16 pitch_angle
Definition:
vrpn_Tracker_Crossbow.h:57
vrpn_Tracker_Crossbow::raw_packet::temp_voltage
vrpn_int16 temp_voltage
Definition:
vrpn_Tracker_Crossbow.h:63
vrpn_Shared.h
vrpn_Tracker_Crossbow::raw_packet
Definition:
vrpn_Tracker_Crossbow.h:54
vrpn_Tracker_Crossbow::raw_packet::checksum
vrpn_uint16 checksum
Definition:
vrpn_Tracker_Crossbow.h:66
vrpn_Tracker_Crossbow::raw_packet::timer
vrpn_uint16 timer
Definition:
vrpn_Tracker_Crossbow.h:62
vrpn_Tracker_Serial::send_report
virtual void send_report(void)
Definition:
vrpn_Tracker.C:885
vrpn_Tracker_Crossbow::raw_packet::part_number
vrpn_int16 part_number
Definition:
vrpn_Tracker_Crossbow.h:64
vrpn_Tracker_Serial::mainloop
virtual void mainloop()
Uses the get_report, send_report, and reset routines to implement a server.
Definition:
vrpn_Tracker.C:907
vrpn_Tracker_Crossbow::just_read_something
int just_read_something
Definition:
vrpn_Tracker_Crossbow.h:76
vrpn_Tracker_Crossbow::raw_packet::status
vrpn_int16 status
Definition:
vrpn_Tracker_Crossbow.h:65
vrpn_Connection
Generic connection class not specific to the transport mechanism.
Definition:
vrpn_Connection.h:510
vrpn_Tracker_Serial
Definition:
vrpn_Tracker.h:144
vrpn_Tracker_Crossbow::raw_packet::accel_x
vrpn_int16 accel_x
Definition:
vrpn_Tracker_Crossbow.h:59
vrpn_Tracker_Crossbow::raw_packet::yaw_rate
vrpn_int16 yaw_rate
Definition:
vrpn_Tracker_Crossbow.h:58
vrpn_Tracker_Crossbow::raw_packet::header
vrpn_uint16 header
Definition:
vrpn_Tracker_Crossbow.h:55
vrpn_Configure.h
vrpn_Tracker_Crossbow::device_version
char * device_version
Definition:
vrpn_Tracker_Crossbow.h:74
VRPN_API
#define VRPN_API
Definition:
vrpn_Configure.h:646
vrpn_Tracker_Serial::get_report
virtual int get_report(void)=0
Gets a report if one is available, returns 0 if not, 1 if complete report.
vrpn_Tracker_Serial::reset
virtual void reset(void)=0
Reset the tracker.
vrpn_Tracker_Crossbow.h
Generated by
1.8.16