Added 2017-2018 mars rover repository.

This commit is contained in:
2018-08-22 14:54:52 -07:00
parent a56690ca18
commit 7fd2641766
750 changed files with 2019222 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -0,0 +1,31 @@
# This config is copied from overleaf so output there will match compiled output here
# support for the glossaries package:
add_cus_dep('glo', 'gls', 0, 'makeglossaries');
add_cus_dep('acn', 'acr', 0, 'makeglossaries');
sub makeglossaries {
system("makeglossaries \"$_[0]\"");
}
# support for the nomencl package:
add_cus_dep('nlo', 'nls', 0, 'makenlo2nls');
sub makenlo2nls {
system("makeindex -s nomencl.ist -o \"$_[0].nls\" \"$_[0].nlo\"");
}
# from the documentation for V. 2.03 of asymptote:
sub asy {return system("asy \"$_[0]\"");}
add_cus_dep("asy","eps",0,"asy");
add_cus_dep("asy","pdf",0,"asy");
add_cus_dep("asy","tex",0,"asy");
# metapost rule from http://tex.stackexchange.com/questions/37134
add_cus_dep('mp', '1', 0, 'mpost');
sub mpost {
my $file = $_[0];
my ($name, $path) = fileparse($file);
pushd($path);
my $return = system "mpost $name";
popd();
return $return;
}

View File

@@ -0,0 +1,18 @@
# Makefile created by Corwin Perren
# Generic makefile for all LaTeX projects downloaded from overleaf
#
# All this makefile does is call perl against latexmkrc, which is
# the latex equivalent of make
LATEXMK_COMPILE_FLAGS = -pdf
LATEXMK_CLEAN_FLAGS = -c
.DEFAULT_GOAL := all
all: latexmk_output clean
latexmk_output:
perl latexmk.pl $(LATEXMK_COMPILE_FLAGS)
clean:
perl latexmk.pl $(LATEXMK_CLEAN_FLAGS)

View File

