You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
\caption{Left: PythonRobotics Project page, Right: GitHub star history graph using \cite{starhistory}}
@@ -156,7 +156,7 @@ \section{Related works}
156
156
ROS includes basic navigation software such as the Adaptive Monte Carlo Localization (AMCL) package and the local path planner based on Dynamic Window Approach, etc\cite{rosnavigation}.
157
157
Many autonomous navigation packages using ROS are also open-sourced.
158
158
159
-
ROS packages can also be useful to learn autonomous navigation algorithms, however the documentation is inconsistent and, at times, it can be difficult to find implementation details about the algorithms used.
159
+
ROS packages can also be useful to learn autonomous navigation algorithms, however the documentation is inconsistent and it can be difficult to find implementation details about the algorithms used.
160
160
ROS packages are usually written in C++ because the focus is computational efficiency and not readability, which makes learning from the code harder.
161
161
162
162
Udacity Inc, which is an online learning company founded by S. Thrun, et al, is providing great online courses for autonomous navigation and autonomous driving \cite{udacity}.
Grid mapping with 2D ray casting&2D object clustering with k-means algorithm
184
184
\end{tabular}
185
185
\caption{Mapping simulation results}
@@ -188,39 +188,41 @@ \section{Related works}
188
188
189
189
\section{Philosophy}
190
190
In this section, the philosophy of this project is described.
191
-
It based on three main philosophies.
191
+
The PythonRobotics project is based on three main philosophies.
192
+
Each of which will be discussed separately in this section.
192
193
193
194
\subsection{Readability}
194
-
The first one is that the code have to be easy to read for understanding each algorithm.
195
-
This project aims beginners of robotics to understand basic ideas of each algorithm.
196
-
Python\cite{python} programming language is adopted in this project because of its simplicity and it allows us to focus on algorithm itself.
197
-
Python has great libraries for matrix operation, mathematical and scientific operation, and visualization.
198
-
These libraries also allows us to focus on algorithm itself.
195
+
The first philosophy is that the code has to be easy to read.
196
+
If the code is not easy to read, it would be difficult to achieve our goal of allowing beginners to understand the algorithms
197
+
Python\cite{python} programming language is adopted in this project.
198
+
Python has great libraries for matrix operation, mathematical and scientific operation, and visualization, which makes code more readable because such operations don't need to be re-implemented.
199
+
Having the core Python packages allows the user to focus on the algorithms, rather than the implementations.
199
200
200
201
\subsection{Practicality}
201
-
The second one is that implemented algorithms have to be practical and widely used in both academia and industry.
202
+
The second philosophy is that implemented algorithms have to be practical and widely used in both academia and industry.
202
203
For example, Kalman filters and particle filter for localization, grid mapping for mapping, dynamic programming based approaches and sampling based approaches for path planning, and optimal control based approach for path tracking.
204
+
These algorithms are implemented in this project.
203
205
204
-
\subsection{Minimum dependency}
205
-
The last philosophy is minimum dependency.
206
-
It allows us to run code samples easily and to convert the Python codes to other programming languages such as C++, Java for practical usage.
206
+
\subsection{Minimal dependencies}
207
+
The last philosophy is minimal dependencies.
208
+
Having few external dependencies allows us to run code samples easily and to convert the Python codes to other programming languages, such as C++ or Java for more practical application.
207
209
Each sample code only depends some modules on Python3 as bellow.
208
210
209
211
\begin{itemize}
210
-
\item numpy\cite{numpy} for matrix operation
211
-
\item scipy\cite{scipy} for mathematics, science, and engineering computing
212
-
\item matplotlib\cite{matplotlib} for visualization
213
-
\item pandas\cite{pandas} for data import
212
+
\item numpy\cite{numpy} for matrix and vector operations
213
+
\item scipy\cite{scipy} for mathematical, scientific computing
214
+
\item matplotlib\cite{matplotlib} for plotting and visualization
215
+
\item pandas\cite{pandas} for data import and manipulation.
214
216
\item cvxpy\cite{cvxpy} for convex optimization
215
217
\end{itemize}
216
218
217
-
These modules are OSS and could be used for free.
219
+
These modules are OSS and can also be used for free.
218
220
This repository software doesn't depend on any commercial software.
In this section, we briefly described the repository structure.
233
-
234
-
This repository has five directories which corresponding to five technical categories in autonomous navigation: localization, mapping, SLAM, path planning, and path tracking.
235
-
There is one sub-directory per algorithm, which has a sample code using different algorithms.
234
+
In this section, the brief repository structure is described.
236
235
236
+
There are five directories, each one corresponding to a different technical category in autonomous navigation: localization, mapping, SLAM, path planning, and path tracking.
237
+
There is one sub-directory per algorithm, which has a sample code implementing and testing the algorithm.
237
238
In the following subsections, some algorithms and some simulation examples in each category are described.
238
239
239
240
\subsection{Localization}
240
241
241
-
Localization is the ability of a robot to know its position and orientation with sensors such as GNSS and IMU.
242
+
Localization is the ability of a robot to know its position and orientation with sensors such as Global Navigation Satellite System:GNSS etc.
242
243
In localization, Bayesian filters such as Kalman filters, histogram filter, and particle filter are widely used\cite{PR}.
243
244
Fig.\ref{fig:localization} shows localization simulations using histogram filter and particle filter.
244
245
245
-
246
-
247
246
\subsection{Mapping}
248
247
Mapping is the ability of a robot to understand its surroundings with external sensors such as LIDAR and camera.
249
248
Robots have to recognize the position and shape of obstacles to avoid them.
250
249
In mapping, grid mapping and machine learning algorithms are widely used\cite{PR}\cite{PRML}.
251
250
Fig.\ref{fig:mapping} shows mapping simulation results using Grid mapping with 2D ray casting and 2D object clustering with k-means algorithm.
252
251
253
-
254
-
255
252
\subsection{SLAM}
256
253
Simultaneous Localization and Mapping (SLAM) is an ability to estimate the pose of a robot and the map of the environment at the same time.
257
-
SLAM problem is hard to solve, because a map is needed for localization and a good localization is needed for mapping, which is a kind of chicken and egg problem.
254
+
The SLAM problem is hard to solve, because a map is needed for localization and good localization is needed for mapping.
255
+
In this way, SLAM is often said to be similar to a `chicken-and-egg' problem.
258
256
Popular SLAM solution methods include the extended Kalman filter, particle filter, and Fast SLAM algorithm\cite{PR}.
259
257
Fig.\ref{fig:slam} shows SLAM simulation results using Extended Kalman Filter and results using FastSLAM2.0\cite{PR}.
260
258
261
-
262
-
263
259
\subsection{Path planning}
264
260
265
261
Path planning is the ability of a robot to search feasible and efficient path to the goal.
266
-
The path have to satisfy some constraints based on movement model and obstacle positions, and optimize some objective functions such as time to goal and distance to obstacle etc.
262
+
The path has to satisfy some constraints based on the robot's motion model and obstacle positions, and optimize some objective functions such as time to goal and distance to obstacle.
267
263
In path planning, dynamic programming based approaches and sampling based approaches are widely used\cite{pathplanning}.
268
264
Fig.\ref{fig:pathplan} shows simulation results of potential field path planning and LQR-RRT* path planning\cite{lqrrrt}.
269
265
@@ -278,8 +274,9 @@ \subsection{Path planning}
278
274
\end{figure}
279
275
280
276
\subsection{Path tracking}
281
-
Path tracking is an ability of a robot to follow the reference path generated by path planning algorithms.
282
-
The role of the path tracking controller is to stabilize to the reference path or trajectory which has modeling error and other forms of uncertainty.
277
+
Path tracking is the ability of a robot to follow the reference path generated by a path planner.
278
+
The role of the path tracking controller is to follow a reference trajectory while simultaneously stabilizing the robot.
279
+
The path tracking controller may need to account for modeling error and other forms of uncertainty.
283
280
In path tracking, feedback control techniques and optimization based control techniques are widely used\cite{pathplanning}.
284
281
Fig.\ref{fig:pathtracking} shows simulations using rear wheel feedback steering control and PID speed control, and iterative linear model predictive path tracking control\cite{lqrrrt}.
In this paper, we introduced PythonRobotics, a code collection of robotics algorithms, with a focus on autonomous navigation. especially for autonomous navigation.
300
-
Related works of this project, some key ideas about this OSS project, and brief structure of this repository and some simulation results were described.
296
+
In this paper, we introduced PythonRobotics, a code collection of robotics algorithms, with a focus on autonomous navigation.
297
+
Related works of this project, some key ideas about this OSS project, and brief structure of this repository and simulation results were described.
301
298
302
-
The future works of this project are as followed:
299
+
The future work for this project are as follows:
303
300
304
301
\begin{itemize}
305
302
\item Adding technical and mathematical documentation using Jupyter notebook\cite{JupyterNotebook}.
306
-
\item Adding image processing samples for autonomous navigation only using OpenCV\cite{opencv}.
307
-
\item Adding simple multi-robots simulations for autonomous navigation.
308
-
\item Adding a comparison to find which algorithm fits the best for a specific application.
303
+
\item Adding image processing samples for autonomous navigation using OpenCV\cite{opencv}.
304
+
\item Adding simple multi-robot simulations for autonomous navigation.
305
+
\item Adding a comparison to find which algorithm fits best for a specific application.
309
306
\end{itemize}
310
307
311
-
If readers were interested in these future projects, contributions are welcome.
308
+
If readers are interested in these future projects, contributions are welcome.
312
309
Readers can also support this project financially via Patreon\cite{patreon}.
0 commit comments