blob: c1b45b5a466c9cf1081abadc69841e1d48541238 [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"
Brian Silvermanaf535942013-03-31 19:07:35 -07005#include "aos/common/logging/logging.h"
Brian Silverman5b3e51e2013-03-29 22:53:44 -07006
Brian Silverman6ae77dd2013-03-29 22:28:08 -07007#include "frc971/queues/GyroAngle.q.h"
8#include "frc971/queues/CameraTarget.q.h"
Brian Silverman5b3e51e2013-03-29 22:53:44 -07009
Brian Silverman6ae77dd2013-03-29 22:28:08 -070010#include "vision/RingBuffer.h"
Brian Silverman68a5a012013-03-29 23:37:04 -070011#include "vision/SensorProcessor.h"
Brian Silverman6ae77dd2013-03-29 22:28:08 -070012
Brian Silverman68a5a012013-03-29 23:37:04 -070013using ::frc971::vision::RingBuffer;
14using ::frc971::sensors::gyro;
15using ::frc971::vision::targets;
16using ::frc971::vision::target_angle;
17using ::frc971::kPixelsToMeters;
18using ::frc971::kMetersToShooterSpeeds;
19using ::frc971::kMetersToShooterAngles;
20using ::frc971::interpolate;
Brian Silverman6ae77dd2013-03-29 22:28:08 -070021
Brian Silvermane8ee1e52013-03-29 23:09:37 -070022int main() {
Brian Silverman68a5a012013-03-29 23:37:04 -070023 //RingBuffer< ::aos::time::Time, double> buff;
Brian Silvermane8ee1e52013-03-29 23:09:37 -070024 ::aos::InitNRT();
25 while (true) {
Brian Silverman68a5a012013-03-29 23:37:04 -070026 //gyro.FetchNextBlocking();
27 //buff.Sample(gyro->sent_time, gyro->angle);
Brian Silvermane8ee1e52013-03-29 23:09:37 -070028 if (targets.FetchNext()) {
Brian Silverman68a5a012013-03-29 23:37:04 -070029 /*::aos::time::Time stamp = ::aos::time::Time::InNS(targets->timestamp);
Brian Silvermane8ee1e52013-03-29 23:09:37 -070030 double angle_goal =
31 buff.ValueAt(stamp) -
32 M_PI / 2.0 * targets->percent_azimuth_off_center / 2.0;
33 printf("%g ",angle_goal);
Brian Silverman68a5a012013-03-29 23:37:04 -070034 printf("%g\n",gyro->angle);*/
35
36 double meters = interpolate(
37 sizeof(kPixelsToMeters) / sizeof(kPixelsToMeters[0]),
38 kPixelsToMeters,
39 targets->percent_elevation_off_center);
Brian Silvermanaf535942013-03-31 19:07:35 -070040 LOG(DEBUG, "think target is %f meters away\n", meters);
Brian Silvermane8ee1e52013-03-29 23:09:37 -070041
42 target_angle.MakeWithBuilder()
Brian Silvermanaf535942013-03-31 19:07:35 -070043 /*.target_angle(angle_goal)*/
Brian Silverman68a5a012013-03-29 23:37:04 -070044 .shooter_speed(interpolate(
45 sizeof(kMetersToShooterSpeeds) / sizeof(kMetersToShooterSpeeds[0]),
46 kMetersToShooterSpeeds,
47 meters))
48 .shooter_angle(interpolate(
49 sizeof(kMetersToShooterAngles) / sizeof(kMetersToShooterAngles[0]),
50 kMetersToShooterAngles,
51 meters))
52 .Send();
Brian Silverman6ae77dd2013-03-29 22:28:08 -070053 }
54 }
Brian Silvermane8ee1e52013-03-29 23:09:37 -070055 ::aos::Cleanup();
Brian Silverman6ae77dd2013-03-29 22:28:08 -070056}