Some minor typos
This commit is contained in:
		
							parent
							
								
									b23e41ae36
								
							
						
					
					
						commit
						f6b7620ac1
					
				| @ -78,10 +78,10 @@ | |||||||
| \pagebreak | \pagebreak | ||||||
| 
 | 
 | ||||||
| \section{Project Recap} | \section{Project Recap} | ||||||
| The Fenceless Grazing System project aims to reduce the need for manual labor | The Fenceless Grazing System (FGS) project aims to reduce the need for manual labor | ||||||
| for farmers and ranchers caring for large numbers of grazing animals. The | for farmers and ranchers caring for large numbers of grazing animals. The | ||||||
| system does so by automating the common task of herding through the use | system does so by automating the common task of herding through the use | ||||||
| of GPS-equipped collars that emit negative auditory of electrical stimuli. | of GPS-equipped collars that emit negative auditory or electrical stimuli. | ||||||
| Animals that leave a rancher-defined grazing area are met with increasingly | Animals that leave a rancher-defined grazing area are met with increasingly | ||||||
| potent uses of the aforementioned stimuli, intended to discourage | potent uses of the aforementioned stimuli, intended to discourage | ||||||
| such behavior. In addition to the automated herding capabilities, | such behavior. In addition to the automated herding capabilities, | ||||||
| @ -103,10 +103,10 @@ The Fenceless Grazing System is split into three major components: | |||||||
|         collars, as well as to store the data transmitted by the |         collars, as well as to store the data transmitted by the | ||||||
|         collars. This component is currently implemented |         collars. This component is currently implemented | ||||||
|         using a Raspberry Pi, a low power, miniature single-board |         using a Raspberry Pi, a low power, miniature single-board | ||||||
|         computer running Linux. The gateway server also provides |         computer running Raspbian Linux. The gateway server also provides | ||||||
|         a JSON API to external clients, allowing them to view |         a JSON API to external clients, allowing them to view | ||||||
|         and modify collar settings. The current reference |         and modify collar settings. The current reference | ||||||
|         client is the \emph{Android Application} |         client is the \emph{Android Application}. | ||||||
|     \item \emph{Android Application:} The Android application |     \item \emph{Android Application:} The Android application | ||||||
|         uses the JSON API provided by the gateway server to view |         uses the JSON API provided by the gateway server to view | ||||||
|         the locations of the grazing animals, as well as adjust |         the locations of the grazing animals, as well as adjust | ||||||
| @ -121,13 +121,13 @@ Below are the descriptions of the current state of each | |||||||
| of the project components. | of the project components. | ||||||
| 
 | 
 | ||||||
| \subsection{GPS Collar} | \subsection{GPS Collar} | ||||||
| The collar controller (implemented as an ATmega328p microprocessor) | The collar controller (implemented as an Arduino Nano with an ATmega328p microprocessor) | ||||||
| is currenly able to interface with the on-board GPS module and | is currenly able to interface with the on-board GPS module and | ||||||
| determine its own location, within about a foot. This was tested | determine its own location, within about a foot. This was tested | ||||||
| in a somewhat populated area, meaning that such precision is in | in a somewhat populated area, meaning that such precision is in | ||||||
| spite of various obstacles such as buildings and trees | spite of various obstacles such as buildings and trees | ||||||
| that would not commonly be present in a grazing field. The collar | that would not commonly be present in a grazing field. The collar | ||||||
| can also use a single-channel LoRa tranciever to communicate its | can also use a single-channel LoRa transceiver to communicate its | ||||||
| location to the gateway server. | location to the gateway server. | ||||||
| 
 | 
 | ||||||
