$24
This assignment will introduce you to the idea of estimating the motion
of a mobile robot using wheel odometry, and then also using that wheel
odometry to make a simple map. It uses a dataset previously gathered in
a mobile robot simulation environment called Gazebo. Watch the video,
'gazebo.mp4' to visualize what the robot did, what its environment
looks like, and what its sensor stream looks like.
There are three questions to complete (5 marks each):
Question 1: code (noise-free) wheel odometry algorithm
Question 2: add noise to data and re-run wheel odometry algorithm
Question 3: build a map from ground truth and noisy wheel odometry
Fill in the required sections of this script with your code, run it to
generate the requested plots, then paste the plots into a short report
that includes a few comments about what you've observed. Append your
version of this script to the report. Hand in the report as a PDF file.
requires: basic Matlab, 'gazebo.mat'
======================================================
Question 1: code (noise-free) wheel odometry algorithm
======================================================
Write an algorithm to estimate the pose of the robot throughout motion
using the wheel odometry data (t_odom, v_odom, omega_odom) and assuming
a differential-drive robot model. Save your estimate in the variables
(x_odom y_odom theta_odom) so that the comparison plots can be generated
below. See the plot 'ass1_q1_soln.png' for what your results should look
like.
=================================================================
Question 2: add noise to data and re-run wheel odometry algorithm
=================================================================
Now we're going to deliberately add some noise to the linear and
angular velocities to simulate what real wheel odometry is like. Copy
your wheel odometry algorithm from above into the indicated place below
to see what this does. The below loops 100 times with different random
noise. See the plot 'ass1_q2_soln.pdf' for what your results should look
like.
save the original odometry variables for later use
v_odom_noisefree = v_odom;
omega_odom_noisefree = omega_odom;
================================================================
Question 3: build a map from noisy and noise-free wheel odometry
================================================================
Now we're going to try to plot all the points from our laser scans in the
robot's initial reference frame. This will involve first figuring out
how to plot the points in the current frame, then transforming them back
to the initial frame and plotting them. Do this for both the ground
truth pose (blue) and also the last noisy odometry that you calculated in
Question 2 (red). At first even the map based on the ground truth may
not look too good. This is because the laser timestamps and odometry
timestamps do not line up perfectly and you'll need to interpolate. Even
after this, two additional patches will make your map based on ground
truth look as crisp as the one in 'ass1_q3_soln.png'. The first patch is
to only plot the laser scans if the angular velocity is less than
0.1 rad/s; this is because the timestamp interpolation errors have more
of an effect when the robot is turning quickly. The second patch is to
account for the fact that the origin of the laser scans is about 10 cm
behind the origin of the robot. Once your ground truth map looks crisp,
compare it to the one based on the odometry poses, which should be far
less crisp, even with the two patches applied.