Some minor typos

This commit is contained in:
Ryan Alder 2020-03-17 14:31:33 -07:00
parent b23e41ae36
commit f6b7620ac1

View File

@ -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