| Currently, the collar is assembled using prototyping materials | Currently, the collar is assembled using prototyping materials | ||||||
| @ -146,8 +146,8 @@ the project uses a data encoding/decoding tool named Protobuf (short for Protoco | |||||||
| The tool provides a separate language for describing data structures to be encoded, | The tool provides a separate language for describing data structures to be encoded, | ||||||
| and has the advantage of tightly packing data, reducing the number of bytes needed | and has the advantage of tightly packing data, reducing the number of bytes needed | ||||||
| to store the information. This is especially useful for our purposes, since it | to store the information. This is especially useful for our purposes, since it | ||||||
| minimzes the amount of data to be transmitted over radio, and therefore minimizes | minimizes the amount of data to be transmitted over radio, and therefore minimizes | ||||||
| the potential for error. | the potential for error as well as increasing scalability. | ||||||
| 
 | 
 | ||||||
| Currently, the communication protocol fits in two Protobuf data structures. The | Currently, the communication protocol fits in two Protobuf data structures. The | ||||||
| code is as follows: | code is as follows: | ||||||
| @ -176,18 +176,18 @@ provided by 32-bit floating point numbers seem sufficient for our purposes. | |||||||
| \end{figure} | \end{figure} | ||||||
| 
 | 
 | ||||||
| \subsection{Gateway Server} | \subsection{Gateway Server} | ||||||
| The gateway server can currently correctly serve as the intermediary between | The gateway server can correctly serve as the intermediary between | ||||||
| GPS colalrs in the field and the Android application. It does so by providing | GPS collars in the field and the Android application. It does so by providing | ||||||
| two separate services: a REST API, written in Python, and a LoRa client, | two separate services: a REST API, written in Python, and a LoRa client, | ||||||
| written in C. | written in C. | ||||||
| 
 | 
 | ||||||
| The LoRa client is used to interface with the Raspberry Pi LoRa shield, | The LoRa client is used to interface with the Raspberry Pi LoRa shield, | ||||||
| and provide all the communication-related functionality. Currently, | and provides all the communication-related functionality. Currently, | ||||||
| this entails waiting for location broadcasts from the GPS collars, | this entails waiting for location broadcasts from the GPS collars, | ||||||
| decoding them into C data structures from Protobuf, and storing | decoding them into C data structures from Protobuf, and storing | ||||||
| this information into an SQLite database using SQLite's C API. | this information into an SQLite database using SQLite's C API. | ||||||
| Because the C Protobuf API is much more low-level than the | Because the C Protobuf API is much more low-level than the | ||||||
| Arduino / ATmega128 API, it requires the users (us) to provide | Arduino / ATmega328 API, it requires the users (us) to provide | ||||||
| it with implementation details, such as the method for memory | it with implementation details, such as the method for memory | ||||||
| allocation. We use C's standard \texttt{malloc} function | allocation. We use C's standard \texttt{malloc} function | ||||||
| to do so: | to do so: | ||||||
| @ -196,7 +196,7 @@ to do so: | |||||||
| 
 | 
 | ||||||
| The REST API uses the Flask microframework to provide an HTTP-based | The REST API uses the Flask microframework to provide an HTTP-based | ||||||
| interface to the Android application. Currently, it receives | interface to the Android application. Currently, it receives | ||||||
| login information from the client, verifies it against its  | login information from the client, and verifies it against its  | ||||||
| database of user accounts. If the account information is correct, | database of user accounts. If the account information is correct, | ||||||
| it creates a JSON Web Token which can then be used by the Android | it creates a JSON Web Token which can then be used by the Android | ||||||
| application in further requests. | application in further requests. | ||||||
| @ -213,7 +213,7 @@ application: a way to get the list of currently active collars, | |||||||
| and an endpoint to list the recent history of a single collar. | and an endpoint to list the recent history of a single collar. | ||||||
| 
 | 
 | ||||||
| The REST API and the LoRa client share the same SQLite database. | The REST API and the LoRa client share the same SQLite database. | ||||||
| However, wheras the SQLite C API (used by the LoRa client) is | However, whereas the SQLite C API (used by the LoRa client) is | ||||||
| very low-level, the Flask-based API server is capable of using | very low-level, the Flask-based API server is capable of using | ||||||
| a high-level interface with the database, called an Object Relational Model (ORM). | a high-level interface with the database, called an Object Relational Model (ORM). | ||||||
| Through this interface, the Python code can treat SQL data like Python | Through this interface, the Python code can treat SQL data like Python | ||||||
| @ -274,7 +274,7 @@ it for further interaction with the gateway server. It also | |||||||
| uses the JWT to retrieve a current list of active collars | uses the JWT to retrieve a current list of active collars | ||||||
| (triggering the code snippet in the previous section). | (triggering the code snippet in the previous section). | ||||||
| 
 | 
 | ||||||
| The application is capable of using the OpenStreeMaps API to display | The application is capable of using the OpenStreetMaps API to display | ||||||
| the locations of the active collars on an interactive map. This | the locations of the active collars on an interactive map. This | ||||||
| map supports zooming in and out and panning. Each individual | map supports zooming in and out and panning. Each individual | ||||||
| collar is presented on the map as a single marker. In | collar is presented on the map as a single marker. In | ||||||
| @ -346,7 +346,7 @@ for these messages, and send them to collars as they arrive. | |||||||
| 
 | 
 | ||||||
| \subsection{Grazing Boundary Tracking and Response} | \subsection{Grazing Boundary Tracking and Response} | ||||||
| Currently, while the collars are able to keep track of their location, | Currently, while the collars are able to keep track of their location, | ||||||
| they are not able determine whether or not they are in a "valid" location, | they are not able to determine whether or not they are in a "valid" location, | ||||||
| or whether they should emit the auditory or electrical stimulus. This | or whether they should emit the auditory or electrical stimulus. This | ||||||
| must be implemented, along with the ability to configure the grazing | must be implemented, along with the ability to configure the grazing | ||||||
| boundary through the LoRa protocol. | boundary through the LoRa protocol. | ||||||
| @ -355,7 +355,7 @@ We will likely define the grazing area to be a 16-point polygon. | |||||||
| The coordinate for each vertex of the polygon will be delivered | The coordinate for each vertex of the polygon will be delivered | ||||||
| through the Protobuf-encoded LoRa communication to the collar, | through the Protobuf-encoded LoRa communication to the collar, | ||||||
| and an existing algorithm will be used to determine if the current | and an existing algorithm will be used to determine if the current | ||||||
| coordinate of the collar is within thgee polygon. This is likely | coordinate of the collar is within the polygon. This is likely | ||||||
| sufficient, since grazing fields are unlikely to become large enough | sufficient, since grazing fields are unlikely to become large enough | ||||||
| for the Earth's spherical nature to significantly affect the calculations. | for the Earth's spherical nature to significantly affect the calculations. | ||||||
| 
 | 
 | ||||||
| @ -390,11 +390,11 @@ gateway server and the collar. | |||||||
| Although the current application is capable | Although the current application is capable | ||||||
| of displaying the present location of various | of displaying the present location of various | ||||||
| collars, it does not display the grazing | collars, it does not display the grazing | ||||||
| boundary (which is as yet nonexistent | boundary (which is as of yet nonexistent | ||||||
| in the code). The application also does not | in the code). The application also does not | ||||||
| provide any significant ability to analyze the | provide any significant ability to analyze the | ||||||
| gathered data. The client has requested that | gathered data. The client has requested that | ||||||
| address this, especially in preparation | we address this, especially in preparation | ||||||
| for the engineering expo. | for the engineering expo. | ||||||
| 
 | 
 | ||||||
| In particular, the client has asked that | In particular, the client has asked that | ||||||
| @ -407,10 +407,10 @@ and we plan on including this functionality | |||||||
| in the final product. Other, more visually | in the final product. Other, more visually | ||||||
| interesting diagrams --- such as graphs | interesting diagrams --- such as graphs | ||||||
| of the number of "escapes" per day --- will | of the number of "escapes" per day --- will | ||||||
| be considered, by considered low priority. | be considered. | ||||||
| 
 | 
 | ||||||
| \subsection{Physical Casing} | \subsection{Physical Casing} | ||||||
| The team is yet to create a physical casing for the collar | The team has yet to create a physical casing for the collar | ||||||
| component, which would allow for safer transportation and | component, which would allow for safer transportation and | ||||||
| more robust testing. This will likely be done with | more robust testing. This will likely be done with | ||||||
| the help of the university's laser cutter, since | the help of the university's laser cutter, since | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user