From 0a2ddf3a10e885613eec33297247334b5180d085 Mon Sep 17 00:00:00 2001 From: rgarcia-herrera Date: Tue, 15 Sep 2020 21:01:54 -0500 Subject: [PATCH] query the flock-server --- assets/needle_to_flock.png | Bin 0 -> 852 bytes flockompass.kv | 12 +++++++++ main.py | 51 ++++++++++++++++++++++++++++++++----- 3 files changed, 57 insertions(+), 6 deletions(-) create mode 100644 assets/needle_to_flock.png diff --git a/assets/needle_to_flock.png b/assets/needle_to_flock.png new file mode 100644 index 0000000000000000000000000000000000000000..b8e246267efa137e6014c7bcf48e6b1a4d9140c7 GIT binary patch literal 852 zcmeAS@N?(olHy`uVBq!ia0vp^2@DL31{`camPcYqHIQOU@^*J&_z!{$_AZ|c6yYrJ zh%9Dc;5!1sj8nDwq=AC$C7!;n>`yoa7*x!ZqBcEcU|@Ra>EaktaqI2fXg?W40f&nl zpRPT-Dl+CX^QDH0%ok;$H=qAeo471C_PXN42W6|@JhjNvKOXo~@E0%hjY#de^WDE+ z%VA(sa1{KhIY&`Cfq|{T`a#P-@xAOh4U8TatbS_F0Er5139IW$J;5f?!1#dAV(0(X zcZ^`sw7RYokSNRA+4GqsH!-p$FzjH~dsF|Z`T$sT{`?~#Q3c29C+eAPKqDm>-Zgms z^{?Q+!N5FW!QM}kb)3x(FsNkg|D$qh0T8-> z#j$;7XU{kBOn%;ee!`M{UmvRf@X4)`-dta3^7H2LYx%WJDy8l6zh~ZFsvYs={)_Z^ zp5Lz>xAQLlvGIJ#yZ@`#ReT6ndHHb8uI+Z;B6lC|uYLCLLGu2z4FB@n?}z`t-}|Ag z?(S^)*-L<;lfQhofAHbF|E0ZK-<|FEy;SgFqi5Fre~S*!pS0xN2cUEzv&^3_xi9$k ipS#WjOuwXqfUDZ4=G^QRJQT4Uq}kKe&t;ucLK6T+xm+Ir literal 0 HcmV?d00001 diff --git a/flockompass.kv b/flockompass.kv index ac737c3..0f93cda 100644 --- a/flockompass.kv +++ b/flockompass.kv @@ -108,6 +108,18 @@ id: to_dest source: 'assets/needle_to_dest.png' pos_hint: {"center_x": 0.5, "center_y": 0.7} + canvas.before: + PushMatrix + Rotate: + angle: app.dbearing + axis: 0, 0, 1 + origin: self.center + canvas.after: + PopMatrix + Image: + id: to_flock + source: 'assets/needle_to_flock.png' + pos_hint: {"center_x": 0.5, "center_y": 0.7} canvas.before: PushMatrix Rotate: diff --git a/main.py b/main.py index 92cd2ba..4032313 100644 --- a/main.py +++ b/main.py @@ -12,12 +12,16 @@ from kivy.uix.image import Image from kivy.vector import Vector from kivy.animation import Animation from math import atan2, sin, cos, degrees, floor +import requests from geopy.distance import geodesic from os import path import pickle +FLOCK_SERVER="http://192.168.0.8:5000" + + class IconButton(ButtonBehavior, Image): pass @@ -57,6 +61,7 @@ class FlockompassApp(App): session_data = DictProperty() needle_angle = NumericProperty(0) fbearing = NumericProperty(0) + dbearing = NumericProperty(0) dest_distance = StringProperty("") dashboard_dest = StringProperty("") @@ -185,7 +190,12 @@ class FlockompassApp(App): self.dest_distance = "Destino: %s\nVel: %0.1f km/h" % (dest_distance, self.gps_data['speed'] * 1.609344) + self.session_data.update({'speed': self.gps_data['speed'] * 1.609344, + 'bearing': self.gps_data['bearing'], + 'lat': self.gps_data['lat'], + 'lon': self.gps_data['lon']}) + def center_map_on_gps(self): self.ms.ids.mapview.center_on(self.gps_data['lat'], self.gps_data['lon']) @@ -227,14 +237,12 @@ class FlockompassApp(App): lat2 = self.session_data['dest_lat'] lon2 = self.session_data['dest_lon'] - fbearing = atan2(sin(lon2 - lon1) * cos(lat2), + dbearing = atan2(sin(lon2 - lon1) * cos(lat2), cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(lon2-lon1)) - fbearing = self.needle_angle - degrees(fbearing) + dbearing = self.needle_angle - degrees(dbearing) - #fbearing = (fbearing + 360) % 360 - - self.cs._anim &= Animation(fbearing=fbearing, + self.cs._anim &= Animation(dbearing=dbearing, d=0.1, t='out_quad') @@ -258,6 +266,37 @@ class FlockompassApp(App): self.compass_enable() self.gps_start(1000, 0) + def flock_server_register(self): + + register_url = "{server}/register/?dest_lon={dest_lon}&dest_lat={dest_lat}" + r = requests.get(register_url.format(server=FLOCK_SERVER, + dest_lon=self.session_data['dest_lon'], + dest_lat=self.session_data['dest_lat'])) + out = r.json() + + self.session_data['bike_id'] = out['bike_id'] + + + def flock_server_update(self): + update_url = "{server}/update/{bike_id}/?lat={lat}&lon={lon}&speed={speed}&bearing={bearing}" + req = requests.get(update_url.format(server=FLOCK_SERVER, + bike_id=self.session_data['bike_id'], + speed=self.session_data['speed'], + bearing=self.session_data['bearing'], + lat=self.session_data['lat'], + lon=self.session_data['lon'])) + resp = req.json() + self.session_data.update(resp) + + + + def flock(self, dt): + if 'bike_id' in self.session_data: + self.flock_server_update() + else: + self.flock_server_register() + + def build(self): # start GPS @@ -296,7 +335,7 @@ class FlockompassApp(App): self.cs._anim1 = None screen_manager.add_widget(self.cs) - #Clock.schedule_interval(self.dump, 2.0) + Clock.schedule_interval(self.flock, 20.0) return screen_manager