mirror of
https://github.com/OSURoboticsClub/Rover_2017_2018.git
synced 2025-11-08 18:21:15 +00:00
Done minus final editing check
This commit is contained in:
@@ -1 +1,13 @@
|
|||||||
\section{Goals}
|
\section{Goals}
|
||||||
|
The summary of goals for the the Mars Rover Ground Station project are as follows:
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\item Create a stable, dual-monitor, full-screen GUI that runs on an Ubuntu 16.04 computer.
|
||||||
|
\item In the GUI, display video streams, Rover arm joint positions, and status information from the Rover.
|
||||||
|
\item Also in the GUI, provide a user-interactable map that includes the ability to plot and edit multiple kinds of way-points.
|
||||||
|
\item Provide control elements to enable the Rover's autonomous mode for the appropriate event during the URC competition.
|
||||||
|
\item Via various user input devices, allow the user to remotely drive and control the arm on the Rover.
|
||||||
|
\item Maintain software stability even when radio systems are dropping packets or completely disconnecting and reconnecting.
|
||||||
|
\item Keep the GUI intuitive enough that the user can focus on performing competition tasks rather than fighting the ground station software.
|
||||||
|
\item Provide enough documentation so that future Rover years may more easily build off of the code foundation.
|
||||||
|
\end{itemize}
|
||||||
@@ -1 +1,90 @@
|
|||||||
|
\lstset{ %
|
||||||
|
backgroundcolor=\color{white}, % choose the background color
|
||||||
|
basicstyle=\footnotesize, % size of fonts used for the code
|
||||||
|
breaklines=true, % automatic line breaking only at whitespace
|
||||||
|
captionpos=b, % sets the caption-position to bottom
|
||||||
|
commentstyle=\color{gray}, % comment style
|
||||||
|
escapeinside={\%*}{*)}, % if you want to add LaTeX within your code
|
||||||
|
keywordstyle=\color{blue}, % keyword style
|
||||||
|
stringstyle=\color{purple}, % string literal style
|
||||||
|
}
|
||||||
|
|
||||||
\section{Interesting Code}
|
\section{Interesting Code}
|
||||||
|
\subsection{Drive Test}
|
||||||
|
\subsubsection{Code}
|
||||||
|
\begin{lstlisting}[language=python]
|
||||||
|
class DriveTest(QtCore.QThread):
|
||||||
|
def __init__(self):
|
||||||
|
super(DriveTest, self).__init__()
|
||||||
|
|
||||||
|
self.not_abort = True
|
||||||
|
|
||||||
|
self.message = None
|
||||||
|
self.publisher = rospy.Publisher("/cmd_vel", Twist, queue_size=10)
|
||||||
|
|
||||||
|
rospy.init_node("test")
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
while self.not_abort:
|
||||||
|
self.message = Twist()
|
||||||
|
|
||||||
|
self.message.linear.x = 1.0
|
||||||
|
self.message.angular.z = 1.0
|
||||||
|
|
||||||
|
self.publisher.publish(self.message)
|
||||||
|
|
||||||
|
self.msleep(100)
|
||||||
|
\end{lstlisting}
|
||||||
|
|
||||||
|
\subsubsection{Description}
|
||||||
|
This QThread example class starts a ROS publishing node on the "/cmd\_vel" topic to send raw drive control commands to the Rover.
|
||||||
|
In this case, it is sending a command to drive the Rover forward and to the right, essentially causing it to drive in a never-ending circle.
|
||||||
|
|
||||||
|
\subsection{Video Test}
|
||||||
|
\subsubsection{Code}
|
||||||
|
\begin{lstlisting}[language=python]
|
||||||
|
class VideoTest(QtCore.QThread):
|
||||||
|
image_ready_signal = QtCore.pyqtSignal()
|
||||||
|
|
||||||
|
def __init__(self, screen_label, video_size=None, sub_path=None):
|
||||||
|
super(VideoTest, self).__init__()
|
||||||
|
|
||||||
|
self.not_abort = True
|
||||||
|
|
||||||
|
self.screen_label = screen_label
|
||||||
|
self.video_size = video_size
|
||||||
|
|
||||||
|
self.message = None
|
||||||
|
self.publisher = rospy.Subscriber(sub_path, CompressedImage, self.__receive_message)
|
||||||
|
|
||||||
|
self.raw_image = None
|
||||||
|
self.cv_image = None
|
||||||
|
self.pixmap = None
|
||||||
|
self.bridge = CvBridge()
|
||||||
|
|
||||||
|
self.image_ready_signal.connect(self.__on_image_update_ready)
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
while self.not_abort:
|
||||||
|
if self.raw_image:
|
||||||
|
self.cv_image = self.bridge.compressed_imgmsg_to_cv2(self.raw_image, "rgb8")
|
||||||
|
|
||||||
|
if self.video_size:
|
||||||
|
self.cv_image = cv2.resize(self.cv_image, self.video_size)
|
||||||
|
|
||||||
|
self.pixmap = QtGui.QPixmap.fromImage(qimage2ndarray.array2qimage(self.cv_image))
|
||||||
|
self.image_ready_signal.emit()
|
||||||
|
self.msleep(20)
|
||||||
|
|
||||||
|
def __on_image_update_ready(self):
|
||||||
|
self.screen_label.setPixmap(self.pixmap)
|
||||||
|
|
||||||
|
def __receive_message(self, message):
|
||||||
|
self.raw_image = message
|
||||||
|
\end{lstlisting}
|
||||||
|
\subsubsection{Description}
|
||||||
|
Yet another QThread class, this example subscribes to the ROS topic that is passed in under the sub\_path argument in order to get video stream data.
|
||||||
|
An example of this topic might be "/cam1/usb\_cam1/image\_raw/compressed".
|
||||||
|
Inside of the body of the thread, it checks if there is image data, and if so decompresses it into a raw 8-bit image using ROS's OpenCV bridge libraries.
|
||||||
|
Finally, it converts the OpenCV image into a QImage and then into a QPixmap before broadcasting an update signal so the main GUI thread can show the image on the QLabel.
|
||||||
|
It is important to note that any direct GUI updates must happen in the main GUI thread, otherwise the QApplication will crash.
|
||||||
@@ -1 +1,9 @@
|
|||||||
\section{Problems / Solutions}
|
\section{Problems / Solutions}
|
||||||
|
\subsection{Time Scheduling}
|
||||||
|
Due to the busy schedules of our group members, the client, and our TA, it was initially hard finding times to schedule meetings.
|
||||||
|
We solved this problem very simply by changing to remote, virtual meetings, which provided enough flexibility for all parties to find times that overlapped.
|
||||||
|
|
||||||
|
\subsection{Requirements Changes}
|
||||||
|
As the core design of the Rover is changing on a regular basis, maintaining a solid foundation of requirements has, at times, been difficult.
|
||||||
|
Some expectations of the final design of the ground station software have not changed, but others like the user input methods have changed two or three times over the course of the term.
|
||||||
|
This is ultimately a minimal problem that can be easily handled by making sure we keep our requirements documentation updated as these changes are made.
|
||||||
@@ -1,6 +1,59 @@
|
|||||||
\subsection{Deliverables}
|
\subsection{Deliverables}
|
||||||
\subsubsection{Github Repository}
|
\subsubsection{Github Repository}
|
||||||
|
Our group gained access to and set up the Github repository for storing the group's ground station code and documentation.
|
||||||
|
All documentation was put into this repository as it was completed.
|
||||||
|
As our team has begun testing code, useful sections of it have been added to the repository for reference during future development of the full ground station software.
|
||||||
|
|
||||||
\subsubsection{Problem Statement Document}
|
\subsubsection{Problem Statement Document}
|
||||||
|
A thorough problem statement document has been created by the group.
|
||||||
|
The document helps to focus the group and gives a high level view of the scope and goals for the project going forward.
|
||||||
|
Work on the document began on October 17th, a rough draft of this document was completed on October 10th and the final draft was completed and delivered to the client on October 20th.
|
||||||
|
The problem statement was approved by the client via email on October 24th.
|
||||||
|
|
||||||
\subsubsection{Requirements Document}
|
\subsubsection{Requirements Document}
|
||||||
\subsubsection{Technology Review Document}
|
The requirements document lays out tasks that have to be completed in order for the project to be considered successful.
|
||||||
|
The document also includes a Gannt chart that serves as a rough time table for each module that must be completed.
|
||||||
|
By following this document and completing each task on time, the team can be sure to complete the software within the required timetable.
|
||||||
|
Writing of the document began on October 26th.
|
||||||
|
A rough draft was completed on October 27th and a final version of the requirements document was delivered to the client for review on November 3rd.
|
||||||
|
The client officially approved the requirements document on November 3rd.
|
||||||
|
|
||||||
|
\subsubsection{Technology Review Documents}
|
||||||
|
The technology review documents serve as research for the technologies required to complete the project successfully.
|
||||||
|
Three documents were created, one by each member of the team.
|
||||||
|
The documents review technologies for the following aspects:
|
||||||
|
|
||||||
|
\vspace{1em}
|
||||||
|
\begin{tabular}{| p{0.3\linewidth} | p{0.3\linewidth} | p{0.3\linewidth} |}
|
||||||
|
% Table headings
|
||||||
|
\hline\bf Corwin Perren & \bf Chris Pham & \bf Ken Steinfeldt \\\hline
|
||||||
|
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\item Robotics Framework
|
||||||
|
\item Communication Technologie\-s
|
||||||
|
\item Joysticks
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
&
|
||||||
|
\begin{itemize}
|
||||||
|
\item Application/GUI Framewor\-ks
|
||||||
|
\item Arm Visualization
|
||||||
|
\item Mapping
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
&
|
||||||
|
\begin{itemize}
|
||||||
|
\item Operating Systems
|
||||||
|
\item Hardware
|
||||||
|
\item Ground Station Deployment
|
||||||
|
\end{itemize}\\\hline
|
||||||
|
\end{tabular}
|
||||||
|
\vspace{1em}
|
||||||
|
|
||||||
|
Each team member's technology review was completed by November 21st.
|
||||||
|
|
||||||
\subsubsection{Software Design Document}
|
\subsubsection{Software Design Document}
|
||||||
|
The Software Design Document (SDD) serves as a comprehensive plan for project completion, supplying an in-depth review of the requirements and plans to fulfill them.
|
||||||
|
Work began on the SDD on November 30th and the document was completed on December 1st.
|
||||||
|
The SDD has not yet been submitted to the client for review and approval but will be in the near future.
|
||||||
@@ -1 +1,14 @@
|
|||||||
\subsection{Summary}
|
\subsection{Summary}
|
||||||
|
The primary focus for the last ten weeks has been design and preparation for the ground station project.
|
||||||
|
In preparing the required documents and submitting the completed documents to our client we, also ensure that the team and the client are in agreement about the development of the ground station software.
|
||||||
|
Each document is built on the previous document as the team and client have developed a more thorough understanding of the requirements of the software that we will produce.
|
||||||
|
First, the problem statement laid out a broad understanding of what the problem to be solved was, helping to focus the scope of the project.
|
||||||
|
By defining the problem to be solved, our team was able to write the requirements document.
|
||||||
|
The requirements document states what solutions are needed in order to accomplish the problems previously defined in the problem statement.
|
||||||
|
With the requirements defined the team was able to research the best tools available to fulfill the stated requirements.
|
||||||
|
The technology review lays out several possible tools available, each able to fulfill a requirement.
|
||||||
|
The research required in order to complete the technology review allowed the team to not only attain a better grasp on technological problems, likely to present themselves during development, but also to choose tools that will be used as development progresses.
|
||||||
|
With all of the previous documents written the team was able to put together a comprehensive design document that will serve to guide development.
|
||||||
|
In addition to the creation of the necessary design documents, the team also gained access to the repository that will retain the development code.
|
||||||
|
All work completed in the last ten weeks accomplishes one overarching task, that is, laying the foundation for the project.
|
||||||
|
Going forward, the foundation we have created will ensure that our team and the client are on the same page, the project is completed to the specifications required by our client, and the project is completed in a timely manner.
|
||||||
@@ -2,14 +2,160 @@
|
|||||||
\subsubsection{Week 1}
|
\subsubsection{Week 1}
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item Activities
|
\item Activities
|
||||||
|
\begin{itemize}
|
||||||
|
\item Individually submitted preferences for capstone projects
|
||||||
|
\item Corwin contacted OSURC stakeholder to request himself and Chris Pham be on the project
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
\item Problems / Solutions
|
\item Problems / Solutions
|
||||||
|
\begin{itemize}
|
||||||
|
\item None
|
||||||
|
\end{itemize}
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
|
|
||||||
\subsubsection{Week 2}
|
\subsubsection{Week 2}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Activities
|
||||||
|
\begin{itemize}
|
||||||
|
\item Were assigned project groups
|
||||||
|
\item Socialized as a group to meet each other, including exchanging contact info
|
||||||
|
\item Made plans to contact client for an introductory meeting
|
||||||
|
\item Were added to the Mars Rover team's Slack channel and Github
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\item Problems / Solutions
|
||||||
|
\begin{itemize}
|
||||||
|
\item None
|
||||||
|
\end{itemize}
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
|
||||||
\subsubsection{Week 3}
|
\subsubsection{Week 3}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Activities
|
||||||
|
\begin{itemize}
|
||||||
|
\item The group had a virtual meeting with the client to cover the project requirements
|
||||||
|
\item We worked on and completed our individual rough drafts of the problem statement document
|
||||||
|
\item Initial research was done on the potential tools and frameworks the team might be using
|
||||||
|
\item Communications began with the TA to set up weekly meeting times
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\item Problems / Solutions
|
||||||
|
\begin{itemize}
|
||||||
|
\item Difficulty in scheduling a time to meet with the TA due to scheduling conflicts.
|
||||||
|
We ended up opting for a remote meeting to make scheduling a time easier.
|
||||||
|
Remote meetings have been successful and productive.
|
||||||
|
\end{itemize}
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
|
||||||
\subsubsection{Week 4}
|
\subsubsection{Week 4}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Activities
|
||||||
|
\begin{itemize}
|
||||||
|
\item We combined and edited our individual problem statement documents into a final draft
|
||||||
|
\item We emailed the problem statement to our client for approval
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\item Problems / Solutions
|
||||||
|
\begin{itemize}
|
||||||
|
\item None
|
||||||
|
\end{itemize}
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
|
||||||
\subsubsection{Week 5}
|
\subsubsection{Week 5}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Activities
|
||||||
|
\begin{itemize}
|
||||||
|
\item The group had the first meeting with the TA
|
||||||
|
\item The group began work on the rough draft for the design requirements rough draft
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\item Problems / Solutions
|
||||||
|
\begin{itemize}
|
||||||
|
\item None
|
||||||
|
\end{itemize}
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
|
||||||
\subsubsection{Week 6}
|
\subsubsection{Week 6}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Activities
|
||||||
|
\begin{itemize}
|
||||||
|
\item Had a group meeting with our TA
|
||||||
|
\item As a group, continued working on the requirements document rough draft until complete
|
||||||
|
\item Emailed our client the requirements document and made the edits he requested
|
||||||
|
\item Turned in the final draft and sent it to the client for approval
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\item Problems / Solutions
|
||||||
|
\begin{itemize}
|
||||||
|
\item None
|
||||||
|
\end{itemize}
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
|
||||||
\subsubsection{Week 7}
|
\subsubsection{Week 7}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Activities
|
||||||
|
\begin{itemize}
|
||||||
|
\item Had a group meeting with our TA
|
||||||
|
\item As a group, determined how we would split up technologies for the individual tech review documents
|
||||||
|
\item We set up the initial hardware for the Mars Rover ground station in Graf 306
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\item Problems / Solutions
|
||||||
|
\begin{itemize}
|
||||||
|
\item None
|
||||||
|
\end{itemize}
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
|
||||||
\subsubsection{Week 8}
|
\subsubsection{Week 8}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Activities
|
||||||
|
\begin{itemize}
|
||||||
|
\item Had a meeting with our TA
|
||||||
|
\item We all finished and turned in our rough drafts of the tech review documents
|
||||||
|
\item We peer reviewed another class member's tech review, and received revisions on our own
|
||||||
|
\item We got some initial example ground station code written that could display video stream and send minimal control commands
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\item Problems / Solutions
|
||||||
|
\begin{itemize}
|
||||||
|
\item None
|
||||||
|
\end{itemize}
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
|
||||||
\subsubsection{Week 9}
|
\subsubsection{Week 9}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Activities
|
||||||
|
\begin{itemize}
|
||||||
|
\item We all finished and turned in final drafts of our edited tech review documents
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\item Problems / Solutions
|
||||||
|
\begin{itemize}
|
||||||
|
\item None
|
||||||
|
\end{itemize}
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
|
||||||
\subsubsection{Week 10}
|
\subsubsection{Week 10}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Activities
|
||||||
|
\begin{itemize}
|
||||||
|
\item We had the final meeting of the term with our TA
|
||||||
|
future meetings will likely be scheduled at a different time.
|
||||||
|
\item We worked on, edited, completed, and turned in the final draft of our design document
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\item Problems / Solutions
|
||||||
|
\begin{itemize}
|
||||||
|
\item None
|
||||||
|
\end{itemize}
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,9 @@
|
|||||||
\usepackage{multicol}
|
\usepackage{multicol}
|
||||||
\usepackage{pdflscape}
|
\usepackage{pdflscape}
|
||||||
\usepackage{pdfpages}
|
\usepackage{pdfpages}
|
||||||
|
\usepackage[british]{babel}
|
||||||
|
\usepackage{listings}
|
||||||
|
\usepackage{xcolor}
|
||||||
|
|
||||||
\usepackage{geometry}
|
\usepackage{geometry}
|
||||||
\geometry{textheight=9.5in, textwidth=7in}
|
\geometry{textheight=9.5in, textwidth=7in}
|
||||||
@@ -36,7 +39,16 @@
|
|||||||
\item \textit{Dependencies:} #4%
|
\item \textit{Dependencies:} #4%
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
}
|
}
|
||||||
|
\definecolor{backcolor}{rgb}{0.95,0.95,0.92}
|
||||||
|
\lstset{basicstyle=\ttfamily,
|
||||||
|
backgroundcolor=\color{backcolor},
|
||||||
|
showstringspaces=false,
|
||||||
|
commentstyle=\color{red},
|
||||||
|
keywordstyle=\color{blue},
|
||||||
|
columns=fullflexible,
|
||||||
|
breaklines=true,
|
||||||
|
postbreak=\mbox{\textcolor{red}{$\hookrightarrow$}\space},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
% 2. Uncomment the appropriate line below so that the document type works
|
% 2. Uncomment the appropriate line below so that the document type works
|
||||||
@@ -110,7 +122,7 @@
|
|||||||
\vspace{20pt}
|
\vspace{20pt}
|
||||||
\begin{abstract}
|
\begin{abstract}
|
||||||
% 6. Fill in your abstract
|
% 6. Fill in your abstract
|
||||||
REPLACE THIS
|
This document contains the summary of the purpose and goals of the ground station software, the progress our team has made during the term, as well as problems and solutions to those problems we've encountered over the term. Additionally, it contains snippets of useful code and a retrospective on the work our team has done this term. Overall, this document provides a good overview of everything our team has accomplished over the Fall term.
|
||||||
|
|
||||||
\end{abstract}
|
\end{abstract}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1 +1,6 @@
|
|||||||
\section{Purpose}
|
\section{Purpose}
|
||||||
|
The purpose of this project is to create ground station control software that will interface with the OSU Robotics Club's Mars Rover.
|
||||||
|
This software will take in controls via user input devices such as joysticks, a SpaceNav mouse, as well as traditional keyboard and mouse in order to send remote control commands.
|
||||||
|
These commands will allow a user to drive the Rover and control the Rover arm.
|
||||||
|
Additionally, this software will allow for viewing of video streams and status information being sent back to the ground station from the Rover.
|
||||||
|
The point of writing this software is to complete the package that is the Mars Rover competition robot so that it may compete in the University Rover Challenge taking place in June of 2018.
|
||||||
|
|||||||
@@ -2,24 +2,28 @@
|
|||||||
\vspace{1em}
|
\vspace{1em}
|
||||||
\begin{tabular}{| p{0.3\linewidth} | p{0.3\linewidth} | p{0.3\linewidth} |}
|
\begin{tabular}{| p{0.3\linewidth} | p{0.3\linewidth} | p{0.3\linewidth} |}
|
||||||
% Table headings
|
% Table headings
|
||||||
\bf Positives & \bf Deltas & \bf Actions \\
|
\hline\bf Positives & \bf Deltas & \bf Actions \\\hline
|
||||||
|
|
||||||
% All the positives
|
% All the positives
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item Positives
|
\item Clear Project Goals
|
||||||
|
\item Flexible Client
|
||||||
|
\item Code Development Started
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
% All the things we need to change
|
% All the things we need to change
|
||||||
&
|
&
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item Changes
|
\item Background Knowledge
|
||||||
|
\item Avoid Time Crunches
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
% All the actions to make the changes
|
% All the actions to make the changes
|
||||||
&
|
&
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item Actions to make the changes happen
|
\item Mastery Challenges
|
||||||
\end{itemize}
|
\item Complete ROS Tutorials
|
||||||
\end{tabular}
|
\item Earlier Starts
|
||||||
|
\end{itemize}\\\hline
|
||||||
|
|
||||||
\end{document}
|
\end{tabular}
|
||||||
Reference in New Issue
Block a user