blob: 5c8fad86a0617b2b38ec2739d31abf0f163ef3be [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);
Austin Schuh86bec782013-04-04 05:50:52 +000040 const double shooter_speed = interpolate(
41 sizeof(kMetersToShooterSpeeds) / sizeof(kMetersToShooterSpeeds[0]),
42 kMetersToShooterSpeeds,
43 meters);
44 const double shooter_angle = interpolate(
45 sizeof(kMetersToShooterAngles) / sizeof(kMetersToShooterAngles[0]),
46 kMetersToShooterAngles,
47 meters);
48
Brian Silverman6742a442013-11-03 12:58:42 -080049 LOG(DEBUG, "%+f=> think target is %f meters away Speed %f Angle %f\n",
50 targets->percent_elevation_off_center,
Austin Schuh86bec782013-04-04 05:50:52 +000051 meters, shooter_speed, shooter_angle);
Brian Silvermane8ee1e52013-03-29 23:09:37 -070052
53 target_angle.MakeWithBuilder()
Brian Silvermanaf535942013-03-31 19:07:35 -070054 /*.target_angle(angle_goal)*/
Austin Schuh86bec782013-04-04 05:50:52 +000055 .shooter_speed(shooter_speed)
56 .shooter_angle(shooter_angle)
Brian Silverman68a5a012013-03-29 23:37:04 -070057 .Send();
Brian Silverman6ae77dd2013-03-29 22:28:08 -070058 }
59 }
Brian Silvermane8ee1e52013-03-29 23:09:37 -070060 ::aos::Cleanup();
Brian Silverman6ae77dd2013-03-29 22:28:08 -070061}