Add 'Things to Do' section
This commit is contained in:
		
							parent
							
								
									e56084a293
								
							
						
					
					
						commit
						ef3ee91d40
					
				
							
								
								
									
										7
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								Makefile
									
									
									
									
									
								
							@ -1,11 +1,14 @@
 | 
				
			|||||||
archive.pdf: intro.pdf requirements.pdf design-doc.pdf \
 | 
					archive.pdf: intro.pdf requirements.pdf design-doc.pdf \
 | 
				
			||||||
    binary/techreview-ryan.pdf techreview-daniel.pdf binary/techreview-matt.pdf \
 | 
					    binary/techreview-ryan.pdf techreview-daniel.pdf binary/techreview-matt.pdf \
 | 
				
			||||||
    binary/blog-ryan.pdf blog-daniel.pdf binary/blog-matt.pdf \
 | 
					    binary/blog-ryan.pdf blog-daniel.pdf binary/blog-matt.pdf \
 | 
				
			||||||
    readme.pdf resources.pdf reflection.pdf listings.pdf review.pdf
 | 
					    readme.pdf resources.pdf reflection.pdf listings.pdf review.pdf todo.pdf
 | 
				
			||||||
	pdfjam --no-tidy --outfile archive.pdf -- intro.pdf requirements.pdf design-doc.pdf \
 | 
						pdfjam --no-tidy --outfile archive.pdf -- intro.pdf requirements.pdf design-doc.pdf \
 | 
				
			||||||
	    binary/techreview-ryan.pdf techreview-daniel.pdf binary/techreview-matt.pdf \
 | 
						    binary/techreview-ryan.pdf techreview-daniel.pdf binary/techreview-matt.pdf \
 | 
				
			||||||
	    binary/blog-ryan.pdf blog-daniel.pdf binary/blog-matt.pdf \
 | 
						    binary/blog-ryan.pdf blog-daniel.pdf binary/blog-matt.pdf \
 | 
				
			||||||
	    readme.pdf resources.pdf reflection.pdf listings.pdf review.pdf
 | 
						    readme.pdf resources.pdf reflection.pdf listings.pdf review.pdf todo.pdf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					todo.pdf: todo.tex
 | 
				
			||||||
 | 
						pdflatex todo.tex
 | 
				
			||||||
 | 
					
 | 
				
			||||||
listings.pdf: listings.tex
 | 
					listings.pdf: listings.tex
 | 
				
			||||||
	pdflatex listings.tex
 | 
						pdflatex listings.tex
 | 
				
			||||||
 | 
				
			|||||||
@ -125,7 +125,7 @@ above) would be to add to the collar a physical indication of whether or not it
 | 
				
			|||||||
boundary (see the Design Document below for an idea of what that is). This physical indication can be
 | 
					boundary (see the Design Document below for an idea of what that is). This physical indication can be
 | 
				
			||||||
an LED light, but the final goal would be to have that indication be a buzzer or an eletric shock.
 | 
					an LED light, but the final goal would be to have that indication be a buzzer or an eletric shock.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The gateway software is capable of receiving and configuring a single collar device (See Appendix 1
 | 
					The gateway software is capable of receiving and configuring a single collar device (See Appendix 4
 | 
				
			||||||
for an explanation of why only a single device is currently supported). The next step for the 
 | 
					for an explanation of why only a single device is currently supported). The next step for the 
 | 
				
			||||||
gateway software, then, is to add support for multiple collar devices. Additionally, the gateway
 | 
					gateway software, then, is to add support for multiple collar devices. Additionally, the gateway
 | 
				
			||||||
