blob: fd9f7d85883b922aac375cb3a7b5e8a799679a0b [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
Stephan Pleinesf63bde82024-01-13 15:59:33 -080012namespace y2017::vision {
Austin Schuh218a7552017-03-22 21:15:28 -070013
Parker Schuh4d2978f2017-02-25 11:13:06 -080014using aos::monotonic_clock;
15
Austin Schuh218a7552017-03-22 21:15:28 -070016int Main() {
Parker Schuh4d2978f2017-02-25 11:13:06 -080017 ::aos::events::RXUdpSocket recv(8080);
18 char raw_data[65507];
Parker Schuhabb6b6c2017-03-11 16:31:24 -080019 // TODO(parker): Have this pull in a config from somewhere.
20 TargetFinder finder;
Alex Perrycb7da4b2019-08-28 19:35:56 -070021 aos::FlatbufferDetachedBuffer<aos::Configuration> config =
Austin Schuhc5fa6d92022-02-25 14:36:28 -080022 aos::configuration::ReadConfig("aos_config.json");
Alex Perrycb7da4b2019-08-28 19:35:56 -070023
24 ::aos::ShmEventLoop event_loop(&config.message());
Austin Schuhb6c5c852019-05-19 20:13:31 -070025
26 ::aos::Sender<::y2017::vision::VisionStatus> vision_status_sender =
Alex Perrycb7da4b2019-08-28 19:35:56 -070027 event_loop.MakeSender<::y2017::vision::VisionStatus>("/vision");
Parker Schuh4d2978f2017-02-25 11:13:06 -080028
29 while (true) {
30 // TODO(austin): Don't malloc.
Parker Schuhd497ed62017-03-04 20:11:58 -080031 VisionResult target;
Parker Schuh4d2978f2017-02-25 11:13:06 -080032 int size = recv.Recv(raw_data, sizeof(raw_data));
33 monotonic_clock::time_point now = monotonic_clock::now();
34 auto target_time = now -
35 std::chrono::nanoseconds(target.send_timestamp() -
Austin Schuh218a7552017-03-22 21:15:28 -070036 target.image_timestamp()) -
Parker Schuh4d2978f2017-02-25 11:13:06 -080037 // It takes a bit to shoot a frame. Push the frame
38 // further back in time.
Austin Schuh218a7552017-03-22 21:15:28 -070039 std::chrono::milliseconds(60);
Parker Schuh4d2978f2017-02-25 11:13:06 -080040
41 if (!target.ParseFromArray(raw_data, size)) {
42 continue;
43 }
44
Alex Perrycb7da4b2019-08-28 19:35:56 -070045 auto builder = vision_status_sender.MakeBuilder();
46 VisionStatus::Builder vision_status_builder =
47 builder.MakeBuilder<VisionStatus>();
48 vision_status_builder.add_image_valid(target.has_target());
49 if (target.has_target()) {
milind1f1dca32021-07-03 13:50:07 -070050 vision_status_builder.add_target_time(
Parker Schuh4d2978f2017-02-25 11:13:06 -080051 std::chrono::duration_cast<std::chrono::nanoseconds>(
52 target_time.time_since_epoch())
Alex Perrycb7da4b2019-08-28 19:35:56 -070053 .count());
Parker Schuh4d2978f2017-02-25 11:13:06 -080054
Alex Perrycb7da4b2019-08-28 19:35:56 -070055 double distance = 0.0;
56 double angle = 0.0;
Parker Schuhabb6b6c2017-03-11 16:31:24 -080057 finder.GetAngleDist(
58 aos::vision::Vector<2>(target.target().x(), target.target().y()),
milind1f1dca32021-07-03 13:50:07 -070059 /* TODO: Insert down estimate here in radians: */ 0.0, &distance,
60 &angle);
Alex Perrycb7da4b2019-08-28 19:35:56 -070061 vision_status_builder.add_distance(distance);
62 vision_status_builder.add_angle(angle);
Parker Schuh4d2978f2017-02-25 11:13:06 -080063 }
64
milind1f1dca32021-07-03 13:50:07 -070065 if (builder.Send(vision_status_builder.Finish()) !=
66 aos::RawSender::Error::kOk) {
Austin Schuhf257f3c2019-10-27 21:00:43 -070067 AOS_LOG(ERROR, "Failed to send vision information\n");
Parker Schuh4d2978f2017-02-25 11:13:06 -080068 }
69 }
70}
Austin Schuh218a7552017-03-22 21:15:28 -070071
Stephan Pleinesf63bde82024-01-13 15:59:33 -080072} // namespace y2017::vision
Austin Schuh218a7552017-03-22 21:15:28 -070073
Austin Schuh094d09b2020-11-20 23:26:52 -080074int main(int argc, char **argv) {
75 ::aos::InitGoogle(&argc, &argv);
Austin Schuh218a7552017-03-22 21:15:28 -070076 ::y2017::vision::Main();
77}