Skip to content
Tom Krajnik edited this page Aug 23, 2017 · 22 revisions

Stroll-bearnav

Bearnav is a simple teach-and-repeat visual navigation system robust to appearance changes induced by varying illumination and naturally-occurring environment changes. It's core method is computationally efficient, it does not require camera calibration and it can learn and autonomously traverse arbitrarily-shaped paths. During the teaching phase, where the robot is driven by a human operator, the robot stores its velocities and image features visible from its on-board camera. During autonomous navigation, the method does not perform explicit robot localisation in the 2d/3d space but it simply replays the velocities that it learned during a teaching phase, while correcting its heading relatively to the path based on its camera data. The experiments performed indicate that the proposed navigation system corrects position errors of the robot as it moves along the path. Therefore, the robot can repeatedly drive along the desired path, which was previously taught by the human operator.

System working

The navigation system works in two steps: teach and repeat. During the learning phase, a robot is guided by an operator along a path, which is the robot supposed to autonomously navigate in the repeat phase. When learning, the robot extracts salient features from its on-board camera image and stores its current traveled distance and velocity. During autonomous navigation, the robot sets its velocity according to the traveled distance and compares the currently detected and previously mapped features to correct its heading.

\subsection{Learning (mapping) phase}

During this phase, the robot is driven through the environment by a human operator. The robot continuously measures the distance it traveled and whenever the operator changes the forward or angular velocity, the robot saves the current distance and the updated velocity values, a.k.a `path profile'. Additionally, the robot continuously extracts image features from its on-board camera image and every 0.2~m, it saves the currently detected image features in a local map, which is indexed by the current distance the robot traveled.

\subsection{Navigation phase}

During the navigation phase, the robot traverses the learned path by itself using the speeds in the path profile' and visual features in the local maps. The path profile is simply replayed', i.e. the robot sets a relevant steering and forward velocity according to the distance traveled. The local maps are used to correct the robot heading. Figure and video 1 shows an early version of the system:

At the start of this phase, the robot loads the path profile and it creates a distance-indexed list of the local maps containing the image features. Then, it sets its forward and angular velocity according to the first entry of the path profile and it loads the first local map containing data about image features visible at the start of the path. As the robot moves forwards, it extracts image features from its onboard camera image and matches them to the ones loaded from the local map. The differences of the horizontal image coordinates of the matched features (i.e. the positions of the features in the camera image relative to the positions of the features in the pre-loaded map) are processed by a histogram voting method. The maximum of the histogram indicates the most frequent difference in the horizontal positions of the features, which corresponds to the shift of the image that was acquired during the mapping phase relative to the image that is currently visible from the onboard camera. This difference is then used to calculate a corrective steering speed, which is added to the speed from the velocity profile. If the histogram voting results in inconclusive results due to the low number of features extracted, e.g. when the robot faces a featureless wall, the camera image is over- or under-exposed, etc., the corrective angular speed is not added to the one from the velocity profile. Thus, in case the visual information is not sufficient to determine the heading, the robot simply steers according to the path profile data. As the robot proceeds forwards along the taught path, it continuously monitors its traveled distance, loads local maps and path profile data that correspond to this distance and repeats the steps described above. Thus, the path profile allows the robot to steer approximately in the same way as during the teaching phase, and the image matching corrects the robot heading whenever it deviates from the intended path.

\subsection{System implementation}

The navigation system was implemented in Robotic Operating System (Ros), version Kinetic. The system structure is shown in Figure~\ref{pic:system}. The \textit{feature extraction} node extracts image features from the robot camera and passes them to the \textit{mapping} and \textit{navigator} nodes. The \textit{distance monitor} node receives data from robot odometry and measures travelled distance, also sends special messages every time the robot passes a given distance, which is used by the \textit{mapping node}, see Section~\ref{sec:map}. The \textit{mapper} node receives features from the \textit{feature extraction} node and saves them into local map when it receives the aforementioned message from the \textit{distance monitor} node. It also saves the path profile. The \textit{map preprocessor} node loads all local maps and path profile, and then sends them to the \textit{navigator} node based on the travelled distance received from the \textit{distance monitor}. The \textit{navigator} node receives the velocity profile and local feature maps and it matches the features from the maps to the currently visible features from the \textit{feature extraction} node. It performs the histogram voting described in Section~\ref{sec:navi}, calculates the robot velocity and steers the robot along the path.

All the aforementioned modules were implemented as ROS action servers with dynamically reconfigurable parameters, so the robot operator can change their parameters during runtime or activate and deactivate the modules in case they are not necessary to run during the teaching or replay phase. Action servers also provide the operator with feedback, that shows the current state of the system. Thus, the operator can see the currently used map, path profile data, number of visible image features, results of the histogram voting method etc. For future work, we would like to extend the system to work as an executor.

\begin{figure} \begin{center} \includegraphics[width=0.85\columnwidth]{fig/system} \caption{Software structure of the presented system\label{pic:system}} \end{center} \end{figure}

All the aforementioned modules are available as C++ open source code at~\cite{github}.