vrpn 07.35
Virtual Reality Peripheral Network
Loading...
Searching...
No Matches
vrpn_Tracker_WiimoteHead.h
Go to the documentation of this file.
1
16/*
17 Copyright Iowa State University 2009-2010
18 Distributed under the Boost Software License, Version 1.0.
19 (See accompanying comment below or copy at
20 http://www.boost.org/LICENSE_1_0.txt)
21
22 Boost Software License - Version 1.0 - August 17th, 2003
23
24 Permission is hereby granted, free of charge, to any person or organization
25 obtaining a copy of the software and accompanying documentation covered by
26 this license (the "Software") to use, reproduce, display, distribute,
27 execute, and transmit the Software, and to prepare derivative works of the
28 Software, and to permit third-parties to whom the Software is furnished to
29 do so, all subject to the following:
30
31 The copyright notices in the Software and this entire statement, including
32 the above license grant, this restriction and the following disclaimer,
33 must be included in all copies of the Software, in whole or in part, and
34 all derivative works of the Software, unless such copies or derivative
35 works are solely in the form of machine-executable object code generated by
36 a source language processor.
37
38 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
39 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
40 FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
41 SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
42 FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
43 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
44 DEALINGS IN THE SOFTWARE.
45*/
46
47#ifndef __TRACKER_WIIMOTEHEAD_H
48#define __TRACKER_WIIMOTEHEAD_H
49
50#include <quat.h> // for q_vec_type, q_xyz_quat_type
51
52#include "vrpn_Analog.h" // for vrpn_ANALOGCB, etc
53#include "vrpn_Configure.h" // for VRPN_CALLBACK, VRPN_API
54#include "vrpn_Shared.h" // for timeval
55#include "vrpn_Tracker.h" // for vrpn_Tracker
56
59
70 public:
83 vrpn_Tracker_WiimoteHead(const char* name,
84 vrpn_Connection * trackercon,
85 const char* wiimote,
86 float update_rate,
87 float led_spacing = 0.145);
88
91
93 virtual void reset();
94
96 void setup_wiimote();
97
99 virtual void mainloop();
100
106 void update_pose();
107
109 void report();
110
112 static int VRPN_CALLBACK VRPN_CALLBACK handle_connection(void*, vrpn_HANDLERPARAM);
113
115 static void VRPN_CALLBACK VRPN_CALLBACK handle_analog_update(void* userdata, const vrpn_ANALOGCB info);
116
117 protected:
118 // Pose update steps
119
127 void _update_gravity_moving_avg();
128
140 void _update_2_LED_pose(q_xyz_quat_type & newPose);
141
150 void _update_flip_state();
151
155 void _convert_pose_to_tracker();
156
157 // Partial resets
160 void _reset_gravity();
161
163 void _reset_points();
164
166 void _reset_pose();
167
168 // Internal query/accessor functions
169
171 bool _should_report(double elapsedInterval) const;
172
174 bool _have_gravity() const;
175
176 // Configuration Parameters
177
179 const char* d_name;
180
182 const double d_update_interval;
183
185 const double d_blobDistance;
186
187 enum FlipState { FLIP_NORMAL, FLIP_180, FLIP_UNKNOWN };
191
193 struct timeval d_prevtime;
194
195 //Cached data from Wiimote update
196 double d_vX[4];
197 double d_vY[4];
198 double d_vSize[4];
199 double d_points;
200
210
211
213 q_xyz_quat_type d_gravityXform;
214
216 q_xyz_quat_type d_currentPose;
217
218 // flags
219
222
224 bool d_lock;
225
228
232
233 // Gravity moving avg, window of 3
236 q_vec_type d_vGrav;
237};
238
239#endif
virtual void mainloop()=0
Called once through each main loop iteration to handle updates. Remote object mainloop() should call ...
Generic connection class not specific to the transport mechanism.
Provides a tracker device given data from a Wii Remote and LED glasses.
q_xyz_quat_type d_currentPose
Current pose estimate.
vrpn_Analog_Remote * d_ana
Source of analog data, traditionally vrpn_WiiMote Must present analog channels in this order:
FlipState d_flipState
Whether we need to flip the order of the tracked points before calculating a pose.
const double d_blobDistance
distance between LEDs on glasses, in meters
q_xyz_quat_type d_gravityXform
Gravity correction transformation.
bool d_lock
Flag: Does the tracking algorithm report a lock?
bool d_updated
Flag: Have we received updated Wiimote data since last report?
bool d_gravDirty
Flag: Have we received updated gravity data since last gravity update?
bool d_contact
Flag: Have we received the first message from the Wiimote?
const char * d_name
Tracker device name.
const double d_update_interval
maximum time between updates, in seconds
This structure is what is passed to a vrpn_Connection message callback.
#define VRPN_API
#define VRPN_CALLBACK