@@ -0,0 +1,154 @@
\documentclass[onecolumn, draftclsnofoot, 10pt, compsoc]{IEEEtran}
\usepackage{graphicx}
\graphicspath{{./figures/}}
\usepackage{url}
\usepackage{setspace}
\usepackage{multicol}
\usepackage{geometry}
\geometry{textheight=9.5in, textwidth=7in}
% \overfullrule=2in
% 1. Fill in these details
\def \CapstoneTeamName{ }
\def \CapstoneTeamNumber{ 30}
\def \GroupMemberOne{ Kenneth Steinfeldt}
\def \GroupMemberTwo{ Christopher Pham}
\def \GroupMemberThree{ Corwin Perren}
\def \CapstoneProjectName{ OSU Robotics Club\\Mars Rover Ground Station}
\def \CapstoneSponsorCompany{ OSU Robotics Club}
\def \CapstoneSponsorPerson{ Nick McComb}
% 2. Uncomment the appropriate line below so that the document type works
\def \DocType{ Problem Statement
%Requirements Document
%Technology Review
%Design Document
%Progress Report
}
\newcommand{\NameSigPair}[1]{
\par
\makebox[2.75in][r]{#1}
\hfill
\makebox[3.25in]{
\makebox[2.25in]{\hrulefill}
\hfill
\makebox[.75in]{\hrulefill}
}
\par\vspace{-12pt}
\textit{
\tiny\noindent
\makebox[2.75in]{}
\hfill
\makebox[3.25in]{
\makebox[2.25in][r]{Signature}
\hfill
\makebox[.75in][r]{Date}
}
}
}
% 3. If the document is not to be signed, uncomment the command below
\renewcommand{\NameSigPair}[1]{#1}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\begin{titlepage}
\pagenumbering{gobble}
\begin{singlespace}
% 4. If you have a logo, use this includegraphics command to put it on the coversheet.
\begin{minipage}{7in}
\centering
\hspace*{-.7in}
$\vcenter{\hbox{\includegraphics[height=4cm]{Oregon_State_College_of_Engineering_Logo}}}$
\hspace*{.2in}
$\vcenter{\hbox{\includegraphics[height=2.5cm]{OSURCLogoOrange}}}$
\end{minipage}
\par\vspace{.35in}
\centering
\scshape{
\huge CS Capstone \DocType \par
{\large\today}\par
\vspace{.5in}
\textbf{\Huge\CapstoneProjectName}\par
\vfill
{\large Prepared for}\par
\Huge \CapstoneSponsorCompany\par
\vspace{5pt}
{\Large\NameSigPair{\CapstoneSponsorPerson}\par}
{\large Prepared by }\par
Group\CapstoneTeamNumber\par
% 5. comment out the line below this one if you do not wish to name your team
% \CapstoneTeamName\par
\vspace{5pt}
{\Large
\NameSigPair{\GroupMemberOne}\par
\NameSigPair{\GroupMemberTwo}\par
\NameSigPair{\GroupMemberThree}\par
}
\vspace{20pt}
}
\begin{abstract}
% 6. Fill in your abstract
This project involves the creation of the user interface and associated back-end systems needed to control the OSU Robotics Club's Mars Rover.
The club's Rover implements numerous control and sensor systems, all of which require ground station software to facilitate quick and easy use of the
Rover during timed competitions.
The ground station software will send the Rover control information received via Joystick input or GUI interaction, as well as process and interpret
status data and multiple, concurrent video streams.
An integrated mapping system will allow the Rover to run autonomously using predefined way-points.
More complex readouts will dynamically show critical system components, such as a live view of arm joint positions and compass showing current
heading and markers for way-points and points of interest.
\end{abstract}
\end{singlespace}
\end{titlepage}
\newpage
\pagenumbering{arabic}
\tableofcontents
% 7. uncomment this (if applicable). Consider adding a page break.
%\listoffigures
%\listoftables
\clearpage
% 8. now you write!
\section{Problem Description}\par
For this project, the Mars Rover Team of the OSU Robotics Club is striving to build a ground station that will serve as the primary point of contact between the operating user and the rover itself.
In order for the Mars Rover team to be successful during competition the software must be easy to use and free from crashes and major errors that may impede progress in the competition.
This project is going to be completely rebuilt from from the ground up instead of using a pre-made solution, such as last year's code or an open source repository.
The competition is the University Mars Rover Challenge and will be held at Hanksville, Utah during the weekend of May 31st to June 2nd 2018 in hilly areas of the Mojave desert.
Not only does the ground station software need to fit the needs of the client, but more importantly, it needs to fit the needs of the members of the Mars Rover Team as they will also be using this software.
Both the client and the club ask that the project be written in the Python programming language with the GUI (Graphical User Interface) framework QT.
\subsection{Requests}
\begin{itemize}
\item Users will control the Rover through a combination of two USB joysticks as well as a keyboard and mouse.
\item USB joysticks will allow users to drive the Rover as well as control secondary systems such as the arm and main-navigation camera positioning.
\item The users will view what the rover will sees using two 24 inch HD monitors: one as a main viewing screen and the other as a selection and statuses screen.
With this interface, users will need the ability to see and record the one or more video streams being sent back from the Rover, GPS position of the Rover on a map of the competition area, and readouts of the rover systems.
\item Readouts on this software will need to display status information such as accessory connection states, GPS heading and speed, drive motor power, battery and system voltages, network latency, radio signal strength, and science data.
\item Due to the competition environment this software will need to be able to handle potential network issues, large spikes in network latency, or frequent packet loss.
As testing of the Rover itself is the single largest priority, rapid prototyping and development of this software is desired.
\end{itemize}
Additionally, the ground station software must be written keeping in mind that future Rover software teams will likely reuse and modify the code for future iterations of the robot.
Ideally, even incomplete versions of the software will need to be available to test specific components of the Rover during its assembly phase.
When properly functioning, this software will need to allow a trained user to effectively and efficiently use the Rover to complete competition tasks.
\section{Proposed Solution}
\subsection{Frameworks}
In order to meet the goals of this project, the client has proposed a solution to design the ground station software using Python 3, the application framework "QT" through use of the PyQt5 library. Running on Linux (Ubuntu 16.04) and Robot Operating System (ROS) version "Kinetic".
\subsection{Rapid Prototyping}
Since rapid prototyping will be needed, Python will allow our team to more quickly develop and test prototypes while also making it easier for future members of Rover software teams to understand, and contribute to, what was written.
The use of the QT framework will also help with rapid prototyping by greatly simplifying the creation of an interface and allowing the team to make quick and easy adjustments to its layout in the future.
\subsection{Robot Operating System}
By using ROS, we will also be able to accelerate the design time by using the robust ROS topic subscription and broadcasting services already built into the framework.
This feature in particular will let us avoid creating custom command control packets that would be hard to reuse without major modifications for future years, as well as allow the Rover to natively accept these commands without the need for any sort of interpreter node.
\section{Performance Metrics}
The primary metric for whether the software has met the criteria for the project will be if the team president, a team officer, and at least three other Rover team members personally use the ground station software to control the rover and sign-off that it is adequately responsive, intuitive to use, and does not crash even under unideal conditions such as partial message loss or high latency.
For these tests, unideal conditions will be simulated via purposeful improper placement of Rover radios.
Additionally, there will be empirical measurement of software traits.
Examples of these measurements include video stream frame rates, maximum latency values for GUI element updates, and maximum latency for control input to rover response.
The time requirements we need to fulfill will be finishing the requirements before Engineering Expo which is May 18, 2018. The hard deadline will be May 30st, 2018, the day before the ground control station will compete in the Mars Rover competition.
\end{document}

View File

@@ -0,0 +1,31 @@
# This config is copied from overleaf so output there will match compiled output here
# support for the glossaries package:
add_cus_dep('glo', 'gls', 0, 'makeglossaries');
add_cus_dep('acn', 'acr', 0, 'makeglossaries');
sub makeglossaries {
system("makeglossaries \"$_[0]\"");
}
# support for the nomencl package:
add_cus_dep('nlo', 'nls', 0, 'makenlo2nls');
sub makenlo2nls {
system("makeindex -s nomencl.ist -o \"$_[0].nls\" \"$_[0].nlo\"");
}
# from the documentation for V. 2.03 of asymptote:
sub asy {return system("asy \"$_[0]\"");}
add_cus_dep("asy","eps",0,"asy");
add_cus_dep("asy","pdf",0,"asy");
add_cus_dep("asy","tex",0,"asy");
# metapost rule from http://tex.stackexchange.com/questions/37134
add_cus_dep('mp', '1', 0, 'mpost');
sub mpost {
my $file = $_[0];
my ($name, $path) = fileparse($file);
pushd($path);
my $return = system "mpost $name";
popd();
return $return;
}

View File

@@ -0,0 +1,18 @@
# Makefile created by Corwin Perren
# Generic makefile for all LaTeX projects downloaded from overleaf
#
# All this makefile does is call perl against latexmkrc, which is
# the latex equivalent of make
LATEXMK_COMPILE_FLAGS = -pdf
LATEXMK_CLEAN_FLAGS = -c
.DEFAULT_GOAL := all
all: latexmk_output clean
latexmk_output:
perl latexmk.pl $(LATEXMK_COMPILE_FLAGS)
clean:
perl latexmk.pl $(LATEXMK_CLEAN_FLAGS)

View File

@@ -0,0 +1,143 @@
\documentclass[onecolumn, draftclsnofoot, 10pt, compsoc]{IEEEtran}
\usepackage{graphicx}
\graphicspath{{./figures/}}
\usepackage{url}
\usepackage{setspace}
\usepackage{multicol}
\usepackage{geometry}
\geometry{textheight=9.5in, textwidth=7in}
% \overfullrule=2in
% 1. Fill in these details
\def \CapstoneTeamName{ }
\def \CapstoneTeamNumber{ 30}
\def \GroupMemberOne{ Kenneth Steinfeldt}
\def \GroupMemberTwo{ Christopher Pham}
\def \GroupMemberThree{ Corwin Perren}
\def \CapstoneProjectName{ OSU Robotics Club\\Mars Rover Ground Station}
\def \CapstoneSponsorCompany{ OSU Robotics Club}
\def \CapstoneSponsorPerson{ Nick McComb}
% 2. Uncomment the appropriate line below so that the document type works
\def \DocType{ Problem Statement
%Requirements Document
%Technology Review
%Design Document
%Progress Report
}
\newcommand{\NameSigPair}[1]{
\par
\makebox[2.75in][r]{#1}
\hfill
\makebox[3.25in]{
\makebox[2.25in]{\hrulefill}
\hfill
\makebox[.75in]{\hrulefill}
}
\par\vspace{-12pt}
\textit{
\tiny\noindent
\makebox[2.75in]{}
\hfill
\makebox[3.25in]{
\makebox[2.25in][r]{Signature}
\hfill
\makebox[.75in][r]{Date}
}
}
}
% 3. If the document is not to be signed, uncomment the command below
\renewcommand{\NameSigPair}[1]{#1}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\begin{titlepage}
\pagenumbering{gobble}
\begin{singlespace}
% 4. If you have a logo, use this includegraphics command to put it on the coversheet.
\begin{minipage}{7in}
\centering
\hspace*{-.7in}
$\vcenter{\hbox{\includegraphics[height=4cm]{Oregon_State_College_of_Engineering_Logo}}}$
\hspace*{.2in}
$\vcenter{\hbox{\includegraphics[height=2.5cm]{OSURCLogoOrange}}}$
\end{minipage}
\par\vspace{.35in}
\centering
\scshape{
\huge CS Capstone \DocType \par
{\large\today}\par
\vspace{.5in}
\textbf{\Huge\CapstoneProjectName}\par
\vfill
{\large Prepared for}\par
\Huge \CapstoneSponsorCompany\par
\vspace{5pt}
{\Large\NameSigPair{\CapstoneSponsorPerson}\par}
{\large Prepared by }\par
Group\CapstoneTeamNumber\par
% 5. comment out the line below this one if you do not wish to name your team
% \CapstoneTeamName\par
\vspace{5pt}
{\Large
\NameSigPair{\GroupMemberOne}\par
\NameSigPair{\GroupMemberTwo}\par
\NameSigPair{\GroupMemberThree}\par
}
\vspace{20pt}
}
\begin{abstract}
% 6. Fill in your abstract
This project involves the creation of the user interface and associated back-end systems needed to control the OSU Robotics Club's Mars Rover.
The club's Rover implements numerous control and sensor systems, all of which require ground station software to facilitate quick and easy use of the
Rover during timed competitions.
The ground station software will send the Rover control information received via Joystick input or GUI interaction, as well as process and interpret
status data and multiple, concurrent video streams.
An integrated mapping system will allow the Rover to run autonomously using predefined way-points.
More complex readouts will dynamically show critical system components, such as a live view of arm joint positions and compass showing current
heading and markers for way-points and points of interest.
\end{abstract}
\end{singlespace}
\end{titlepage}
\newpage
\pagenumbering{arabic}
\tableofcontents
% 7. uncomment this (if applicable). Consider adding a page break.
%\listoffigures
%\listoftables
\clearpage
% 8. now you write!
\section{Problem Description}\par
The OSU Robotics Club Mars Rover Ground Station is the primary point of contact between the operating user and the Rover itself.
In order for the Mars Rover team to be successful during competition the software must be easy to use and free from crashes and major errors.
Users will control the Rover through a combination of two USB joysticks as well as a keyboard and mouse, across two 24" 1080p monitors.
With this interface, users will need the ability to see and record the one or more video streams being sent back from the Rover as well as the GPS position of the Rover on a map of the competition area.
\par
Readouts on this software will need to display status information such as accessory connection states, GPS heading and speed, drive motor power, battery and system voltages, network latency, radio signal strength, and science data.
USB joysticks will allow users to drive the Rover as well as control secondary systems such as the arm and main-navigation camera gimbals.
Due to the competition environment this software will need to be able to handle potential network dropouts, large spikes in network latency, or frequent packet loss.
As testing of the Rover itself is the single largest priority, rapid prototyping and development of this software is desired.
Additionally, the ground station software must be written keeping in mind that future Rover software teams will likely reuse and modify the code for future iterations of the robot.
Ideally, even incomplete versions of the software will need to be available to test specific components of the Rover during its assembly phase.
When properly functioning, this software will need to allow a trained user to effectively and efficiently use the Rover to complete competition tasks.
\section{Proposed Solution}
In order to meet the goals of this project, the team's proposed solution will be to design the ground station software using Python 3, the application framework "QT" through use of the PyQt5 library, and a yet to be determined version of Robot Operating System (ROS).
Since rapid prototyping will be needed, Python will allow our team to more quickly develop and test prototypes while also making it easier for future members of Rover software teams to understand what was written.
The use of the QT framework will greatly simplify the creation of a sleek user interface and allow the team to make quick and easy adjustments to the layout in the future.
By using ROS, we will also be able to accelerate the design time by using the ROS topic subscription and broadcasting services built into the framework.
This feature in particular will let us avoid creating custom command control packets that would be hard to reuse without major modifications for future years, as well as allow the Rover to natively accept these commands without the need for an interpreter node.
\section{Performance Metrics}
The primary metric for whether the software has met the criteria for the project will be if the team president, a team officer, and at least three other Rover team members personally use the ground station software to control the rover and sign-off that it is adequately responsive, intuitive to use, and does not crash even under unideal conditions such as partial message loss or high latency.
For these tests, unideal conditions will be simulated via purposeful improper placement of Rover radios.
Additionally, there will be empirical measurement of software traits.
Examples off these measurements include video stream frame rates, maximum latency values for GUI element updates, and maximum latency for control input to rover response.
\end{document}

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -0,0 +1,54 @@
CC=gcc
CFLAGS=-c -Wall -g
LDFLAGS=-pthread
SOURCES=concurrency1.c
OBJECTS=$(SOURCES:.c=.o)
EXECUTABLE=concurrency1
LATEX = latex -shell-escape
BIBTEX = bibtex
DVIPS = dvips
DVIPDF = dvipdft
XDVI = xdvi -gamma 4
GH = gv
EXAMPLES = $(wildcard *.c)
SRC := $(shell egrep -l '^[^%]*\\begin\{document\}' *.tex)
TRG = $(SRC:%.tex=%.dvi)
PSF = $(SRC:%.tex=%.ps)
PDF = $(SRC:%.tex=%.pdf)
all: pdf
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o $@
.c.o:
$(CC) $(CFLAGS) $< -o $@
pdf: $(PDF)
ps: $(PSF)
$(TRG): %.dvi: %.tex $(EXAMPLES)
$(LATEX) $<
$(LATEX) $<
$(LATEX) $<
$(PSF):%.ps: %.dvi
$(DVIPS) -R -Poutline -t letter $< -o $@
$(PDF): %.pdf: %.ps
ps2pdf $<
show: $(TRG)
@for i in $(TRG) ; do $(XDVI) $$i & done
showps: $(PSF)
@for i in $(PSF) ; do $(GH) $$i & done
clean:
rm -f *.pdf *.ps *.dvi *.out *.log *.aux *.bbl *.blg *.pyg *.o
.PHONY: all show clean ps pdf showps

View File

@@ -0,0 +1,27 @@
\relax
\providecommand\hyper@newdestlabel[2]{}
\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument}
\HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined
\global\let\oldcontentsline\contentsline
\gdef\contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}}
\global\let\oldnewlabel\newlabel
\gdef\newlabel#1#2{\newlabelxx{#1}#2}
\gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}}
\AtEndDocument{\ifx\hyper@anchor\@undefined
\let\contentsline\oldcontentsline
\let\newlabel\oldnewlabel
\fi}
\fi}
\global\let\hyper@last\relax
\gdef\HyperFirstAtBeginDocument#1{#1}
\providecommand*\HyPL@Entry[1]{}
\HyPL@Entry{0<</P()>>}
\HyPL@Entry{1<</S/D>>}
\@writefile{toc}{\contentsline {section}{\numberline {1}Overview}{2}{section.1}}
\@writefile{toc}{\contentsline {section}{\numberline {2}Logistics}{2}{section.2}}
\@writefile{toc}{\contentsline {section}{\numberline {3}Software}{2}{section.3}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.1}Requirements}{2}{subsection.3.1}}
\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.1.1}GUI}{2}{subsubsection.3.1.1}}
\@writefile{toc}{\contentsline {section}{\numberline {4}Hardware}{3}{section.4}}
\@writefile{toc}{\contentsline {section}{\numberline {5}Suggested Solution}{3}{section.5}}
\@writefile{toc}{\contentsline {section}{\numberline {6}Performance Metrics}{3}{section.6}}

