Implementations and explorations of several pipelines and algorithms in Robotic Vision, as part of the Mobile Robotics (Monsoon 2020) class.
Set-1 consists of a basic overview of euclidean transformations, ways of representing rotations as well as an animation and explanation of the infamous gimbal lock.
Set-2 first looks at non-linear optimizations - the various algorithms and their characteristics. It then implements the iterative closest point algorithm (using singular value decomposition) for registering point clouds with known correspondences.
This set implements camera calibration using the direct linear transform algorithm, then goes on to look at the characteristics of camera calibration matrices and epipolar lines.
Set-4 implements 1D and 2D euclidean pose-graph optimisation for SLAM from scratch, as well as with the aid of the jax
auto-differentiation library. It then compares the results with those obtained using the g2o
solver, using evo
to analyse the trajectories. It also looks at the challenges and possibilities of research in SLAM.
Set-5 first looks at dense stereo reconstruction and the iterative PnP algorithm. It also peeks into the theory behind structure from motion pipelines and bundle adjustment.
Please install the dependencies listed in requirements.txt
before running the Jupyter Notebooks. Use of a virtual environment is recommended.
Disclosure: These implementations are part of an undergraduate course on Mobile Robotics, and are meant to be learning excersizes. They may not be the cleanest or most efficient of implementations.
To whoever needs to hear this (including me, from time to time):
If a rotation matrix R rotates a frame from blue to pink (say by +45 degrees about some axis), it (1) brings back points from pink to blue, or (2), within the blue (or pink, or any other) frame itself, rotates points by +45 degrees about the same axis.