Stanford Online
Individual camera sensors require mathematical calibration and multi-view triangulation because perspective projection collapses three-dimensional depth along unobservable rays.
AI-assisted summary of Stanford AA274A Principles of Robotic Autonomy | Autumn 2019 | Camera Models & Calibration — original source. Check the original for full context.
Source published:
Key ideas
- Camera projection is modeled as an end-to-end 3D-to-2D pipeline mapping world coordinates through extrinsics (rotation and translation) and intrinsics (focal scaling and optical offsets) into 2D pixel coordinates. (0:05)
- Lifting Cartesian coordinates into homogeneous projective space enables the nonlinear perspective division by depth Z to be isolated to a single final normalization step. (12:12)
- Linear camera calibration requires at least six 3D-to-2D point correspondences (yielding 12 equations for 11 free parameters) and is solved via SVD under a unit-norm constraint on the vectorized projection matrix. (58:41)
- The full 3x4 projection matrix M decomposes into the upper-triangular intrinsic matrix K and orthogonal rotation R via RQ factorization, while monocular depth ambiguity necessitates stereo triangulation or structure from motion for 3D recovery. (65:04)
Detailed notes
## Background Published by Stanford Online on YouTube on October 16, 2026, this video features Lecture 9 of the Stanford AA274A course 'Principles of Robotic Autonomy' recorded in Autumn 2019. Taught by Prof. Marco Pavone, the lecture focuses on camera models and camera calibration techniques essential for robotic perception and spatial reasoning.
## TL;DR Prof. Marco Pavone breaks down the mathematical pipeline required to map 3D world coordinates to 2D camera pixels, detailing perspective projection, sensor discretization, and homogeneous coordinates. He establishes the full camera projection model combining intrinsic parameters and extrinsic rigid-body transformations. The session presents linear camera calibration using known target correspondences, solving the resulting constrained optimization problem via Singular Value Decomposition and extracting parameters through RQ decomposition. Finally, Pavone addresses real-world challenges such as lens distortion, the fundamental depth ambiguity of monocular images, and introduces stereo vision triangulation.
## Atmosphere & style The lecture maintains an engaging, rigorous academic tone balanced with practical, candid engineering humor. Prof. Pavone frequently steps away from dry blackboard derivations to share personal anecdotes—such as the 'brutal' reality of camera calibration at NASA JPL or tourist photos at the Leaning Tower of Pisa—creating an encouraging classroom environment. Watching the session feels like sitting in an interactive graduate seminar where complex linear algebra and geometric proofs are systematically unpacked, enriched by genuine student questions and real-world robotics context.
## Bulletin - [00:05](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=5s) Camera projection is modeled as an end-to-end 3D-to-2D pipeline mapping world coordinates through extrinsics (rotation and translation) and intrinsics (focal scaling and optical offsets) into 2D pixel coordinates. - [12:12](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=732s) Lifting Cartesian coordinates into homogeneous projective space enables the nonlinear perspective division by depth Z to be isolated to a single final normalization step. - [58:41](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=3521s) Linear camera calibration requires at least six 3D-to-2D point correspondences (yielding 12 equations for 11 free parameters) and is solved via SVD under a unit-norm constraint on the vectorized projection matrix. - [01:05:04](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=3904s) The full 3x4 projection matrix M decomposes into the upper-triangular intrinsic matrix K and orthogonal rotation R via RQ factorization, while monocular depth ambiguity necessitates stereo triangulation or structure from motion for 3D recovery.
## Key takeaways - [00:05](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=5s) Robotics requires inverting the forward projection pipeline to reconstruct 3D scene geometry from 2D images, making accurate analytical calibration essential. - [07:58](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=478s) Discretizing continuous image coordinates into sensor pixels introduces horizontal and vertical scale factors (k_x and k_y) that account for potentially non-square pixels. - [12:12](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=732s) Homogeneous coordinates represent points as equivalence classes along rays in a lifted dimension, allowing perspective projection to be formulated as a linear matrix multiplication. - [15:50](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=950s) The 3x3 intrinsic calibration matrix K encapsulates the focal length scale parameters (alpha, beta) and the principal point offsets (u_0, v_0). - [35:38](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=2138s) Rigid body transformations map 3D points from world coordinates to camera coordinates using an orthogonal rotation matrix R and a translation vector T. - [35:38](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=2138s) Visual odometry in mobile robots and planetary rovers solves the inverse extrinsic problem, estimating R and T over consecutive frames to track ego-motion without external positioning. - [38:57](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=2337s) The complete forward projection matrix M = K[R | T] is a 3x4 matrix that maps 4-dimensional homogeneous world coordinates to 3-dimensional homogeneous image coordinates. - [54:30](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=3270s) Due to homogeneous scale invariance, the projection matrix M possesses 11 independent degrees of freedom rather than 12. - [49:31](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=2971s) Each known 3D-to-2D point correspondence provides two independent linear equations, requiring a minimum of six fiducial points to determine M. - [01:02:25](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=3745s) Solving the homogeneous linear system P_tilde * m = 0 under the unit norm constraint ||m|| = 1 corresponds to finding the eigenvector of P_tilde^T * P_tilde associated with its smallest eigenvalue using SVD. - [01:05:04](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=3904s) RQ factorization of the first 3x3 block of M isolates the intrinsic matrix K (upper triangular) from the rotation matrix R (orthogonal), after which translation T is recovered by inverting K. - [01:08:32](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=4112s) Single-view monocular cameras suffer from an inherent depth ambiguity because all 3D points along a projection ray map to the identical 2D pixel. - [01:13:32](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=4412s) Stereo vision overcomes monocular depth ambiguity by observing features from two calibrated viewpoints and triangulating the 3D position by minimizing reprojection error. - [01:16:15](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=4575s) The primary practical challenge in stereo reconstruction is the correspondence problem: correctly identifying matching feature points across disparate camera images.
## Detailed walkthrough ### [00:05](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=5s) The Three-Step Projection Pipeline and Calibration Realities
Prof. Marco Pavone opens the lecture by framing the core problem: establishing the mathematical relationship between 3D points in the physical world and their 2D projections onto an image plane. While computer graphics typically projects world scenes onto a display, robotics requires running this process in reverse. Once an autonomous robot captures camera images, it must leverage these projection equations to reconstruct the 3D geometry of the surrounding environment.
```mermaid flowchart LR accTitle: Camera Projection Pipeline accDescr: Three-step mapping from a 3D world point to 2D pixel coordinates. subgraph Step3["Step 3"] P_world["P (World Frame)"] -->|"Extrinsic Transform"| P_cam["P (Camera Frame)"] end subgraph Step1["Step 1"] P_cam -->|"Perspective Projection"| P_img["p (Image Plane)"] end subgraph Step2["Step 2"] P_img -->|"Translation & Scaling"| P_pix["(u, v) Pixel Coordinates"] end ```
The transformation pipeline breaks down into three sequential steps: 1. Map a 3D point $P$ expressed in the 3D camera reference frame onto the 2D image plane via perspective projection. 2. Transform the continuous point on the image plane into discrete pixel coordinates $(u, v)$ tied to the camera sensor grid. 3. Map the 3D point $P$ from an external global world reference frame into the 3D camera reference frame.
A student interrupts to ask why so much time is devoted to inverting these projections when modern cameras already output properly oriented digital pixels ready for user interaction. Prof. Pavone explains that reading pixels is only the starting point; reconstructing 3D depth and geometry requires precise analytical models. Furthermore, theoretical equations depend on camera intrinsic parameters—such as focal length and pixel scale factors—which are never known with sufficient accuracy from manufacturer data sheets due to physical manufacturing imperfections.
Every roboticist must therefore perform sensor calibration before using cameras for spatial reasoning. Reflecting on his own career, Prof. Pavone notes: “Trust me calibration is one of the most annoying and tedious processes they could do and I can share you with you offline a number of stories. For example, when I was calibrating cameras when I was working for NASA, brutal process.” He aims to equip students with practical calibration techniques so they avoid the “shell shock” he experienced at NASA JPL.
[03:13](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=193s) Perspective Projection and Coordinate Frame Shifts
Reviewing the first step from the previous lecture, a 3D point in the camera frame with coordinates $(X, Y, Z)$ projects onto the image plane at $(x, y)$ according to the ideal pinhole model:
$$x = f \frac{X}{Z}, \qquad y = f \frac{Y}{Z}$$
where $f$ denotes the focal length (the physical distance from the pinhole aperture to the image plane along the optical axis). The projected point on the image plane does not require a third coordinate $z$ because every projected point lies on a flat plane situated at a fixed distance $z = f$ from the pinhole center.
To convert continuous image plane coordinates into realistic camera sensor measurements, the coordinate origin must be shifted. In standard optical derivations, the image reference frame origin is centered directly at the principal point (the intersection of the optical axis with the image plane). Physical camera sensors, however, index pixel arrays in rows and columns starting at a corner: - Image sensor coordinate axes conventionally align with array boundaries (typically top-left or bottom-right). - Let $(x_0, y_0)$ denote the translation offset representing the coordinates of the image plane center with respect to the corner-based sensor frame. - The translated continuous coordinates $(\tilde{x}, \tilde{y})$ are given by:
$$\tilde{x} = x + x_0, \qquad \tilde{y} = y + y_0$$
When a student asks why the origin is positioned at the bottom versus the top, Prof. Pavone clarifies that while digital images frequently treat the top-left corner as $(0,0)$, the exact corner chosen is simply a convention. The crucial mathematical requirement is accounting for the translation between the optical center and the sensor array boundary. Prof. Pavone emphasizes that the image plane frame and sensor frame serve as convenient intermediate reference frames; the two physical frames that ultimately matter are the external world frame and the camera sensor frame.
[07:58](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=478s) Pixel Discretization and Intrinsic Parameters
Image sensors do not measure continuous lengths; they record discrete pixels. Discretizing continuous coordinates requires scaling factors $k_x$ and $k_y$, which define the number of pixels per unit of distance (such as pixels per centimeter) along the horizontal and vertical axes:
- If an axis has $k_x = 3 \text{ pixels/cm}$ and a continuous position $\tilde{x} = 1 \text{ cm}$, the resulting pixel index is $3$. - If $\tilde{x} = 2 \text{ cm}$, the resulting pixel index is $6$. - Rounding to integer pixel values introduces standard discretization error, where all continuous points falling within a $0.33 \text{ cm}$ interval collapse onto the exact same pixel index.
Combining perspective projection, origin translation, and sensor scaling yields the horizontal and vertical pixel coordinates $(u, v)$:
$$u = k_x \left( f \frac{X}{Z} + x_0 \right) = \left( k_x f \right) \frac{X}{Z} + k_x x_0$$
$$v = k_y \left( f \frac{Y}{Z} + y_0 \right) = \left( k_y f \right) \frac{Y}{Z} + k_y y_0$$
In response to a student question about whether $k_x$ and $k_y$ are identical, Prof. Pavone explains that non-square physical sensor pixels frequently cause $k_x \neq k_y$, requiring distinct horizontal and vertical scaling factors that must be determined through calibration.
To simplify the formulation, four lumped intrinsic parameters are defined: - $\alpha = k_x f$ (focal length scaled in horizontal pixel units) - $\beta = k_y f$ (focal length scaled in vertical pixel units) - $u_0 = k_x x_0$ (horizontal coordinate of the principal point in pixels) - $v_0 = k_y y_0$ (vertical coordinate of the principal point in pixels)
The mapping simplifies to:
$$u = \alpha \frac{X}{Z} + u_0, \qquad v = \beta \frac{Y}{Z} + v_0$$
Because dividing by the scene depth $Z$ makes this projection nonlinear, it cannot be formulated directly as a matrix-vector product in standard Cartesian coordinates. Prof. Pavone concludes by pointing to projective geometry: computer vision resolves this algebraic hurdle by adopting homogeneous coordinates, which linearize perspective division inside matrix equations.
[12:12](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=732s) Homogeneous Coordinates and Projective Equivalence Classes
Prof. Marco Pavone begins by formalizing the concept of homogeneous coordinates, addressing how perspective projections can be reformulated as linear operations. Given a point $(x, y) \in \mathbb{R}^2$, it is mapped to a family of points in $\mathbb{R}^3$ given by $\lambda [x, y, 1]^T$. This is deliberately not a one-to-one mapping, but a one-to-many mapping: adding an extra dimension parameterizes an entire equivalence class of points along a ray by a nonzero scalar $\lambda$.
```mermaid flowchart LR accTitle: Homogeneous Coordinate Transformations accDescr: Mapping between Cartesian 2D coordinates and homogeneous 3D coordinates. subgraph Cartesian["Non-Homogeneous (R²)"] P2D["Point: [x, y]ᵀ"] end subgraph Homogeneous["Homogeneous (R³)"] P3D["Equivalence Class: λ [x, y, 1]ᵀ = [X, Y, W]ᵀ"] end P2D -->|"Append 1 and scale by λ"| P3D P3D -->|"De-homogenize: divide by W"| P2D ```
To invert this mapping and recover the original non-homogeneous Cartesian point from an arbitrary vector $[X, Y, W]^T \in \mathbb{R}^3$, one simply divides the first two components by the third: $x = X / W$ and $y = Y / W$. In the scaled case where the vector is $[\lambda x, \lambda y, \lambda]^T$, dividing the first component by the third yields $\lambda x / \lambda = x$, and the second component yields $\lambda y / \lambda = y$. Pavone notes that this mathematical construction applies equally to any vector in $\mathbb{R}^n$, which can be embedded into homogeneous coordinates in $\mathbb{R}^{n+1}$.
[15:50](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=950s) The Intrinsic Camera Matrix $K$ and Linear Projection
Pavone demonstrates why this representation is indispensable by examining a 3D point in the camera frame, $P_c = [X_c, Y_c, Z_c]^T$. In homogeneous coordinates, it can be expressed as $[X_c, Y_c, Z_c, 1]^T$ (fixing $\lambda = 1$ without loss of generality, since homogeneous coordinates form an equivalence class). He introduces a $3 \times 4$ projection matrix composed of the intrinsic camera matrix $K$ augmented with a zero column:
$$\begin{bmatrix} \alpha & 0 & u_0 & 0 \\ 0 & \beta & v_0 & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} X_c \\ Y_c \\ Z_c \\ 1 \end{bmatrix} = \begin{bmatrix} \alpha X_c + u_0 Z_c \\ \beta Y_c + v_0 Z_c \\ Z_c \end{bmatrix}$$
Dividing this resulting 3D vector by its third component, $Z_c$, and dropping the trailing 1 yields:
$$\begin{bmatrix} \alpha \frac{X_c}{Z_c} + u_0 \\ \beta \frac{Y_c}{Z_c} + v_0 \end{bmatrix}$$
This precisely matches the pixel-plane coordinates of the projected point. Pavone points out that lifting coordinates into a higher-dimensional space allows the nonlinear perspective division by depth $Z_c$ to be isolated solely to the final normalization step:
> “So the idea is to lift everything to homogeneous coordinates do all our computation over there treating now that everything is linear and once we're done with that we go back to the true coordinates and nonhomogeneous ones and at that time account for the nonlinearity so it's a clever way of exploiting linear transformations in the nonlinear setting.”
- $\alpha$ and $\beta$ encode the focal length combined with pixel scale factors along the horizontal and vertical axes. - $(u_0, v_0)$ denotes the principal point coordinates, representing the intersection of the optical axis with the sensor plane. - A student asks what "homogeneous" means in this context; Pavone clarifies that while projective geometry provides a rich theoretical framework, “for the sake of this class we just use it as a convenient mathematical trick in order to express the projection transformation that is nonlinear into a projection transformation that is a linear in a lifted space.” - He also mentions the skew parameter $\gamma$, which can appear at row 1, column 2 of $K$; it accounts for non-orthogonal sensor axes, but is typically close to zero in modern cameras and is neglected here. - Another student asks if the camera matrix must be recomputed when refocusing; Pavone confirms that changing the focal length inherently alters the matrix values, necessitating recalibration if the change cannot be modeled.
[24:01](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=1441s) Frame Hierarchy: From World to Pixel Coordinates
Pavone outlines the complete geometric pipeline needed to map an arbitrary 3D point in the environment to sensor pixels. He identifies four distinct coordinate frames: 1. **World reference frame** ($P_w$): The global coordinate system in which scene points and objects are initially defined. 2. **Camera reference frame** ($P_c$): The coordinate system attached to the camera, with the origin at the optical center (pinhole) and the $Z$-axis along the optical axis. 3. **Image plane reference frame**: The physical 2D plane at the focal distance $f$ from the optical center. 4. **Pixel reference frame**: The discrete 2D grid coordinates $(u, v)$ on the sensor array.
```mermaid flowchart LR accTitle: Coordinate Frame Transformation Pipeline accDescr: Pipeline showing the chain of frames from World coordinates to Pixel coordinates. World["World Frame (P_w)"] -->|"Extrinsic Transformation [R | t]"| Camera["Camera Frame (P_c)"] Camera -->|"Perspective Projection & Sensor Scale (K)"| Pixel["Pixel Frame (u, v)"] ```
The objective is to establish the complete end-to-end transformation mapping $P_w$ directly to pixel coordinates. Having established the intrinsic projection from $P_c$ to pixels, the remaining piece of the pipeline is the extrinsic transformation: expressing points from the world reference frame in the camera frame. To derive the transformation relating these two 3D coordinate frames, Pavone begins by analyzing the simplified case where both systems share the same origin, setting the translation vector $t = 0$.
[27:22](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=1642s) Coordinate Transformations and the Rotation Matrix
Prof. Marco Pavone begins by examining the geometric relationship between two coordinate frames whose origins initially coincide: the camera reference system and the world reference system. Denoting vectors with an underscore on the chalkboard, he sets up the orthogonal basis unit vectors for the camera frame as $\mathbf{i}, \mathbf{j}, \mathbf{k}$ along the $X$, $Y$, and $Z$ axes respectively, and the corresponding basis vectors for the world frame as $\mathbf{i}_W, \mathbf{j}_W, \mathbf{k}_W$. A generic spatial point $Q$ can be expressed in terms of either frame. In the camera frame, its representation is $Q = Q_{C,x}\mathbf{i} + Q_{C,y}\mathbf{j} + Q_{C,z}\mathbf{k}$, where the subscript $C$ denotes coordinates with respect to the camera reference frame. In the world reference frame, the exact same geometric vector is written as $Q = Q_{W,x}\mathbf{i}_W + Q_{W,y}\mathbf{j}_W + Q_{W,z}\mathbf{k}_W$. Because both expressions describe the identical point in physical space, they must be strictly equal to one another.
```mermaid flowchart LR accTitle: Camera Projection Pipeline accDescr: Pipeline showing transformation from 3D world coordinates through extrinsics and intrinsics to 2D pixel coordinates. subgraph WorldToCam ["Extrinsics: World to Camera Frame"] PW["World Point (P_W)"] --> Extr["Rigid Transformation [R | T]"] Extr --> PC["Camera Point (P_C)"] end subgraph CamToPixel ["Intrinsics: Camera to Pixel Frame"] PC --> Intr["Camera Calibration Matrix (K)"] Intr --> Px["Homogeneous Pixels (p_h)"] end ```
To extract the individual camera coordinates from the world coordinates, Pavone takes advantage of the orthogonality of the camera basis vectors by taking the dot product of both sides with $\mathbf{i}$. When interacting with the class, a student observes that all other components drop out because basis vectors $\mathbf{j}$ and $\mathbf{k}$ are orthogonal to $\mathbf{i}$ (yielding dot products of zero), while $\mathbf{i} \cdot \mathbf{i} = 1$. This operation isolates the $X$-coordinate: $$Q_{C,x} = Q_{W,x}(\mathbf{i}_W \cdot \mathbf{i}) + Q_{W,y}(\mathbf{j}_W \cdot \mathbf{i}) + Q_{W,z}(\mathbf{k}_W \cdot \mathbf{i})$$ Repeating the operation with dot products against $\mathbf{j}$ and $\mathbf{k}$ produces the expressions for $Q_{C,y}$ and $Q_{C,z}$. Packaging these three linear equations into matrix form yields $\mathbf{Q}_C = R \mathbf{Q}_W$, where the rows of $R$ are formed directly from the dot products between the basis vectors of the two frames. Because these dot products correspond to directional cosines capturing the relative angles between axes, $R$ represents pure spatial rotation. As Pavone remarks: “For this reason, this matrix R is referred to as a rotation matrix which has the property of being an orthogonal matrix.”
- The columns of the rotation matrix $R$ are mutually orthogonal, and its determinant satisfies $\det(R) = 1$. - Knowing the relative orientation of the two reference systems completely specifies the nine dot products composing $R$. - Pavone quips while wrapping up the derivation: “You may already know this but it doesn't hurt to derive it.”
---
[35:38](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=2138s) Adding Translation: The Full Rigid Body Transformation and Visual Odometry
Pavone transitions to the general case where the origins of the world and camera reference frames do not overlap. An arbitrary point $P$ expressed in the camera frame is decomposed into the sum of two vectors: $P_C = T + Q$. Here, $T$ denotes the translation vector pointing from the origin of the camera reference frame to the origin of the world reference frame, and $Q$ is the vector describing point $P$ with respect to the world frame. By virtually translating $Q$ to the camera origin, the problem reduces to the rotational alignment derived earlier, yielding $Q = R P_W$. Combining these terms gives the standard rigid-body transformation: $$P_C = R P_W + T$$ This relation maps coordinates known in the world reference frame into the camera frame using the translation vector $T$ and rotation matrix $R$.
Turning to robotics applications, Pavone highlights how this equation is applied in field robotics and planetary exploration. While forward projection uses known extrinsics to map landmarks into camera space, practical mobile robots frequently reverse the formulation. By matching features across consecutive image frames, the system solves an inverse problem to estimate $R$ and $T$, thereby tracking the robot's motion through space over time. Pavone connects this directly to real-world rovers: “In reality, often times you use the equation in reverse, meaning that you try to estimate from a sequence of images what R and T are, which allows you to understand how your camera is moving with respect to the word frame.”
- Visual odometry uses sequentially estimated $R$ and $T$ matrices to track robot ego-motion without external positioning infrastructure. - Pavone mentions that visual odometry is notably deployed on NASA's Mars rovers to navigate terrain autonomously.
---
[38:57](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=2337s) Homogeneous Transformation and the Complete Camera Model
To smoothly chain coordinate transforms and camera projections, Pavone reformulates the rigid body mapping into homogeneous coordinates. He stacks $P_C$ and $P_W$ with an extra dimension equal to 1, writing the affine transformation as a single block matrix: $$\begin{bmatrix} P_C \\ 1 \end{bmatrix} = \begin{bmatrix} R & T \\ \mathbf{0}_{1 \times 3} & 1 \end{bmatrix} \begin{bmatrix} P_W \\ 1 \end{bmatrix}$$ During the whiteboard derivation, an alert student points out an initial slip regarding the bottom row vector, prompting Pavone to confirm that the row vector consists of three zeros, $[0, 0, 0]$, with dimensions $1 \times 3$. Expanding the block multiplication yields $R P_W + T$ in the upper partition and 1 in the bottom scalar entry, faithfully reproducing the original transformation upon dehomogenization.
Finally, Pavone combines the extrinsic transformation with the intrinsic camera calibration matrix $K$ derived earlier in the lecture. The camera matrix $K$ handles the transformation from normalized camera coordinates into discrete pixel coordinates—including focal length scaling, pixel skew, and the principal point translation to the image corner. Multiplying the intrinsic matrix by the augmented extrinsic matrix $[R \mid T]$ produces the complete projection mapping from a 3D world point $P_h$ to homogeneous pixel coordinates $p_h$: $$p_h = K [R \mid T] P_h$$ When a student asks for clarification about the notation—specifically whether lowercase $p$ signifies coordinates in the camera frame—Pavone confirms that lowercase $p_h$ denotes the projected coordinates directly in pixels, whereas uppercase $P_h$ represents the 3D world coordinates. He urges the class to make sure this end-to-end chain is completely clear, emphasizing: “Is this clear to everyone just let me know because otherwise the calibration process becomes impossible to understand.”
- The extrinsic matrix has dimension $3 \times 4$ when expressed as $[R \mid T]$, which multiplies the $4 \times 1$ homogeneous 3D world coordinate vector. - The intrinsic camera matrix $K$ is a $3 \times 3$ upper triangular matrix encoding focal length and optical center offsets. - The product $M = K [R \mid T]$ constitutes the full $3 \times 4$ projection matrix mapping 3D world space into 2D image pixels.
[042:32] Intrinsic and Extrinsic Camera Parameters and the Calibration Goal
Prof. Marco Pavone reviews the components of the perspective projection transformation linking the 3D world to 2D image coordinates. If an object is at world coordinates such as $3\text{ m}$ for $X$ and $4\text{ m}$ for $Y$, the transformation maps it into the image plane to yield specific pixel values like pixel 3 and pixel 4. The overall transformation relies on three main components: the camera matrix $K$, a rotation matrix $R$, and a translation vector $T$. The camera matrix $K$ encapsulates the intrinsic parameters of the camera, including focal length and the offset of the image plane principal point relative to the pixel coordinate frame. The rotation matrix $R$ describes the orientation of the camera reference frame relative to the world reference frame, while the translation vector $T$ represents the displacement between the origins of the world and camera frames. Pavone notes that if a robot begins operation with its camera frame coinciding with the world frame, $T$ corresponds to the net translation the robot has undergone.
```mermaid flowchart LR accTitle: Camera Projection Pipeline accDescr: Pipeline mapping 3D world coordinates through extrinsic and intrinsic parameters into 2D pixel coordinates. subgraph World["World Coordinates"] P_w["P_w (3D Point)"] end subgraph Extrinsics["Extrinsic Transform"] RT["[R | T] (Rotation & Translation)"] end subgraph Intrinsics["Intrinsic Transform"] K["K (Camera Matrix: Focal length, Principal point)"] end subgraph Image["Image Coordinates"] P_pix["Pixel (u, v)"] end P_w --> RT RT --> K K --> P_pix ```
If these matrices and projected points across multiple views are known (for instance, through stereo vision), one can reconstruct the original 3D position in the world frame. Pavone remarks, “By the way, this is also what your brain does.” However, in practical engineering settings, $K$, $R$, and $T$ are unknown at the outset. This necessitates a calibration procedure whose purpose is to determine the projection transformation, pinpoint the camera’s intrinsic parameters, and enable downstream 3D scene reconstruction.
Pavone explains that the mathematical concept behind calibration is straightforward, though getting it to work in practice requires real-world experience: - Camera calibration is a primary task in robotics labs, frequently implemented using planar or three-dimensional checkerboard patterns. - Homework 3 gives students direct hands-on practice with the calibration procedure on sample images. - “The first time you do it is a little bit unpleasant but once you do it once or twice then you're pretty much set for life but the first time is unpleasant.” — Prof. Marco Pavone
---
[045:35] Setup of the Calibration Target and Known Correspondences
The standard camera calibration setup relies on a known geometric target, such as a planar or 3D checkerboard pattern. A world coordinate reference system is established at a known position relative to the pattern—such as placing the origin at a designated corner and aligning the coordinate axes directly with the grid of the target. A camera is then pointed at the pattern to record images.
Because the physical structure and dimensions of the pattern are manufactured with high precision, the practitioner has complete knowledge of point pairs: 3D world coordinates $P_{w,i}$ matched to their corresponding 2D projected pixel coordinates $(u_i, v_i)$. Pavone illustrates this with a concrete example: knowing the pattern structure makes it possible to state definitively that world coordinate point $(3, 4, 5)$ projects directly to pixel coordinate $(5, 6, 7)$. Because this correspondence holds across $n$ known fiducial points, one can invert the forward projection model to infer the camera parameters from the paired data.
---
[047:48] The Two-Step Strategy and Matrix Dimensions
To determine the unknown parameters, the problem is divided into a two-step framework: 1. Estimate the combined projection matrix $M$ as a single algebraic entity. 2. Decompose $M$ back into its constituent intrinsic matrix $K$, rotation $R$, and translation $T$.
Pavone pauses to clarify the dimensions of the projection matrix $M$. A point in the 3D world is represented in homogeneous coordinates with $4$ elements ($X, Y, Z, 1$). When projected onto the 2D image plane, the resulting homogeneous coordinate vector has $3$ elements ($u, v, 1$). A student asks whether mapping between homogeneous frames requires a square matrix: “If you're converting from a homogeneous frame to another homogeneous frame, shouldn't you be a square matrix?” Pavone explains that it is not square because the dimensions of the underlying spaces differ:
$$\begin{aligned} \text{3D World (Homogeneous)} &\implies 4 \text{ dimensions} \\ \text{2D Image (Homogeneous)} &\implies 3 \text{ dimensions} \\ M &\implies 3 \times 4 \text{ matrix} \end{aligned}$$
---
[049:31] Formulating Linear Constraints per Point Correspondence
To derive the estimation equations, the $3 \times 4$ matrix $M$ is partitioned into its three rows, written as $1 \times 4$ row vectors:
$$M = \begin{bmatrix} m_1 \\ m_2 \\ m_3 \end{bmatrix}$$
Multiplying $M$ by the homogeneous world point $P_{w,i}^h$ yields the homogeneous projection vector:
$$M P_{w,i}^h = \begin{bmatrix} m_1 P_{w,i}^h \\ m_2 P_{w,i}^h \\ m_3 P_{w,i}^h \end{bmatrix}$$
Converting from these 3-element homogeneous coordinates to standard non-homogeneous pixel coordinates $(u_i, v_i)$ requires dividing the first two components by the third component:
$$u_i = \frac{m_1 P_{w,i}^h}{m_3 P_{w,i}^h}, \quad v_i = \frac{m_2 P_{w,i}^h}{m_3 P_{w,i}^h}$$
Rearranging these expressions eliminates the fraction and isolates linear constraints in the unknown elements of $m_1$, $m_2$, and $m_3$:
$$u_i (m_3 P_{w,i}^h) - m_1 P_{w,i}^h = 0$$ $$v_i (m_3 P_{w,i}^h) - m_2 P_{w,i}^h = 0$$
Because $u_i$, $v_i$, and $P_{w,i}^h$ are known measurements, each matched point generates two linear equations that constrain the unknown rows of $M$. Consequently, a dataset of $n$ corresponding points produces a system of $2n$ linear equations.
---
[054:30] Degrees of Freedom and Homogeneous Scale Factor
Pavone tallies the underlying physical degrees of freedom (DoF) in the camera model to verify how many parameters must be identified: - **Intrinsic parameters ($K$):** Contains focal length scaling parameters $\alpha$ and $\beta$, principal point coordinates $u_0$ and $v_0$ (4 parameters), and occasionally a skew parameter (yielding up to 5 parameters). - **Rotation matrix ($R$):** Although stored as a $3 \times 3$ matrix with 9 numbers, orthogonality imposes 6 independent constraints, leaving 3 degrees of freedom corresponding to three spatial orientation angles. - **Translation vector ($T$):** A 3D vector representing spatial translation, providing 3 degrees of freedom.
Summing these gives $3 + 3 + 4 = 10$ (or $11$ degrees of freedom when including skew). In contrast, the unconstrained projection matrix $M$ has $3 \times 4 = 12$ entries. Pavone addresses this discrepancy: because homogeneous coordinates are defined only up to an arbitrary non-zero scaling factor $\lambda$, the entire matrix $M$ is scale-invariant. One entry can be normalized to 1 (or the matrix scaled to unit norm), leaving exactly 11 independent degrees of freedom to estimate.
---
[056:35] Stacking into the Homogeneous Linear System $\tilde{P} m = 0$
To solve for the matrix entries numerically, the constraints across all point correspondences are assembled into a single matrix equation:
$$\tilde{P} m = 0$$
The unknowns are flattened into a $12 \times 1$ column vector $m$ constructed by stacking the transposes of the row vectors:
$$m = \begin{bmatrix} m_1^T \\ m_2^T \\ m_3^T \end{bmatrix} \in \mathbb{R}^{12 \times 1}$$
The coefficient matrix $\tilde{P}$ encodes the linear expressions for each correspondence pair. Pavone engages the class to construct the block structure of $\tilde{P}$ for the first point pair $(u_1, v_1)$ and $P_{w,1}^h$: - For the first equation ($u_1$ constraint), $m_1$ is multiplied by $-(P_{w,1}^h)^T$, $m_2$ has a coefficient of zero ($0_{1 \times 4}$), and $m_3$ is multiplied by $u_1 (P_{w,1}^h)^T$: $$\begin{bmatrix} -(P_{w,1}^h)^T & 0_{1 \times 4} & u_1 (P_{w,1}^h)^T \end{bmatrix}$$ - For the second equation ($v_1$ constraint), the row begins with zeros for $m_1$, applies $-(P_{w,1}^h)^T$ to $m_2$, and multiplies $m_3$ by $v_1 (P_{w,1}^h)^T$.
[58:41](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=3521s) Setting Up the Calibration Linear System and Scale Ambiguity
Prof. Pavone resumes building the linear system of equations used for camera calibration, assembling the rows with terms like $-v_1 P_{w1}^T$ multiplying $m_2$ alongside $u_1$ and $v_1 P_{w1}^T$ terms as the pattern repeats across correspondence points. In practical engineering, the system never yields exact equality due to omnipresent sensor and measurement noise. To make calibration robust, one must collect significantly more measurements than the bare mathematical minimum. Since each 3D-to-2D correspondence measurement yields 2 independent constraints, obtaining $n$ correspondences gives $2n$ constraints. Determining the matrix $M$ involves 11 independent parameters (as a $3 \times 4$ matrix has 12 entries but is defined up to scale), meaning $2n > 11$ is required: at minimum six point correspondences are needed, though in practice far more are gathered to ensure numerical robustness.
```mermaid flowchart LR accTitle: Linear Calibration Flow accDescr: Mapping correspondence points into a constrained minimization problem solved via SVD. A["n 3D-to-2D Point Correspondences"] --> B["Build Linear System: P_tilde * m ≈ 0"] B --> C["Fix Scale Ambiguity: ||m|| = 1"] C --> D["Constrained Least Squares via SVD"] ```
Because homogeneous coordinates are employed, $M$ is defined only up to an arbitrary global scale factor: if $\bar{M}$ solves the system, then $\lambda \bar{M}$ is equally valid. The trivial solution $\bar{M} = 0$ must be discarded because it holds no physical meaning for an actual camera. Consequently, one resolves the ambiguity by fixing the norm of the vectorized parameter matrix $m \in \mathbb{R}^{12}$ to unity ($\|m\| = 1$). When a student asks why $\|m\| = 1$ is chosen over other values, Pavone clarifies that any nonzero constant would work: “So let's just pick the scale once and for all and then we solve with respect to that scale I mean if you want you can make $m$ equal to 4 it's just to fix the scale or $m$ equal to 5 any number we can make $m$ equal to $\lambda$ but one just leads to cleaner mathematics.” The objective then becomes solving the constrained minimization problem $\min_{m} \|\tilde{P} m\|$ subject to $\|m\| = 1$.
[01:02:25](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=3745s) Solving the Optimization via Lagrange Multipliers and SVD
Pavone frames the constrained optimization problem as essential material: “Well, so for the graduate students among you, if you're undergrad, this is like bonus. If you're graduate students, this is not bonus. You should know it.” The optimization problem minimizes $m^T \tilde{P}^T \tilde{P} m$ subject to $1 - m^T m = 0$. Forming the Lagrangian: $$\mathcal{L}(m, \lambda) = m^T \tilde{P}^T \tilde{P} m + \lambda (1 - m^T m)$$ Taking the derivative with respect to $m$ and setting it to zero yields $2 \tilde{P}^T \tilde{P} m - 2 \lambda m = 0$, leading directly to the eigenvalue relation $\tilde{P}^T \tilde{P} m = \lambda m$.
This critical point condition shows that $m$ must be an eigenvector of the matrix $\tilde{P}^T \tilde{P}$. Substituting this relation back into the cost function yields $m^T (\tilde{P}^T \tilde{P} m) = m^T (\lambda m) = \lambda m^T m = \lambda$ (since $\|m\| = 1$). To minimize this cost, one must select the eigenvector associated with the smallest eigenvalue. In computational practice, this is implemented using Singular Value Decomposition (SVD) on $\tilde{P}$, where the solution corresponds to the right singular vector associated with the smallest singular value.
- Minimum number of point correspondences: 6 (yielding 12 equations for 11 free parameters). - Total entries in projection matrix $M$: 12 entries (a $3 \times 4$ matrix). - Cost function value at an eigenvector: $\lambda$ (the corresponding eigenvalue). - Optimization strategy: Form matrix $\tilde{P}$, compute eigenvalues/eigenvectors or perform SVD, and pick the eigenvector with the minimum eigenvalue.
[01:05:04](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=3904s) Decomposing the Projection Matrix via RQ Factorization
Once the $3 \times 4$ projection matrix $M$ is estimated, the next goal is recovering the individual intrinsic calibration matrix $K \in \mathbb{R}^{3 \times 3}$, the rotation matrix $R \in \mathrm{SO}(3)$, and the translation vector $T \in \mathbb{R}^3$. Pavone partitions $M$ into a $3 \times 3$ block $A$ and a $3 \times 1$ column vector $b$: $$M = [A \mid b] = [K R \mid K T]$$ Here, $A = K R$ and $b = K T$. To disentangle the upper-triangular intrinsic matrix $K$ from the orthogonal rotation matrix $R$, Pavone introduces the RQ decomposition from linear algebra.
```mermaid flowchart TD accTitle: RQ Decomposition of Projection Matrix accDescr: Process of partitioning M and extracting K, R, and T. subgraph Partitioning M["Estimated Matrix M (3x4)"] --> A["A = K * R (3x3)"] M --> B["b = K * T (3x1)"] end subgraph Factorization A --> RQ["RQ Decomposition: A = R_tri * Q_orth"] RQ --> K["K = R_tri (Upper Triangular)"] RQ --> R["R = Q_orth (Orthogonal Rotation)"] end subgraph Translation B --> T["T = K^(-1) * b"] K -.-> T end ```
Pavone points out a notorious naming trap: “The reason why this is unfortunate is that R is not the rotational matrix is the upper triangular matrix.” In standard mathematical software such as NumPy, RQ decomposition factors an $n \times n$ matrix into an upper triangular matrix $R_{\text{tri}}$ and an orthogonal matrix $Q_{\text{orth}}$. Therefore, in robotic camera notation, the intrinsic matrix $K$ corresponds to the algorithmic upper-triangular output $R_{\text{tri}}$, while the camera rotation $R$ corresponds to the orthogonal output $Q_{\text{orth}}$. With $K$ in hand, the extrinsic translation vector $T$ is recovered by inverting $K$: $T = K^{-1} b$. Pavone warns students that while the algorithm looks clean on the blackboard, real implementations in their problem sets contain subtle numerical nuances, such as ensuring positive diagonal elements on $K$ and proper determinant parity for $R$.
[01:08:32](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=4112s) Lens Distortion and the Inherent Depth Ambiguity
Pavone highlights a physical limitation of the ideal pinhole model: real cameras use curved glass lenses rather than infinitesimal pinholes. Lenses introduce radial and tangential magnification variations across the field of view. Magnification that diminishes outward causes barrel distortion (common in wide-angle and fisheye lenses), while inward magnification creates pincushion distortion. Although estimating these nonlinear distortion coefficients is beyond the course syllabus, Pavone notes that accounting for them is essential in precision applications. A student asks if calibration must be run per camera or per sensor model: - Student: “If you're working with cameras and you buy a particular model of camera or image sensor, do you have to recalibrate every single particular sensor or just when you have a new model of sensor?” - Pavone: “Oh yeah they calibrate every single camera... pretty much. Yeah, even small manufacturing differences might—I mean in general.”
Having established the projection mapping from 3D world coordinates to 2D image coordinates, Pavone poses the inverse problem: can one reconstruct the 3D world point $P$ from a single projected image pixel $p$? He delivers the central bottleneck of monocular vision: “The answer is unfortunately no which is one of the big challenges in computer vision. And the problem is due to the fact that you have an inherent depth ambiguity in terms of where the point $P$ could be through our perspective equation.” Every single point along the 3D ray connecting the optical center (pinhole) through the image plane pixel maps to the exact same image location, making depth unobservable from a single vantage point.
[01:11:17](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=4277s) Recovering 3D Structure from 2D Images
When a three-dimensional world point $P$ is imaged, any point located along the ray passing through the optical center projects to the exact same point $p$ on the image plane. As a result, observing only a single 2D projection leaves the depth along that projection ray completely ambiguous: “Meaning that a point here or a point here or a point here or a point here will give rise exactly to the same projected point in the image plane.” To illustrate this fundamental loss of scale, Prof. Pavone jokes about the quintessential tourist photo taken in Italy: “In other words, if you go to Italy and you take this famous picture, it seems that everyone goes to Pisa, take this image for whatever reason. In principle, you can really really say if the Pisa tower is bigger or smaller than this person.” While human observers immediately understand that the person is in the foreground and the Leaning Tower of Pisa is far off in the background, this reasoning relies on high-level semantic context—recognizing people and familiar architecture—rather than raw geometry. Without that semantic reasoning, a single 2D photograph cannot convey the absolute scale of the scene.
To bridge this gap and recover 3D structure (depth) from planar images, four primary methods are available: - **Semantic Understanding & Landmarks:** Recognizing known objects and scene priors to infer scale (a technique extending beyond the immediate scope of this lecture). - **Depth from Focus:** Capturing images across focal settings to determine depth using the thin lens equation once optimal sharpness is achieved. - **Stereo Vision:** Utilizing two cameras separated by a known baseline (relative translation and rotation) with known camera calibration matrices to compute depth via triangulation. - **Structure from Motion (SfM):** Capturing multiple images at different points in time from moving viewpoints to reconstruct the geometry of the scene.
```mermaid flowchart TD accTitle: Approaches to Recovering 3D Scene Structure accDescr: Flowchart categorizing the four main methods for recovering depth from 2D image data.
A["Recovering 3D Structure"] --> B["Semantic Priors"] A --> C["Depth from Focus"] A --> D["Stereo Vision"] A --> E["Structure from Motion"]
B --> B1["Landmarks & Object Scale"] C --> C1["Thin Lens Equation on Peak Sharpness"] D --> D1["Two Synchronized Cameras via Triangulation"] E --> E1["Sequential Views over Time"] ```
---
[01:13:32](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=4412s) Depth from Focus and the Concept of Stereo Triangulation
Prof. Pavone first explores depth from focus, describing it as conceptually simple but practically inconvenient: “The depth from focus idea is fairly simple but very cumbersome. So most of the times this is not used.” Under this method, an image sensor's focal distance is adjusted until a given feature appears as sharp as possible. Reaching peak focus identifies the precise image distance ($z_v$), allowing the 3D scene depth ($Z$) to be calculated using the thin lens equation ($1/f = 1/Z + 1/z_v$), provided the lens focal length $f$ is known. However, having to continuously adjust focus point-by-point makes the approach too tedious for most dynamic robotics tasks.
Instead, standard robotic perception relies predominantly on stereo vision—mirroring human binocular vision—or structure from motion. Stereo vision employs two synchronized cameras separated by a baseline to observe the world simultaneously. Because the two viewpoints are offset, corresponding image points exhibit disparity (pixel differences). Triangulating these points resolves the ray ambiguity inherent to single-camera imaging: - A single camera only establishes that a 3D point $P$ lies along an infinite line projecting back from its image coordinate $p$. - A second camera observes corresponding projection $p'$, defining a second ray originating from its own optical center. - Provided the relative pose (rotation and translation) between the two camera coordinate frames and their intrinsic matrices are calibrated, the true 3D point $P$ is determined by the geometric intersection of these two rays.
---
[01:16:15](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=4575s) Practical Triangulation, Reprojection Error, and Stereo Matching
In practice, physical sensor noise, pixel quantization, and calibration inaccuracies prevent the two back-projected rays from perfectly intersecting in 3D space: “In principle they should so if our model was perfect they should intersect a capital P and that's what we would do for triangulation but in general they may not.” Rather than seeking an exact intersection, practitioners formulate depth estimation as an optimization problem minimizing reprojection error. The algorithm searches for an estimated 3D point $Q$ whose simulated forward projections onto both camera planes lie as close as possible to the observed pixel coordinates $p$ and $p'$.
```mermaid flowchart LR accTitle: Stereo Triangulation and Reprojection Error accDescr: Diagram illustrating stereo triangulation and the optimization of reprojection error under noise.
subgraph Cameras["Stereo Rig Setup"] C1["Camera 1 (Left)"] C2["Camera 2 (Right)"] end
subgraph Observations["Observed Image Points"] P1["Point p"] P2["Point p'"] end
subgraph Reconstruction["3D Optimization"] Q["Estimate 3D Point Q"] E["Minimize Reprojection Error: ||p - proj(Q)|| + ||p' - proj'(Q)||"] end
C1 --> P1 C2 --> P2 P1 --> Q P2 --> Q Q --> E ```
Beyond numerical ray alignment, the core practical bottleneck in stereo vision is the correspondence problem: correctly matching a feature point $p$ in the first image with its counterpart $p'$ in the second. Prof. Pavone notes: “One of the challenges to stereo vision is how do you know that the point P here corresponds to this point P prime here. That's why it's very important to find feature that is very distinctive so you can make these correspondences.” He mentions that stereo matching relies on geometric and structural constraints (such as epipolar geometry) to search for matches efficiently. Concluding the session slightly over time, he announces that the deeper mathematical treatment of stereo vision and structure from motion will continue in Friday's graduate-level lecture, apologizing with a smile: “So yeah, two minutes late. Sorry but see you tomorrow.”
## Notable quotes > [01:13:32](https://www.youtube.com/watch?v=QyG0PTgLBxQ&t=4412s) The depth from focus idea is fairly simple but very cumbersome. So most of the times this is not used. — Prof. Marco Pavone
## Mentioned Marco Pavone, NASA, NASA Jet Propulsion Laboratory, NVIDIA, Mars rovers, NumPy, Leaning Tower of Pisa
## Video description For more information about Stanford’s graduate programs, visit: https://online.stanford.edu/graduate-education
Lecture 9 — Camera Models and Camera Calibration
Note: This lecture was recorded as part of the 2019 edition of the course. Course content, structure, assignments, and other materials may have changed since this recording. The course links below point to the most recent edition and may therefore differ from what is presented in the video.
Read the companion textbook, Principles of Robot Autonomy, free online: https://porabook.com
Follow along with the latest course schedule and syllabus: https://stanfordasl.github.io/PoRA-I
Speaker: Prof. Marco Pavone
Dr. Marco Pavone is an Associate Professor of Aeronautics and Astronautics at Stanford University and a Senior Director of Autonomous Vehicle Research at NVIDIA. Prior to joining Stanford, he was a Research Technologist in the Robotics Section at NASA’s Jet Propulsion Laboratory. Dr. Pavone received his Ph.D. in Aeronautics and Astronautics from the Massachusetts Institute of Technology in 2010. His research focuses on the analysis, design, and control of autonomous systems, with particular emphasis on self-driving cars, autonomous aerospace vehicles, and future mobility systems. He has been recognized with numerous awards, including the Presidential Early Career Award for Scientists and Engineers from President Barack Obama, the Office of Naval Research Young Investigator Award, the NSF CAREER Award, the NASA Early Career Faculty Award, the IEEE Kiyo Tomiyasu Award, the CSS Award for Technical Excellence in Aerospace Control, and the Early-Career Spotlight Award from the Robotics Science and Systems Foundation.
Full playlist: https://www.youtube.com/playlist?list=PLR9iNyexfIkk
#StanfordOnline #RobotAutonomy #Robotics #PhysicalAI
[Source](https://www.youtube.com/watch?v=QyG0PTgLBxQ)