assigned the portions
This commit is contained in:
@@ -27,26 +27,3 @@ depicts the successful completion of this stage.
|
|||||||
\caption{Successful goal alignment}
|
\caption{Successful goal alignment}
|
||||||
\label{p figure goal-alignment}
|
\label{p figure goal-alignment}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
\section{Ball Alignment}
|
|
||||||
|
|
||||||
Now that the ball and the goal are aligned, the robot has to move into a
|
|
||||||
position, from which the kick can be performed. Depending on the situation, it
|
|
||||||
may be feasible to select the foot, with which the kick should be performed,
|
|
||||||
but due to time constraints we programmed the robot to kick with the left foot
|
|
||||||
only. So, the task now is to place the ball in front of the left foot. We
|
|
||||||
realized, that when the ball is in the correct position, then its image in the
|
|
||||||
lower camera should be within a certain region. We experimentally determined
|
|
||||||
the extents of this region, which is schematically presented in figure \ref{p
|
|
||||||
figure ball-alignment}. The algorithm therefore is for the robot to gradually
|
|
||||||
adjust its position in small steps, until the ball image reaches the target,
|
|
||||||
after which the robot will proceed with the kick. Our tests have shown, that
|
|
||||||
this method while being relatively simple, works sufficiently robust, which
|
|
||||||
means that we didn't have the situations, when the robot missed the ball after
|
|
||||||
alignment or even hit the ball with an edge of the foot.
|
|
||||||
|
|
||||||
\begin{figure}[ht]
|
|
||||||
\includegraphics[width=\textwidth]{\fig ball-align}
|
|
||||||
\caption{Ball alignment}
|
|
||||||
\label{p figure ball-alignment}
|
|
||||||
\end{figure}
|
|
||||||
@@ -1,44 +1,3 @@
|
|||||||
\section{Ball Detection}
|
|
||||||
\label{p sec ball detection}
|
|
||||||
|
|
||||||
The very first task that needed to be accomplished was to detect the ball,
|
|
||||||
which is uniformly red-colored and measures about 6 cm in diameter. We decided
|
|
||||||
to use a popular algorithm based on color segmentation \cite{ball-detect}. The
|
|
||||||
idea behind this algorithm is to find the biggest red area in the image and
|
|
||||||
assume that this is the ball. First, the desired color needs to be defined as
|
|
||||||
an interval of HSV (Hue-Saturation-Value) \cite{hsv} values. After that, the
|
|
||||||
image itself needs to be transformed into HSV colorspace, so that the regions
|
|
||||||
of interest can be extracted into a \textit{binary mask}. The contours of the
|
|
||||||
regions can then be identified in a mask \cite{contours}, and the areas of the
|
|
||||||
regions can be calculated using the routines from the OpenCV library. The
|
|
||||||
center and the radius of the region with the largest area are then determined
|
|
||||||
and are assumed to be the center and the radius of the ball.
|
|
||||||
|
|
||||||
\begin{figure}[ht]
|
|
||||||
\includegraphics[width=\textwidth]{\fig ball-detection}
|
|
||||||
\caption[Ball detection]{Ball detection. On the right is the binary mask}
|
|
||||||
\label{p figure ball-detection}
|
|
||||||
\end{figure}
|
|
||||||
|
|
||||||
It is sometimes recommended \cite{ball-detect} to eliminate the noise in the
|
|
||||||
binary mask by applying a sequence of \textit{erosions} and \textit{dilations},
|
|
||||||
but we found, that for the task of finding the \textit{biggest} area the noise
|
|
||||||
doesn't present a problem, whereas performing erosions may completely delete
|
|
||||||
the image of the ball from the mask, if it is relatively far from the robot and
|
|
||||||
the camera resolution is low. For this reason it was decided not to process the
|
|
||||||
binary mask with erosions and dilations, which allowed us to detect the ball
|
|
||||||
even over long distances.
|
|
||||||
|
|
||||||
The advantages of the presented algorithm are its speed and simplicity. The
|
|
||||||
major downside is that a careful color calibration is required for the
|
|
||||||
algorithm to function properly. If the HSV interval of the targeted color is
|
|
||||||
too narrow, the algorithm might miss the ball; if the interval is too
|
|
||||||
wide, other big red-shaded objects in the camera image will be detected as
|
|
||||||
the ball. A possible approach to alleviate these issues to a certain degree
|
|
||||||
will be presented further in the section \ref{p sec field detect}. To
|
|
||||||
conclude, we found this algorithm to be robust enough for our purposes, if a
|
|
||||||
sensible color calibration was provided.
|
|
||||||
|
|
||||||
\section{Goal Detection}
|
\section{Goal Detection}
|
||||||
\label{p sec goal detect}
|
\label{p sec goal detect}
|
||||||
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
\section{Ball Alignment}
|
|
||||||
|
|
||||||
Now that the robot aligned itself with the ball and the goal, it has to move to the
|
|
||||||
right position, from which it can perform the kick. Depending on the situation, it
|
|
||||||
was feasible to program the robot to automatically select which foot to kick the ball with;
|
|
||||||
however, due to time constraints we decided to program the robot to kick only with the left foot.
|
|
||||||
In order to program the robot to correctly position its left foot in front of the ball,
|
|
||||||
we identified the right position that the ball should be positioned at,
|
|
||||||
within the robot’s lower camera as shown in \ref{p figure ball-alignment}.
|
|
||||||
We then experimentally determined the extents of this region.
|
|
||||||
The algorithm therefore is for the robot to gradually adjust its position in small steps,
|
|
||||||
until the ball image reaches the target, which would trigger the robot to perform the kick. \\
|
|
||||||
Our tests have shown that this method was quite robust and gave consistent results.
|
|
||||||
We registered no case where the robot missed the ball or hit it with the edge of the foot.\\
|
|
||||||
|
|
||||||
\begin{figure}[ht]
|
|
||||||
\includegraphics[width=\textwidth]{\fig ball-align}
|
|
||||||
\caption{Ball alignment}
|
|
||||||
\label{p figure ball-alignment}
|
|
||||||
\end{figure}
|
|
||||||
|
|
||||||
|
|
||||||
\section{Kick}
|
|
||||||
|
|
||||||
The final milestone in the goal scoring project is naturally the kick. Before
|
|
||||||
we started working on the kick, we set the requirements that our
|
|
||||||
implementation must meet. Firstly and most importantly, the robot shouldn't
|
|
||||||
fall down during and after performing the kick. Secondly, the kick performance should be efficient,
|
|
||||||
thus ideally only one attempt would be necessary for the ball to reach the goal.
|
|
||||||
Consequently, we opted for a powerful kick which can cover high distances. \\
|
|
||||||
|
|
||||||
As shown in \ref{p figure kick} To obtain our strong kick, First the robot will use its ankle joints to shift
|
|
||||||
its weight to the base leg to compensate for the gravity and to avoid any collision between the kicking foot and the floor.
|
|
||||||
After this, the robot will be able to lift the
|
|
||||||
kicking leg to achieve a stronger swing. Finally, the robot will perform the swing and return
|
|
||||||
to the standing position safely. Both raising the leg and doing the swing require
|
|
||||||
precise coordinated joint movements, so we had to conduct experiments to
|
|
||||||
establish the correct joint angles and the movement speed. \\
|
|
||||||
|
|
||||||
An important drawback of our implementation is that the swing makes the whole
|
|
||||||
process slower, but we weren't able to design a strong and stable kick without
|
|
||||||
using the swing. Nevertheless, the tests that we performed have shown that our
|
|
||||||
implementation satisfies our requirements, and hence the last milestone was
|
|
||||||
successfully completed.\\
|
|
||||||
|
|
||||||
|
|
||||||
\begin{figure}[ht]
|
|
||||||
\includegraphics[width=\textwidth]{\fig kick}
|
|
||||||
\caption{Kick sequence}
|
|
||||||
\label{p figure kick}
|
|
||||||
\end{figure}
|
|
||||||
|
|
||||||
22
documentation/Seif/balign.tex
Normal file
22
documentation/Seif/balign.tex
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
\section{Ball Alignment}
|
||||||
|
|
||||||
|
Now that the ball and the goal are aligned, the robot has to move into a
|
||||||
|
position, from which the kick can be performed. Depending on the situation, it
|
||||||
|
may be feasible to select the foot, with which the kick should be performed,
|
||||||
|
but due to time constraints we programmed the robot to kick with the left foot
|
||||||
|
only. So, the task now is to place the ball in front of the left foot. We
|
||||||
|
realized, that when the ball is in the correct position, then its image in the
|
||||||
|
lower camera should be within a certain region. We experimentally determined
|
||||||
|
the extents of this region, which is schematically presented in figure \ref{p
|
||||||
|
figure ball-alignment}. The algorithm therefore is for the robot to gradually
|
||||||
|
adjust its position in small steps, until the ball image reaches the target,
|
||||||
|
after which the robot will proceed with the kick. Our tests have shown, that
|
||||||
|
this method while being relatively simple, works sufficiently robust, which
|
||||||
|
means that we didn't have the situations, when the robot missed the ball after
|
||||||
|
alignment or even hit the ball with an edge of the foot.
|
||||||
|
|
||||||
|
\begin{figure}[ht]
|
||||||
|
\includegraphics[width=\textwidth]{\fig ball-align}
|
||||||
|
\caption{Ball alignment}
|
||||||
|
\label{p figure ball-alignment}
|
||||||
|
\end{figure}
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
\section{Problem Statement}
|
|
||||||
\label{sec problem statement}
|
|
||||||
\subsection*{Problem Definition}
|
|
||||||
Our project for this semester was to explore a possible strategy for fast goal
|
|
||||||
scoring with a NAO robot. An important note is that we started from scratch,
|
|
||||||
which means that at the beginning the robot is not aware of anything related to
|
|
||||||
the game of football, and to the goal scoring in particular.
|
|
||||||
|
|
||||||
\begin{figure}[ht]
|
|
||||||
\includegraphics[width=\textwidth]{\fig Problem-Definition}
|
|
||||||
\caption{Propose a strategy for NAO to score a goal fast}
|
|
||||||
\label{W a strategy for Nao}
|
|
||||||
\end{figure}
|
|
||||||
|
|
||||||
|
|
||||||
\subsection*{Motivation}
|
|
||||||
When talking about the RoboCup
|
|
||||||
competition, goal scoring is one of the
|
|
||||||
most important elements, needed to win a game, which is exactly the target of our project.Another important aspect of our motivation for this project is that we hope that it will become a part of a RoboCup history at TUM. And finally the scientific contribution of our project is that we explorethe possibilities of interdisciplinary research in such fields as computervision, path planning and mechatronics.
|
|
||||||
|
|
||||||
|
|
||||||
\section{Propose Solution}
|
|
||||||
\subsubsection*{Project Milestones}
|
|
||||||
|
|
||||||
|
|
||||||
In order to finish our project scrupulously, we divided the project into four major sections, with ten minor milestones. And figure \ref{W milestones of the project} show the details of our project.
|
|
||||||
|
|
||||||
|
|
||||||
\begin{figure}[ht]
|
|
||||||
\includegraphics[width=\textwidth]{\fig Project-Milestones}
|
|
||||||
\caption{Entire milestones of the project}
|
|
||||||
\label{W milestones of the project}
|
|
||||||
|
|
||||||
\end{figure}
|
|
||||||
|
|
||||||
\subsubsection*{Detection Section}
|
|
||||||
The detection section consists of \textbf{Ball Detection}, \textbf{Goal Detection} and \textbf{Field Detecition}. They mainly introduced the robot through the computer vision detection to find the ball and goal with ignoring other objects. At the same time make sure the robot can run normally in the field during the competition. \\
|
|
||||||
|
|
||||||
\subsubsection*{Planning Section}
|
|
||||||
The planning section consists of \textbf{Turning to Ball}, \textbf{Distance Measurement} and \textbf{Approach Planning}. We make the robot rotate its body to the ball after finding the ball on the field. Then we need to calculate the distance to the ball and find a possible path for the robot to move closed to the ball.\\
|
|
||||||
|
|
||||||
|
|
||||||
\subsubsection*{Alignment Section}
|
|
||||||
The Alignment section consists of \textbf{Ball Approach}, \textbf{Goal Alignment} and \textbf{Ball Alignment}. Firstly, the robot will move closed to the ball according the proposed path planning. And it then adjust its body position to align itself with the ball and the center of the goal in a straight line. Finally the robot align itself to the kick position which means that the ball is in the front of his left leg for us.\\
|
|
||||||
|
|
||||||
\subsubsection*{Kick Section}
|
|
||||||
Because our robot is a striker, kick part is very crucial in our project. In this part, we are not only propose to raise the leg for a strong kick, but also need to make sure that the robot can keep balance during kicking.\\
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
\section{Ball Detection}
|
|
||||||
\subsection*{Problem Statement}
|
|
||||||
Find the position of the ball using the images form the cameras.
|
|
||||||
|
|
||||||
\subsection*{Proposed Solution}
|
|
||||||
In order to make the robot possible of detecting objects, we propose to segment the image first. Therefore, it will be necessary for use to define unique color regions by assigning pixels.
|
|
||||||
|
|
||||||
\begin{figure}[ht]
|
|
||||||
\includegraphics[width=\textwidth]{\fig Ball-Detection}
|
|
||||||
\caption{Ball detection with visual image}
|
|
||||||
\label{W Ball detection with visual image}
|
|
||||||
|
|
||||||
\end{figure}
|
|
||||||
|
|
||||||
For the ball detection, we extract the pixels with the same color as the
|
|
||||||
ball via HSV method. To do that correctly, careful calibration is required, or else the
|
|
||||||
algorithm might detect foreign objects as the ball, or on the other hand might not be able to detect anything. When the correct pixels are extracted, we find the biggest area among them, and assume that this is the ball. We then find the center and the radius of the ball, as you can see in the figure \ref{W Ball detection with visual image}.
|
|
||||||
|
|
||||||
\subsection*{Results}
|
|
||||||
The HSV method for Ball detection worked fine, but sometimes, under the influence of light in the environment, we need to readjust the parameters of HSV.
|
|
||||||
40
documentation/Yuankai/bdetect.tex
Normal file
40
documentation/Yuankai/bdetect.tex
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
\section{Ball Detection}
|
||||||
|
\label{p sec ball detection}
|
||||||
|
|
||||||
|
The very first task that needed to be accomplished was to detect the ball,
|
||||||
|
which is uniformly red-colored and measures about 6 cm in diameter. We decided
|
||||||
|
to use a popular algorithm based on color segmentation \cite{ball-detect}. The
|
||||||
|
idea behind this algorithm is to find the biggest red area in the image and
|
||||||
|
assume that this is the ball. First, the desired color needs to be defined as
|
||||||
|
an interval of HSV (Hue-Saturation-Value) \cite{hsv} values. After that, the
|
||||||
|
image itself needs to be transformed into HSV colorspace, so that the regions
|
||||||
|
of interest can be extracted into a \textit{binary mask}. The contours of the
|
||||||
|
regions can then be identified in a mask \cite{contours}, and the areas of the
|
||||||
|
regions can be calculated using the routines from the OpenCV library. The
|
||||||
|
center and the radius of the region with the largest area are then determined
|
||||||
|
and are assumed to be the center and the radius of the ball.
|
||||||
|
|
||||||
|
\begin{figure}[ht]
|
||||||
|
\includegraphics[width=\textwidth]{\fig ball-detection}
|
||||||
|
\caption[Ball detection]{Ball detection. On the right is the binary mask}
|
||||||
|
\label{p figure ball-detection}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
It is sometimes recommended \cite{ball-detect} to eliminate the noise in the
|
||||||
|
binary mask by applying a sequence of \textit{erosions} and \textit{dilations},
|
||||||
|
but we found, that for the task of finding the \textit{biggest} area the noise
|
||||||
|
doesn't present a problem, whereas performing erosions may completely delete
|
||||||
|
the image of the ball from the mask, if it is relatively far from the robot and
|
||||||
|
the camera resolution is low. For this reason it was decided not to process the
|
||||||
|
binary mask with erosions and dilations, which allowed us to detect the ball
|
||||||
|
even over long distances.
|
||||||
|
|
||||||
|
The advantages of the presented algorithm are its speed and simplicity. The
|
||||||
|
major downside is that a careful color calibration is required for the
|
||||||
|
algorithm to function properly. If the HSV interval of the targeted color is
|
||||||
|
too narrow, the algorithm might miss the ball; if the interval is too
|
||||||
|
wide, other big red-shaded objects in the camera image will be detected as
|
||||||
|
the ball. A possible approach to alleviate these issues to a certain degree
|
||||||
|
will be presented further in the section \ref{p sec field detect}. To
|
||||||
|
conclude, we found this algorithm to be robust enough for our purposes, if a
|
||||||
|
sensible color calibration was provided.
|
||||||
@@ -35,23 +35,24 @@
|
|||||||
|
|
||||||
\setstretch{1.2} % set line spacing
|
\setstretch{1.2} % set line spacing
|
||||||
|
|
||||||
\input{introduction} % Introduction
|
\input{Common/introduction} % Introduction
|
||||||
\input{tools} % Hardware and software
|
\input{Yuankai/tools} % Hardware and software
|
||||||
\input{solintro} % Our solution intro
|
\input{Common/solintro} % Our solution intro
|
||||||
\input{perception} % Ball goal and field
|
\input{Yuankai/bdetect} % Ball detect
|
||||||
% \input{Yuankai}
|
\input{Pavel/perception} % Goal and field
|
||||||
\input{jonas} % Distance, approach planning
|
\input{Jonas/jonas} % Distance, approach planning
|
||||||
\input{approach} % Ball approach
|
\input{Ahmed/approach} % Ball approach
|
||||||
\input{align} % Goal alignment
|
\input{Ahmed/galign} % Goal alignment
|
||||||
\input{kick}
|
\input{Seif/balign} % Ball alignment
|
||||||
\input{overview} % The complete strategy
|
\input{Seif/kick} % Kick
|
||||||
\input{conclusion} % Results and future work
|
\input{Pavel/overview} % The complete strategy
|
||||||
|
\input{Common/conclusion} % Results and future work
|
||||||
|
|
||||||
\begin{appendices}
|
\begin{appendices}
|
||||||
\input{appendix/details} % Code organization
|
\input{Pavel/details} % Code organization
|
||||||
\input{appendix/colorpicker} % Colorpicker
|
\input{Pavel/colorpicker} % Colorpicker
|
||||||
\input{appendix/tts} % Text to speech and goal confirmation
|
\input{Jonas/tts} % Text to speech and goal confirmation
|
||||||
\input{appendix/pov}
|
\input{Pavel/pov} % Video recording
|
||||||
\end{appendices}
|
\end{appendices}
|
||||||
|
|
||||||
\addcontentsline{toc}{chapter}{Bibliography}
|
\addcontentsline{toc}{chapter}{Bibliography}
|
||||||
|
|||||||
Reference in New Issue
Block a user