Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • danc/MicroCART
  • snawerdt/MicroCART_17-18
  • bbartels/MicroCART_17-18
  • jonahu/MicroCART
4 results
Show changes
Showing
with 732 additions and 29 deletions
File moved
#include <iostream> #include <iostream>
#include <algorithm> #include <algorithm>
#include <functional>
#include "vrpn_Tracker.h" #include "vrpn_Tracker.h"
#include "quat.h" #include "quat.h"
...@@ -9,28 +10,25 @@ ...@@ -9,28 +10,25 @@
namespace microcart namespace microcart
{ {
static void VRPN_CALLBACK vrpn_cb(void * param, const vrpn_TRACKERCB t); static void VRPN_CALLBACK vrpn_cb(void * param, const vrpn_TRACKERCB t);
TrackerData::TrackerData() :
x(0.0), y(0.0), z(0.0),
pitch(0.0), roll(0.0), yaw(0.0),
fps(0.0), timestamp()
{
}
Tracker::Tracker(std::string server) : Tracker(server.c_str()) Tracker::Tracker(std::string server) :
remote(server.c_str()),
stop_flag(0),
trackerData()
{ {
} }
Tracker::Tracker(const char * server) : Tracker::Tracker(const char * server) :
remote(server), remote(server),
stop_flag(0), stop_flag(0),
trackerData({ trackerData()
.x = 0.0,
.y = 0.0,
.z = 0.0,
.pitch = 0.0,
.roll = 0.0,
.yaw = 0.0,
.fps = 0.0,
.timestamp = {
.tv_sec = 0,
.tv_usec = 0
}
})
{ {
remote.register_change_handler(this, vrpn_cb); remote.register_change_handler(this, vrpn_cb);
...@@ -92,10 +90,9 @@ namespace microcart ...@@ -92,10 +90,9 @@ namespace microcart
trackerData.fps = 1.0 / elapsed_time_usec; trackerData.fps = 1.0 / elapsed_time_usec;
auto td = trackerData; auto td = trackerData;
std::for_each(cb_vector.begin(), cb_vector.end(), for(auto i = cb_vector.begin(); i != cb_vector.end(); ++i) {
[td](std::function<void(const TrackerData &)> &fn){ (*i)(td);
fn(td); }
});
} }
void Tracker::addCallback(std::function<void(const TrackerData&)> cb) void Tracker::addCallback(std::function<void(const TrackerData&)> cb)
...@@ -115,6 +112,20 @@ struct ucart_vrpn_tracker { ...@@ -115,6 +112,20 @@ struct ucart_vrpn_tracker {
microcart::Tracker * t; microcart::Tracker * t;
}; };
void cb_wrapper(void (*cb)(struct ucart_vrpn_TrackerData *),
const microcart::TrackerData &td)
{
struct ucart_vrpn_TrackerData data;
data.x = td.x;
data.y = td.y;
data.z = td.z;
data.pitch = td.pitch;
data.roll = td.roll;
data.yaw = td.yaw;
data.fps = td.fps;
(*cb)(&data);
}
extern "C" extern "C"
{ {
struct ucart_vrpn_tracker * ucart_vrpn_tracker_createInstance( struct ucart_vrpn_tracker * ucart_vrpn_tracker_createInstance(
...@@ -123,6 +134,7 @@ extern "C" ...@@ -123,6 +134,7 @@ extern "C"
try { try {
auto inst = new struct ucart_vrpn_tracker; auto inst = new struct ucart_vrpn_tracker;
inst->t = new microcart::Tracker(server); inst->t = new microcart::Tracker(server);
return inst;
} catch(...) { } catch(...) {
return NULL; return NULL;
} }
...@@ -138,16 +150,8 @@ extern "C" ...@@ -138,16 +150,8 @@ extern "C"
void (*cb)(struct ucart_vrpn_TrackerData *)) void (*cb)(struct ucart_vrpn_TrackerData *))
{ {
try { try {
inst->t->addCallback([cb](const microcart::TrackerData & td) { auto new_cb = bind(cb_wrapper, cb, std::placeholders::_1);
struct ucart_vrpn_TrackerData data; inst->t->addCallback(new_cb);
data.x = td.x;
data.y = td.y;
data.z = td.z;
data.pitch = td.pitch;
data.roll = td.roll;
data.yaw = td.yaw;
(*cb)(&data);
});
} catch(...) { } catch(...) {
return -1; return -1;
} }
......
...@@ -54,6 +54,7 @@ extern "C" ...@@ -54,6 +54,7 @@ extern "C"
namespace microcart namespace microcart
{ {
struct TrackerData { struct TrackerData {
public:
double x; double x;
double y; double y;
double z; double z;
...@@ -64,6 +65,8 @@ namespace microcart ...@@ -64,6 +65,8 @@ namespace microcart
double fps; double fps;
timeval timestamp; timeval timestamp;
TrackerData();
}; };
class Tracker { class Tracker {
......
This diff is collapsed.
This diff is collapsed.
#ifndef CLI_GETIMU_H
#define CLI_GETIMU_H
#include "frontend_getimu.h"
int cli_getimu(
struct backend_conn * conn,
struct frontend_pid_data * pid_data);
#endif
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.