software currently uses the Things Network to decode and process LoRaWAN packets. This is less
 | 
					software currently uses the Things Network to decode and process LoRaWAN packets. This is less
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										105
									
								
								todo.tex
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								todo.tex
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,105 @@
 | 
				
			|||||||
 | 
					\documentclass[10pt, draftclsnofoot,onecolumn, compsoc]{IEEEtran}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\def\changemargin#1#2{\list{}{\rightmargin#2\leftmargin#1}\item[]}
 | 
				
			||||||
 | 
					\let\endchangemargin=\endlist
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\usepackage{setspace}
 | 
				
			||||||
 | 
					\usepackage{listings}
 | 
				
			||||||
 | 
					\linespread{1}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\title{Appendix 4: Work to be Done}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\begin{document}
 | 
				
			||||||
 | 
					\maketitle
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\section*{Android Application}
 | 
				
			||||||
 | 
					The Android application requires only some minor touch-ups. In particular,
 | 
				
			||||||
 | 
					it would be good to add more graphs / visualizations of the collar data.
 | 
				
			||||||
 | 
					The majority of the data processing should be done on the server;
 | 
				
			||||||
 | 
					the application should merely display this data. Thus, implementing
 | 
				
			||||||
 | 
					this feature would have to be done in tandem with adjusting
 | 
				
			||||||
 | 
					the server to generate more statistics.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The application could also use some custom icons. The icons
 | 
				
			||||||
 | 
					used on the map for collars and polygon vertices are the default
 | 
				
			||||||
 | 
					ones provided by the \texttt{OSMDroid} library, and look pretty bad.
 | 
				
			||||||
 | 
					Consider replacing with custom SVG graphics.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					It might be a good idea to allow the user to configure their API
 | 
				
			||||||
 | 
					URL rather than hardcoding it in \texttt{resources.xml}. Perhaps
 | 
				
			||||||
 | 
					the login screen should present a third input box which the user
 | 
				
			||||||
 | 
					can fill with their system's API URL. This means a single
 | 
				
			||||||
 | 
					Android application will work for several independent grazing systems.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\section*{API Server}
 | 
				
			||||||
 | 
					The gateway server should be modified to generate some more statistics,
 | 
				
			||||||
 | 
					and send these statistics to the Android application. It could
 | 
				
			||||||
 | 
					be useful to rewrite the Flask module using the application factory
 | 
				
			||||||
 | 
					pattern, but this would not add to functionality and should be 
 | 
				
			||||||
 | 
					considered low priority.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Some thought could be put in into how the server handles authentication
 | 
				
			||||||
 | 
					tokens. Currently, they only contain the user ID, and thus, assuming
 | 
				
			||||||
 | 
					the same ``secret passphrase", a user will always have the same API
 | 
				
			||||||
 | 
					token. It's not uncommon for these tokens to be leaked; most
 | 
				
			||||||
 | 
					systems deal with this by allowing the user to invalidate their
 | 
				
			||||||
 | 
					access token and generate a new one. This can be achieved in the Fenceless
 | 
				
			||||||
 | 
					Grazing System by adding a ``generation" field to the JSON body
 | 
				
			||||||
 | 
					of the JWT token, and tracking the ``valid generation" in the database.
 | 
				
			||||||
 | 
					This would greatly improve security.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\section*{Gateway Software}
 | 
				
			||||||
 | 
					The gateway software should be updated to use the SQLAlchemy model
 | 
				
			||||||
 | 
					definitions used in the API Server. This would remove the need
 | 
				
			||||||
 | 
					for writing raw SQL queries, and thereby simplify the code.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Although The Things Network is used in this iteration of the project
 | 
				
			||||||
 | 
					to decode LoRaWAN packets, we do not think this solution is ideal.
 | 
				
			||||||
 | 
					First of all, this requires the server to be connected to the Internet,
 | 
				
			||||||
 | 
					and makes the server unable to decode incoming transmissions from
 | 
				
			||||||
 | 
					the collars when network connection drops. Furthermore, this
 | 
				
			||||||
 | 
					makes our project forward data through The Things Network,
 | 
				
			||||||
 | 
					which can be a security or privacy concern. We understand that many
 | 
				
			||||||
 | 
					users do not want their data to be piped through a third-party system.
 | 
				
			||||||
 | 
					This change is rather difficult, however, due to the fact that there
 | 
				
			||||||
 | 
					is (at the time of writting) little support for LoRaWAN. It might
 | 
				
			||||||
 | 
					be necessary to follow the LoRaWAN spec and implement a custom packet
 | 
				
			||||||
 | 
					decoder and handler, as well as custom LoRaWAN Network Access Point software.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The Gateway's current interaction with the with the collars is done
 | 
				
			||||||
 | 
					by pushing data to The Things Network's API endpoints. The Things Network
 | 
				
			||||||
 | 
					requries that the project manually defines an endpoint for every client
 | 
				
			||||||
 | 
					device (in our case, for every collar). Since we only have one collar,
 | 
				
			||||||
 | 
					we only defined one endpoint. This means that there is currently no logic
 | 
				
			||||||
 | 
					to translate a collar identifier (internal to our system) to an API endpoint
 | 
				
			||||||
 | 
					(used by TTN). Since this system aims to support many concurrent collar connections,
 | 
				
			||||||
 | 
					such a translation layer should be added, perhaps in the form of a database table.
 | 
				
			||||||
 | 
					Note that this is specific to The Things Network, and moving away from TTN would
 | 
				
			||||||
 | 
					make this change pointless.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\section*{Collar Firmware}
 | 
				
			||||||
 | 
					The collar is currently pushing its underlying hardware quite far; the ATmega chip
 | 
				
			||||||
 | 
					used by the LoRa hardware does not have a lot of application memory, and our
 | 
				
			||||||
 | 
					use of LoRaWAN, GPS, and Protobuf has put a significant strain on it. We have already
 | 
				
			||||||
 | 
					struggled with including libraries on the collar (our generated HEX file was too big);
 | 
				
			||||||
 | 
					even now, the collar is succeptible to stack overflows even on small call stacks.
 | 
				
			||||||
 | 
					On embedded hardware, these stack overflows lead to a hard crash, and make
 | 
				
			||||||
 | 
					the collar non-functional.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					We recommend that a more robust chip be used for the collar, at the cost of increased
 | 
				
			||||||
 | 
					power consumption. Though there exist models of the ATmega (or other AVR controller)
 | 
				
			||||||
 | 
					that have more memory, it could be fruitful to use an ARM processor instead. Doing so,
 | 
				
			||||||
 | 
					though, will likely require the reimplementation of the collar firmware from scratch.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Additionally, a goal of the Fenceless Grazing System is to be able to redirect
 | 
				
			||||||
 | 
					animals back into a ``valid grazing area". This is to be done with an auditory
 | 
				
			||||||
 | 
					stimulus (a loud beep, for instance) or an electric shock. Currently, the
 | 
				
			||||||
 | 
					collar is capable of determining whether or not it's inside the valid
 | 
				
			||||||
 | 
					grazing boundary, but doesn't have the hardware to influence its host animal.
 | 
				
			||||||
 | 
					To make this work in a field, the collar will probably also require
 | 
				
			||||||
 | 
					a case. We suggest laser cutting one, since 3D printing at the size of the current
 | 
				
			||||||
 | 
					prototype would simply take too long and have a high chance of failure. Note
 | 
				
			||||||
 | 
					that the GPS and LoRa antennas should be outside of the case, so as to
 | 
				
			||||||
 | 
					be able to communicate with the rest of the world.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					\end{document}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user