Saturday, August 16, 2014

Surviving a Kidnapping : Particle Filter Style

In this article we will see how particle filters when used in Mobile Robot Localization, such as in Sequential Monte Carlo,  can be implemented to be versatile enough to handle a robot kidnapping -- that is , a robot being randomly removed from its track. This has several applications in real robotics as well as in competitive robotics, such as robot soccer where the robot soccer players are frequently picked up and moved around by humans. In a real robotic application, this can be applied to robots such as underwater autonomous vehicles that can be swept away by a strong ocean current or an animal. These random motions can throw off the strong particles in a filter and ultimately lead to localization failure, because no particles in the distribution agrees with the sensor measurements and motions of the actual robot.

Saturday, July 26, 2014

Extended Kalman Filter Example With Code

In this article we will look into using an Extended Kalman Filter (EKF) for estimating the state of a (simulated) moving vehicle. This article is inspired by the Udacity CS373 : Programming a Robotic Car course. We can use a Kalman Filter to estimate the next pose of the car that uses the following kinematics model:

$$\begin{vmatrix} \mathbf{\theta_{t}} \\ \mathbf{x_{t}} \\ \mathbf{y_{t}} \end{vmatrix} = \begin{vmatrix}\mathbf{(\theta_{t-1} + \alpha_{t} )mod 2\pi} \\ \mathbf{x_{t-1} + Rcos(\theta_{t})}\\ \mathbf{ y_{t-1} + Rsin(\theta_{t})} \end{vmatrix}$$

Wednesday, July 23, 2014

Deriving Least Squares Error for Linear Regression

In this article we'll take a deeper look into machine learning, in specific we'll delve deeper into linear regression and see why we didn't just pull a rabbit out of a hat to get the cost function for linear regression, which is denoted by $$J(\theta) = \frac{1}{2} \sum\limits_{i=1}^m (h_{\theta}(x^{(i)}) - y^{(i)})^{2} $$

Tuesday, July 22, 2014

Visualizing the Particle Filter

In this article we'll take a look at how the Particle Filter, also known as Sequential Monte Carlo,  works for mobile robot localization. Particle filters have gained tremendous popularity over the past decade due to their relatively easy implementation in code and the fact that computing power has come a long way since the idea of the filter was first proposed, thus making it more feasible to manage the time and space complexity of the particle filter for applications in robotics. Apart from having a tremendous influence in robotics, particle filters seem to be a natural solution to problems involving time series and are therefore applied to a wide variety of problems in economics, medicine, robotics, and agriculture.

Tuesday, July 15, 2014

Lego Mindstorms NXT Autonomous Navigation Tutorial

Hello everyone,

I am working on a new video series called Lego Mindstorms NXT Autonomous Navigation Tutorial on Youtube. I will be posting videos related to implmenting artificial intelligence algorithms to intelligently navigate a mindstorms robot. You can check out my first video here:

Lego Mindstorms NXT Autonomous Navigation Tutorial Part 1

Monday, July 7, 2014

Derivation of the Kalman Filter Equations

Hello, I have made a video series consisting of 5 videos that explain the Kalman Filter algorithm and the math behind it. I try to teach the equations in a way that isn't mathematically watered down but also eases the learning curve. I still delve into covariance matrices and linear algebra concepts so its good if you know the basics of these ideas before watching the video series. Please drop me a comment on what you think of the video, and where I can improve.

Part 1 of the series is accessible here.

Thanks for reading!

Tuesday, June 24, 2014

Informative Status Update From std::future<>

std::future provides amazing functionality and really allows programs to take full advantage of the possibility of parallelism. Coupled with std::async, launching tasks into the asynchronous world has never been easier! Whenever we make a function call to std::async, we get back a std::future, no surprise here. However, it is sometimes good to know if our task is done, and keep our users posted on the status of our task, with some sort of notification, be it command line / ASCII art or if we're working with GUI's we can display a task bar.