blob: ba094255d7718d07d5129eac4d505c62f29f1b0f [file] [log] [blame]
Parker Schuh4d2978f2017-02-25 11:13:06 -08001#include <netdb.h>
2
Alex Perrycb7da4b2019-08-28 19:35:56 -07003#include "aos/events/shm_event_loop.h"
Austin Schuhb6c5c852019-05-19 20:13:31 -07004#include "aos/init.h"
John Park33858a32018-09-28 23:05:48 -07005#include "aos/logging/logging.h"
John Park33858a32018-09-28 23:05:48 -07006#include "aos/time/time.h"
Parker Schuh4d2978f2017-02-25 11:13:06 -08007#include "aos/vision/events/udp.h"
Parker Schuhabb6b6c2017-03-11 16:31:24 -08008#include "y2017/vision/target_finder.h"
Alex Perrycb7da4b2019-08-28 19:35:56 -07009#include "y2017/vision/vision_generated.h"
Parker Schuhd497ed62017-03-04 20:11:58 -080010#include "y2017/vision/vision_result.pb.h"
Parker Schuh4d2978f2017-02-25 11:13:06 -080011
Austin Schuh218a7552017-03-22 21:15:28 -070012namespace y2017 {
13namespace vision {
14
Parker Schuh4d2978f2017-02-25 11:13:06 -080015using aos::monotonic_clock;
16
Austin Schuh218a7552017-03-22 21:15:28 -070017int Main() {
Parker Schuh4d2978f2017-02-25 11:13:06 -080018 ::aos::events::RXUdpSocket recv(8080);
19 char raw_data[65507];
Parker Schuhabb6b6c2017-03-11 16:31:24 -080020 // TODO(parker): Have this pull in a config from somewhere.
21 TargetFinder finder;
Alex Perrycb7da4b2019-08-28 19:35:56 -070022 aos::FlatbufferDetachedBuffer<aos::Configuration> config =
23 aos::configuration::ReadConfig("config.json");
24
25 ::aos::ShmEventLoop event_loop(&config.message());
Austin Schuhb6c5c852019-05-19 20:13:31 -070026
27 ::aos::Sender<::y2017::vision::VisionStatus> vision_status_sender =
Alex Perrycb7da4b2019-08-28 19:35:56 -070028 event_loop.MakeSender<::y2017::vision::VisionStatus>("/vision");
Parker Schuh4d2978f2017-02-25 11:13:06 -080029
30 while (true) {
31 // TODO(austin): Don't malloc.
Parker Schuhd497ed62017-03-04 20:11:58 -080032 VisionResult target;
Parker Schuh4d2978f2017-02-25 11:13:06 -080033 int size = recv.Recv(raw_data, sizeof(raw_data));
34 monotonic_clock::time_point now = monotonic_clock::now();
35 auto target_time = now -
36 std::chrono::nanoseconds(target.send_timestamp() -
Austin Schuh218a7552017-03-22 21:15:28 -070037 target.image_timestamp()) -
Parker Schuh4d2978f2017-02-25 11:13:06 -080038 // It takes a bit to shoot a frame. Push the frame
39 // further back in time.
Austin Schuh218a7552017-03-22 21:15:28 -070040 std::chrono::milliseconds(60);
Parker Schuh4d2978f2017-02-25 11:13:06 -080041
42 if (!target.ParseFromArray(raw_data, size)) {
43 continue;
44 }
45
Alex Perrycb7da4b2019-08-28 19:35:56 -070046 auto builder = vision_status_sender.MakeBuilder();
47 VisionStatus::Builder vision_status_builder =
48 builder.MakeBuilder<VisionStatus>();
49 vision_status_builder.add_image_valid(target.has_target());
50 if (target.has_target()) {
milind1f1dca32021-07-03 13:50:07 -070051 vision_status_builder.add_target_time(
Parker Schuh4d2978f2017-02-25 11:13:06 -080052 std::chrono::duration_cast<std::chrono::nanoseconds>(
53 target_time.time_since_epoch())
Alex Perrycb7da4b2019-08-28 19:35:56 -070054 .count());
Parker Schuh4d2978f2017-02-25 11:13:06 -080055
Alex Perrycb7da4b2019-08-28 19:35:56 -070056 double distance = 0.0;
57 double angle = 0.0;
Parker Schuhabb6b6c2017-03-11 16:31:24 -080058 finder.GetAngleDist(
59 aos::vision::Vector<2>(target.target().x(), target.target().y()),
milind1f1dca32021-07-03 13:50:07 -070060 /* TODO: Insert down estimate here in radians: */ 0.0, &distance,
61 &angle);
Alex Perrycb7da4b2019-08-28 19:35:56 -070062 vision_status_builder.add_distance(distance);
63 vision_status_builder.add_angle(angle);
Parker Schuh4d2978f2017-02-25 11:13:06 -080064 }
65
milind1f1dca32021-07-03 13:50:07 -070066 if (builder.Send(vision_status_builder.Finish()) !=
67 aos::RawSender::Error::kOk) {
Austin Schuhf257f3c2019-10-27 21:00:43 -070068 AOS_LOG(ERROR, "Failed to send vision information\n");
Parker Schuh4d2978f2017-02-25 11:13:06 -080069 }
70 }
71}
Austin Schuh218a7552017-03-22 21:15:28 -070072
73} // namespace vision
74} // namespace y2017
75
Austin Schuh094d09b2020-11-20 23:26:52 -080076int main(int argc, char **argv) {
77 ::aos::InitGoogle(&argc, &argv);
Austin Schuh218a7552017-03-22 21:15:28 -070078 ::y2017::vision::Main();
79}