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
113
116
117 protected:
118 // Pose update steps
119
128
140 void _update_2_LED_pose(q_xyz_quat_type & newPose);
141
150 void _update_flip_state();
151
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
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.
void _reset_points()
reset cached points, point count, and flip state,
static void VRPN_CALLBACK VRPN_CALLBACK handle_analog_update(void *userdata, const vrpn_ANALOGCB info)
Callback triggered when our data source issues an update.
void _update_gravity_moving_avg()
based on cached gravity data, use a moving average to update the tracker's stored gravity transform.
q_xyz_quat_type d_currentPose
Current pose estimate.
void report()
Pack and send tracker report.
vrpn_Analog_Remote * d_ana
Source of analog data, traditionally vrpn_WiiMote Must present analog channels in this order:
struct timeval d_prevtime
Time of last tracker report issued.
void _update_2_LED_pose(q_xyz_quat_type &newPose)
Create tracker-relative pose estimate based on sensor location of 2 tracked points.
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
vrpn_Tracker_WiimoteHead(const char *name, vrpn_Connection *trackercon, const char *wiimote, float update_rate, float led_spacing=0.145)
constructor
q_xyz_quat_type d_gravityXform
Gravity correction transformation.
bool d_lock
Flag: Does the tracking algorithm report a lock?
void _reset_gravity()
reset gravity transform and cached gravity vectors
void _update_flip_state()
If flip state is unknown, set flip state appropriately.
bool _should_report(double elapsedInterval) const
return true if we have new data or max time elapsed
static int VRPN_CALLBACK VRPN_CALLBACK handle_connection(void *, vrpn_HANDLERPARAM)
Callback triggered when a new client connects to the tracker.
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?
virtual void reset()
reset pose, gravity transform, and cached points and gravity
bool d_contact
Flag: Have we received the first message from the Wiimote?
const char * d_name
Tracker device name.
bool _have_gravity() const
return true if our gravity values look like real data
void _reset_pose()
reset current pose, last report time, and tracker pose
const double d_update_interval
maximum time between updates, in seconds
void update_pose()
function to drive the full pose update process
void setup_wiimote()
set up connection to wiimote-like analog device
void _convert_pose_to_tracker()
Set the vrpn_Tracker position and rotation to that indicated by our d_currentPose;.
vrpn_Tracker(const char *name, vrpn_Connection *c=NULL, const char *tracker_cfg_file_name=NULL)
This structure is what is passed to a vrpn_Connection message callback.
#define VRPN_API
#define VRPN_CALLBACK
class VRPN_API vrpn_Connection