View File

@@ -0,0 +1,8 @@
\BOOKMARK [1][-]{section.1}{Overview}{}% 1
\BOOKMARK [1][-]{section.2}{Logistics}{}% 2
\BOOKMARK [1][-]{section.3}{Software}{}% 3
\BOOKMARK [2][-]{subsection.3.1}{Requirements}{section.3}% 4
\BOOKMARK [3][-]{subsubsection.3.1.1}{GUI}{subsection.3.1}% 5
\BOOKMARK [1][-]{section.4}{Hardware}{}% 6
\BOOKMARK [1][-]{section.5}{Suggested Solution}{}% 7
\BOOKMARK [1][-]{section.6}{Performance Metrics}{}% 8

View File

@@ -0,0 +1,116 @@
\documentclass[onecolumn, draftclsnofoot, 10pt, compsoc]{IEEEtran}
\usepackage{graphicx}
\usepackage{url}
\usepackage{setspace}
\usepackage{hyperref}
\usepackage{geometry}
\geometry{textheight=9.5in, textwidth=7in}
% 1. Fill in these details
\def \CapstoneTeamName{ }
\def \CapstoneTeamNumber{ 30}
\def \GroupMemberOne{ Kenneth Steinfeldt}
\def \GroupMemberTwo{ Christopher Pham}
\def \GroupMemberThree{ Corwin Perren}
\def \CapstoneProjectName{ OSU Robotics Club\\Mars Rover Ground Station}
\def \CapstoneSponsorCompany{ OSU Robotics Club}
\def \CapstoneSponsorPerson{ Nick McComb}
% 2. Uncomment the appropriate line below so that the document type works
\def \DocType{ Problem Statement
%Requirements Document
%Technology Review
%Design Document
%Progress Report
}
\newcommand{\NameSigPair}[1]{\par
\makebox[2.75in][r]{#1} \hfil \makebox[3.25in]{\makebox[2.25in]{\hrulefill} \hfill \makebox[.75in]{\hrulefill}}
\par\vspace{-12pt} \textit{\tiny\noindent
\makebox[2.75in]{} \hfill \makebox[3.25in]{\makebox[2.25in][r]{Signature} \hfill \makebox[.75in][r]{Date}}}}
% 3. If the document is not to be signed, uncomment the RENEWcommand below
\renewcommand{\NameSigPair}[1]{#1}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\begin{titlepage}
\pagenumbering{gobble}
\begin{singlespace}
\begin{minipage}{7in}
\centering
\hspace*{-.7in}
$\vcenter{\hbox{\includegraphics[height=4cm,natwidth=347,natheight=316]{Oregon_State_College_of_Engineering_Logo.eps}}}$
\hspace*{.2in}
$\vcenter{\hbox{\includegraphics[height=2.5cm,natwidth=420,natheight=149]{OSURCLogoOrange.eps}}}$
\end{minipage}
% \begin{center}
% \includegraphics[height=4cm]{Oregon_State_College_of_Engineering_Logo}
% \hfill
% \includegraphics[height=2cm]{OSURCLogoOrange}
% \end{center}
% 4. If you have a logo, use this includegraphics command to put it on the coversheet.
\par\vspace{.25in}
\centering
\scshape{
\huge CS Capstone \DocType \par
{\large\today}\par
\vspace{.5in}
\textbf{\Huge\CapstoneProjectName}\par
\vfill
{\large Prepared for}\par
\Huge \CapstoneSponsorCompany\par
\vspace{5pt}
{\Large\NameSigPair{\CapstoneSponsorPerson}\par}
{\large Prepared by }\par
Christopher Pham\par
% 5. comment out the line below this one if you do not wish to name your team
% \CapstoneTeamName\par
\vspace{5pt}
% {\Large
% \NameSigPair{\GroupMemberOne}\par
% \NameSigPair{\GroupMemberTwo}\par
% \NameSigPair{\GroupMemberThree}\par
% }
% \vspace{20pt}
}
\begin{abstract}
% 6. Fill in your abstract
The purpose of this document is to prove my understanding of the problem that will occur. By listing out the requirements that are requested of this project, this allows for I to define, explain, and bring into my own words how the problem is perceived and allows for misunderstandings to be brought up sooner rather than later.
\end{abstract}
\end{singlespace}
\end{titlepage}
\newpage
\pagenumbering{arabic}
\tableofcontents
% 7. uncomment this (if applicable). Consider adding a page break.
%\listoffigures
%\listoftables
\clearpage
% 8. now you write!
\section{Overview}
For this project, our group is looking to build a ground control station for the Mars Rover group which is a part of the Oregon State Robotics Club. The product is necessary for their club because this is going to view, control, and access the rover while it is on the ground in competition or even possibly in space. Our client, Nick McComb, is the Mars Rover team lead and we possibly might be in contact with other people of the Mars Rover team to fit their needs as this is an integral part of their combined systems. We had our first meeting October 8th to go over our requirements and expectations for our project.
\section{Logistics}
For our group, we are expected to use \href{https://app.asana.com}{Asana} which will be our team tracking software and will delegate tasks as decided by Nick or some other leads to accomplish goals in time. Asana will be used compared to other software because of the request of the Robotics team and there is already a subscription with them. Our version control will be the Robotics club's because it is what they requested because other code pertaining to the event will be located there too.
\section{Software}
For the software we are creating, there are requirements that are requested by our client. There might possibly be more requests by club members but those can be appended on as we progress.
\subsection{Requirements}
There is a requirement for us to use Python 3 with \href{https://www.python.org/dev/peps/pep-0008/}{PEP-8 standard} linting. We are required to use the QT framework under the wrapper PyQt5 to make any graphical user interfaces (GUI). All the code needs to be deployable by May 31, or the day of the competition. For the software we are creating, we will need to use \href{http://www.ros.org/}{Robot Operating System (ROS)}framework to handle sending and receiving controls and statues, video streams over remote Ethernet link. All the code must be multi-threaded using QThreads and/or multi-process with ROS node system.
\subsubsection{GUI}
As per request of the client, we need to build a system that has a dark theme that is suitable for the location of the competition near Hanksville, Utah, such that the desert light does not cause a bunch of glare when trying to use the system. There needs to be a system that can adjust the bitrate of the video streams to allow for network interference at the competition and flexibility. The system should adjust the video bitrate automatically but a user could override the quality.
\\
\noindent The project most likely will run on two 1080p (1920x1080) monitors in full-screen mode on both displays. The left monitor should contain an active video selection for the other display and should show a navigational map which contains the rover's current location, points of interests, and way-points. The map should have the ability to put pins for points of interests by the rover's location, by clicking on the map, or by explicitly putting in GPS coordinates. A way of editing the way points is required to show active way points, change order of way-points, or delete way-points. It should also contain a compass indicator, an Inertial measurement unit (IMU) visualization like pitch, roll, yaw like a flight attitude indicator. Autonomy settings are required like enabling it, video overlays showing processing/processed data if possible, and indicator for when the rover reaches its location and stopped. There is a need to show the statues of the core systems: "bogie" connection statuses, arm connection status, camera presences, joystick connection status, current connection latency, current network max throughput, radio calculated distance, current radio signal strength, GPS connected, Rover's Next Unit of Computing (NUC) CPU usage, NUC Ram Usage, NUC file-system usage, GPS speed in m/s, GPS heading, GPS connected satellites, GPS accuracy. There should be a way to monitor voltages like minimums or approximate safe discharge time. Another request was finding a way to simulate the moving arm using the OpenGL wrapper in Python/PyQT to show the operator how the arm is moving. Another display would be showing the science probes like soil sample sensors or biological sensors attached to the rover. The right monitor will contain the primary video display or a secondary display in "picture in picture" mode or "picture by picture" mode and tools to save the video stream that is coming from the rover.
\section{Hardware}
The client requests that we run the software on an Intel NUC (2016) or a laptop that will be running Ubuntu 16.04 LTS. There will be two 24" 1080p monitors attached to the system. We will need to somehow to figure a way to interface the two universal serial bus (USB) joysticks to control the rover or via keyboard and mouse.
\section{Suggested Solution}
The project itself leans towards like a wrapper like system for ROS and end user to control using PyQT to see, inputs via USB to control, and Python to control and send back data to the rover. For this project, most of it is broken up into the front-end QT/OpenGL and back-end python code to run the front end. To solve how to place points of interests via clicking, it could be done by calculating where in the "box" the click landed and then comparing that to the map texture. To simulate an IMU, you could use OpenGL and make a lens and sphere and calculate the changes needed. An overlay for autonomy mode finishing would just overlaying an object over the video stream which could be an OpenGL object, or covering it up with Qt. The rest of the GUI requests are just displaying the info to screen. The way of solving the way-point system would be harder than expected by using some database base system like SQLite and allowing for path finding.
\section{Performance Metrics}
This project needs to be done before May 31, 2018, the date of the competition but the metrics that are necessary and required are the requirements above. Any addendum to the project will be listed under requests and not mandatory for project completion.
\end{document}

View File

@@ -0,0 +1,8 @@
\contentsline {section}{\numberline {1}Overview}{2}{section.1}
\contentsline {section}{\numberline {2}Logistics}{2}{section.2}
\contentsline {section}{\numberline {3}Software}{2}{section.3}
\contentsline {subsection}{\numberline {3.1}Requirements}{2}{subsection.3.1}
\contentsline {subsubsection}{\numberline {3.1.1}GUI}{2}{subsubsection.3.1.1}
\contentsline {section}{\numberline {4}Hardware}{3}{section.4}
\contentsline {section}{\numberline {5}Suggested Solution}{3}{section.5}
\contentsline {section}{\numberline {6}Performance Metrics}{3}{section.6}

View File

@@ -0,0 +1,42 @@
LATEX = latex -shell-escape
BIBTEX = bibtex
DVIPS = dvips
DVIPDF = dvipdft
XDVI = xdvi -gamma 4
GH = gv
EXAMPLES = $(wildcard *.h)
SRC := $(shell egrep -l '^[^%]*\\begin\{document\}' *.tex)
TRG = $(SRC:%.tex=%.dvi)
PSF = $(SRC:%.tex=%.ps)
PDF = $(SRC:%.tex=%.pdf)
pdf: $(PDF)
ps: $(PSF)
$(TRG): %.dvi: %.tex *.bib $(EXAMPLES)
$(LATEX) $<
$(BIBTEX) $(<:%.tex=%)
$(LATEX) $<
$(LATEX) $<
$(PSF):%.ps: %.dvi
$(DVIPS) -R -Poutline -t letter $< -o $@
$(PDF): %.pdf: %.ps
# $(DVIPDF) -o $@ $<
ps2pdf $<
show: $(TRG)
@for i in $(TRG) ; do $(XDVI) $$i & done
showps: $(PSF)
@for i in $(PSF) ; do $(GH) $$i & done
all: pdf
clean:
rm -f *.pdf *.ps *.dvi *.out *.log *.aux *.bbl *.blg *.pyg
.PHONY: all show clean ps pdf showps

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -0,0 +1,145 @@
\documentclass[onecolumn, draftclsnofoot, 10pt, compsoc]{IEEEtran}
\usepackage{graphicx}
\usepackage{url}
\usepackage{setspace}
\usepackage{geometry}
\geometry{textheight=9.5in, textwidth=7in}
% 1. Fill in these details
\def \CapstoneTeamName{ }
\def \CapstoneTeamNumber{ 30}
\def \GroupMemberOne{ Kenneth Steinfeldt}
\def \GroupMemberTwo{ Christopher Pham}
\def \GroupMemberThree{ Corwin Perren}
\def \CapstoneProjectName{ OSU Robotics Club\\Mars Rover Ground Station}
\def \CapstoneSponsorCompany{ OSU Robotics Club}
\def \CapstoneSponsorPerson{ Nick McComb}
% 2. Uncomment the appropriate line below so that the document type works
\def \DocType{ Problem Statement
%Requirements Document
%Technology Review
%Design Document
%Progress Report
}
\newcommand{\NameSigPair}[1]{\par
\makebox[2.75in][r]{#1} \hfil \makebox[3.25in]{\makebox[2.25in]{\hrulefill} \hfill \makebox[.75in]{\hrulefill}}
\par\vspace{-12pt} \textit{\tiny\noindent
\makebox[2.75in]{} \hfill \makebox[3.25in]{\makebox[2.25in][r]{Signature} \hfill \makebox[.75in][r]{Date}}}}
% 3. If the document is not to be signed, uncomment the RENEWcommand below
\renewcommand{\NameSigPair}[1]{#1}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\begin{titlepage}
\pagenumbering{gobble}
\begin{singlespace}
\begin{minipage}{7in}
\centering
\hspace*{-.7in}
$\vcenter{\hbox{\includegraphics[height=4cm]{Oregon_State_College_of_Engineering_Logo}}}$
\hspace*{.2in}
$\vcenter{\hbox{\includegraphics[height=2.5cm]{OSURCLogoOrange}}}$
\end{minipage}
% \begin{center}
% \includegraphics[height=4cm]{Oregon_State_College_of_Engineering_Logo}
% \hfill
% \includegraphics[height=2cm]{OSURCLogoOrange}
% \end{center}
% 4. If you have a logo, use this includegraphics command to put it on the coversheet.
\par\vspace{.25in}
\centering
\scshape{
\huge CS Capstone \DocType \par
{\large\today}\par
\vspace{.5in}
\textbf{\Huge\CapstoneProjectName}\par
\vfill
{\large Prepared for}\par
\Huge \CapstoneSponsorCompany\par
\vspace{5pt}
{\Large\NameSigPair{\CapstoneSponsorPerson}\par}
{\large Prepared by }\par
Group\CapstoneTeamNumber\par
% 5. comment out the line below this one if you do not wish to name your team
% \CapstoneTeamName\par
\vspace{5pt}
{\Large
\NameSigPair{\GroupMemberOne}\par
\NameSigPair{\GroupMemberTwo}\par
\NameSigPair{\GroupMemberThree}\par
}
\vspace{20pt}
}
\begin{abstract}
% 6. Fill in your abstract
For this project our group will design and create the ground station software for the Oregon State University Robotics Club.
When the Mars rover embarks on its mission it will require a ground control station that will direct and monitor the rover through the mission.
In addition to directing the rover the control station will also monitor various aspects of the rover.
These include a video feed, a navigational map, an accurate compass indicator, waypoint editing and placement, core system status, arm joint position, etc.
In order to achieve this we will be using the Python 3 language following the PEP8 standard.
The software will use the Robot Operating System (ROS) framework to monitor the rover and the Python QT framework to power the user interface.
The Ground Control Station will communicate to the rover via a remote ethernet link that can dynamically adjust bandwidth according to necessity.
When complete the Control Station will allow the user to fully control and monitor the Mars Rover remotely through the variety of challenges and obstacles laid before it at the University Mars Rover Challenge in Hanksville, Utah.
\end{abstract}
\end{singlespace}
\end{titlepage}
\newpage
\pagenumbering{arabic}
\tableofcontents
% 7. uncomment this (if applicable). Consider adding a page break.
%\listoffigures
%\listoftables
\clearpage
% 8. now you write!
\section{introduction}\par
The Oregon State University Robotics Club will be competing in the University Mars Rover Challenge held in Hanksville, Utah, May 31 - June 2, 2018.
The rover must be a standalone, off the grid, mobile platform.
In order to accomplish this task a ground station is required in order to fully monitor and operate the mobile rover as it navigates the obstacles of the competition.
The following document lays out how our group will design and write the software that will accomplish this task.
\section{competition requirements}
In order to compete, the rover must be controlled from a central, remote command and control station.
This ground control station is required for course traversal as control station to rover line of sight will be blocked throughout the course.
There are several tasks for the rover to compete in, and for each task the rover may be outfitted.
However, no matter the task, the rover must be controlled by the same ground control station.
\section{requirements}
\subsection{programming}
The software must be written in Python 3.6 following the PEP 8 standard.
The GUI must be written using QT and the PyQT5 framework.
The software must interact with the rover's Robot Operation System (ROS) framework in order to handle the transmission of: control, status information, and video feed over a remote ethernet connection.
Bandwidth must be dynamic in order to adjust to varying environmental constraints, this should be both automatic and manual.
\subsection{graphic user interface}
The GUI will cover 2 monitors running at 1080p resolution.
The left monitor will display the following: \begin{itemize}
\item selectable video display
\item main navigational map
\item compass
\item IMU status
\item waypoint indicators
\item arm position
\item science data
\item logging information
\end{itemize}
The right monitor will display the following: \begin{itemize}
\item primary video stream
\item video tools, such as record to disk
\end{itemize}
\subsection{Hardware}
The software will running on an Intel NUC device running Ubuntu 16.04 LTS able to drive the two required 1080p monitors.
The primary control interface will be two USB joysticks.
A keyboard and mouse will be connected to the NUC and usable.
A remote ethernet network connection will be provided via 2 Ubiquiti Rocket M2 radios.
The base station will be self-contained for easy deployment.
\end{document}