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