blob: be42084e6ef3619f96a8a4d2b1ceea29246f14ed [file] [log] [blame]
Brian Silverman6ae77dd2013-03-29 22:28:08 -07001#include "math.h"
2
Brian Silverman5b3e51e2013-03-29 22:53:44 -07003#include "aos/common/time.h"
4#include "aos/atom_code/init.h"
5
Brian Silverman6ae77dd2013-03-29 22:28:08 -07006#include "frc971/queues/GyroAngle.q.h"
7#include "frc971/queues/CameraTarget.q.h"
Brian Silverman5b3e51e2013-03-29 22:53:44 -07008
Brian Silverman6ae77dd2013-03-29 22:28:08 -07009#include "vision/RingBuffer.h"
10
11using frc971::vision::RingBuffer;
12using frc971::sensors::gyro;
13using frc971::vision::targets;
14using frc971::vision::target_angle;
15
Brian Silvermane8ee1e52013-03-29 23:09:37 -070016int main() {
17 RingBuffer< ::aos::time::Time, double> buff;
18 ::aos::InitNRT();
19 while (true) {
Brian Silverman6ae77dd2013-03-29 22:28:08 -070020 gyro.FetchNextBlocking();
Brian Silvermane8ee1e52013-03-29 23:09:37 -070021 buff.Sample(gyro->sent_time, gyro->angle);
22 if (targets.FetchNext()) {
23 ::aos::time::Time stamp = ::aos::time::Time::InNS(targets->timestamp);
24 double angle_goal =
25 buff.ValueAt(stamp) -
26 M_PI / 2.0 * targets->percent_azimuth_off_center / 2.0;
27 printf("%g ",angle_goal);
Brian Silverman6ae77dd2013-03-29 22:28:08 -070028 printf("%g\n",gyro->angle);
Brian Silvermane8ee1e52013-03-29 23:09:37 -070029
30 target_angle.MakeWithBuilder()
31 .target_angle(angle_goal).Send();
Brian Silverman6ae77dd2013-03-29 22:28:08 -070032 }
33 }
Brian Silvermane8ee1e52013-03-29 23:09:37 -070034 ::aos::Cleanup();
Brian Silverman6ae77dd2013-03-29 22:28:08 -070035}