23 bool has_data =
false;
32 std::string tracker_name;
36 void CreateTracker(std::string tracker_name, ConnectionPtr connection){
37 tracker_remote_ = std::make_shared<vrpn_Tracker_Remote>(tracker_name.c_str(), connection.get());
48 vrpn_vel.vel_quat[i]=0;
50 vrpn_acc.acc_quat[i]=0;
53 vrpn_vel.vel_quat[3]=1;
54 vrpn_vel.vel_quat_dt=0;
55 vrpn_acc.acc_quat[3]=1;
56 vrpn_acc.acc_quat_dt=0;
57 vrpn_pose.msg_time.tv_sec=0;
58 vrpn_pose.msg_time.tv_usec=0;
59 vrpn_vel.msg_time.tv_sec=0;
60 vrpn_vel.msg_time.tv_usec=0;
61 vrpn_acc.msg_time.tv_sec=0;
62 vrpn_acc.msg_time.tv_usec=0;
67 std::cout <<
"Destroying tracker " << std::endl;
68 tracker_remote_->unregister_change_handler(
this, &VrpnTrackerRfly::handle_pose);
69 tracker_remote_->unregister_change_handler(
this, &VrpnTrackerRfly::handle_twist);
70 tracker_remote_->unregister_change_handler(
this, &VrpnTrackerRfly::handle_accel);
73 void output(
double y[30])
75 tracker_remote_->mainloop();
95 y[0] = vrpn_pose.msg_time.tv_sec;
96 y[1] = vrpn_pose.msg_time.tv_usec;
97 for (
int j = 0; j<3; j++)
98 y[j+2] = vrpn_pose.pos[j];
103 y[5]=vrpn_pose.quat[3];
104 y[6]=vrpn_pose.quat[0];
105 y[7]=-vrpn_pose.quat[1];
106 y[8]=-vrpn_pose.quat[2];
109 y[9] = vrpn_vel.msg_time.tv_sec;
110 y[10] = vrpn_vel.msg_time.tv_usec;
111 for (
int j = 0; j<3; j++)
112 y[j+11] = vrpn_vel.vel[j];
116 y[14] = vrpn_acc.msg_time.tv_sec;
117 y[15] = vrpn_acc.msg_time.tv_usec;
118 for (
int j = 0; j<3; j++)
119 y[j+16] = vrpn_acc.acc[j];
123 double yawPitchRoll[3];
124 q_to_euler(yawPitchRoll, vrpn_pose.quat);
125 y[19] = yawPitchRoll[2];
126 y[20] = -yawPitchRoll[1];
127 y[21] = -yawPitchRoll[0];
133 TrackerRemotePtr tracker_remote_;
135 void init(std::string tracker_name)
137 std::cout <<
"Creating new tracker " << tracker_name << std::endl;
139 tracker_remote_->register_change_handler(
this, &VrpnTrackerRfly::handle_pose);
140 tracker_remote_->register_change_handler(
this, &VrpnTrackerRfly::handle_twist);
141 tracker_remote_->register_change_handler(
this, &VrpnTrackerRfly::handle_accel);
142 tracker_remote_->shutup =
true;
144 this->tracker_name = tracker_name;
147 static void VRPN_CALLBACK handle_pose(
void *userData,
const vrpn_TRACKERCB tracker_pose)
151 memcpy(&tracker->vrpn_pose, &tracker_pose,
sizeof(tracker_pose));
152 tracker->has_pos =
true;
153 tracker->has_data =
true;
157 static void VRPN_CALLBACK handle_twist(
void *userData,
const vrpn_TRACKERVELCB tracker_twist)
161 memcpy(&tracker->vrpn_vel, &tracker_twist,
sizeof(tracker_twist));
162 tracker->has_vel =
true;
163 tracker->has_data =
true;
166 static void VRPN_CALLBACK handle_accel(
void *userData,
const vrpn_TRACKERACCCB tracker_accel)
170 memcpy(&tracker->vrpn_acc, &tracker_accel,
sizeof(tracker_accel));
171 tracker->has_acc =
true;
172 tracker->has_data =
true;