Blog

Feature-based and direct visual SLAM, explainedGiải thích SLAM thị giác dựa trên đặc trưng và trực tiếp

Every visual SLAM system has to decide what to measure in an image: where keypoints are, or how bright pixels are. This post explains both families, lets you try their errors, and maps key systems from MonoSLAM to MASt3R-SLAM.Mọi hệ SLAM thị giác đều phải chọn đo gì trên ảnh: vị trí các điểm đặc trưng, hay độ sáng của các điểm ảnh. Bài viết này giải thích cả hai họ, cho bạn thử hai loại sai số và vẽ bản đồ hệ thống tiêu biểu từ MonoSLAM đến MASt3R-SLAM.

What every visual SLAM system doesMọi hệ SLAM thị giác đều làm gì

A visual SLAM system estimates where the camera is and builds a map of the scene at the same time. Most systems split the work into parts that run together: tracking estimates the pose of each new frame against the map, local mapping adds keyframes and refines nearby poses and points with optimization, and loop closing recognizes places seen before and removes the drift that built up on the way.

Một hệ SLAM thị giác vừa ước lượng camera đang ở đâu vừa xây dựng bản đồ của cảnh. Phần lớn hệ thống chia công việc thành các phần chạy song song: theo dõi (tracking) ước lượng tư thế của mỗi khung hình mới so với bản đồ, lập bản đồ cục bộ thêm khung hình khóa và tinh chỉnh các tư thế, các điểm lân cận bằng tối ưu, còn đóng vòng (loop closing) nhận ra những nơi đã đi qua và loại bỏ sai số trôi tích lũy trên đường.

Feature-based and direct systems share this structure. They differ in what the front-end measures in an image: feature-based systems measure where keypoints are; direct systems measure how bright pixels are. Everything else follows from that choice. Switch between the two:

Hệ dựa trên đặc trưng và hệ trực tiếp có chung cấu trúc này. Khác biệt nằm ở thứ mà phần front-end đo trên ảnh: hệ dựa trên đặc trưng đo vị trí của các điểm đặc trưng; hệ trực tiếp đo độ sáng của các điểm ảnh. Mọi thứ khác đều bắt nguồn từ lựa chọn đó. Hãy chuyển giữa hai cách:

1. Front-end1. Front-end Detect keypoints (FAST, ORB) and compute a descriptor for each.Phát hiện điểm đặc trưng (FAST, ORB) và tính bộ mô tả cho từng điểm. Select pixels with enough image gradient; no descriptors.Chọn các điểm ảnh có đủ gradient; không cần bộ mô tả.
2. Data association2. Liên kết dữ liệu Match descriptors to the map and reject outliers with RANSAC.So khớp bộ mô tả với bản đồ và loại điểm ngoại lai bằng RANSAC. Implicit: project each pixel with its depth and compare brightness.Ngầm định: chiếu mỗi điểm ảnh theo độ sâu của nó rồi so sánh độ sáng.
3. Tracking3. Theo dõi Pose from 2D–3D matches (PnP), refined on the reprojection error.Tư thế từ các cặp khớp 2D–3D (PnP), tinh chỉnh theo sai số chiếu lại. Pose by image alignment on the photometric error, coarse to fine.Tư thế bằng căn chỉnh ảnh theo sai số trắc quang, từ thô đến tinh.
4. Local mapping4. Lập bản đồ cục bộ Bundle adjustment of keyframe poses and 3D points.Tối ưu bó các tư thế khung hình khóa và điểm 3D. Windowed photometric optimization of poses, depths and brightness.Tối ưu trắc quang trong cửa sổ cho tư thế, độ sâu và độ sáng.
5. Loop closing5. Đóng vòng Bag of words on the same descriptors, then pose-graph or global optimization.Túi từ trên chính các bộ mô tả đó, rồi tối ưu đồ thị tư thế hoặc tối ưu toàn cục. Needs extra cues, for example descriptors added to selected points (LDSO).Cần thêm thông tin, ví dụ bộ mô tả gắn vào các điểm được chọn (LDSO).

Feature-based SLAM: match keypoints, minimize the reprojection errorSLAM dựa trên đặc trưng: so khớp điểm, tối thiểu sai số chiếu lại

A feature-based (or indirect) system first turns each image into a small set of keypoints, and then forgets the pixels:

  1. Detect corners that look different from their surroundings, for example FAST corners as used by ORB.
  2. Describe each keypoint with a short code that can be recognized in another image; ORB uses a 256-bit binary descriptor, compared with the Hamming distance.
  3. Match descriptors between frames or against map points, and reject wrong matches with RANSAC: PnP for the pose against the map, or the essential matrix to initialize a monocular map.
  4. Optimize: bundle adjustment moves poses and 3D points to make the reprojection errors small, that is, the pixel distance between where a point is observed and where the current estimate projects it.

Một hệ dựa trên đặc trưng (hay gián tiếp) trước hết biến mỗi ảnh thành một tập nhỏ các điểm đặc trưng, rồi bỏ qua các điểm ảnh còn lại:

  1. Phát hiện các góc trông khác biệt so với xung quanh, ví dụ góc FAST mà ORB sử dụng.
  2. Mô tả mỗi điểm bằng một mã ngắn để nhận ra nó trong ảnh khác; ORB dùng bộ mô tả nhị phân 256 bit, so sánh bằng khoảng cách Hamming.
  3. So khớp bộ mô tả giữa các khung hình hoặc với điểm trên bản đồ, và loại cặp khớp sai bằng RANSAC: PnP để tìm tư thế so với bản đồ, hoặc ma trận thiết yếu (essential matrix) để khởi tạo bản đồ với một camera.
  4. Tối ưu: tối ưu bó (bundle adjustment) dịch chuyển tư thế và điểm 3D để sai số chiếu lại nhỏ nhất, tức khoảng cách tính bằng điểm ảnh giữa vị trí một điểm được quan sát và vị trí mà ước lượng hiện tại chiếu nó lên.

minT, X Σi, j ρ( ‖ uij − π(Ti Xj) ‖² )

uij is keypoint j observed in keyframe i, Xj its 3D point, Ti the camera pose, π the camera projection, and ρ a robust kernel such as Huber that limits the effect of wrong matches.uij là điểm đặc trưng j quan sát được trong khung hình khóa i, Xj là điểm 3D của nó, Ti là tư thế camera, π là phép chiếu của camera, còn ρ là hàm suy giảm bền vững như Huber để hạn chế ảnh hưởng của các cặp khớp sai.

StrengthsĐiểm mạnh

  • A correct match pins the solution even after a large motion: the error grows steadily with the distance from the truth.
  • Descriptors tolerate brightness changes, so exposure changes do little harm.
  • Relocalization and loop closure come almost for free: the same descriptors feed a bag-of-words place recognizer.
  • Mature and well tested; ORB-SLAM3 is the usual reference.
  • Một cặp khớp đúng giữ chặt lời giải ngay cả khi chuyển động lớn: sai số tăng đều theo khoảng cách tới giá trị đúng.
  • Bộ mô tả chịu được thay đổi độ sáng, nên thay đổi phơi sáng ít gây hại.
  • Tái định vị và đóng vòng gần như có sẵn: chính các bộ mô tả đó được dùng cho nhận dạng địa điểm bằng túi từ.
  • Trưởng thành và được kiểm chứng kỹ; ORB-SLAM3 là mốc so sánh thường dùng.

LimitsHạn chế

  • Needs corners: low texture, motion blur and repeated patterns starve or confuse it.
  • Uses a small fraction of the pixels and gives a sparse map.
  • Detection and description cost time on every frame.
  • Cần có góc: vùng ít kết cấu, ảnh nhòe do chuyển động và hoa văn lặp lại làm nó thiếu hoặc nhầm điểm.
  • Chỉ dùng một phần nhỏ điểm ảnh và cho bản đồ thưa.
  • Phát hiện và mô tả điểm tốn thời gian ở mỗi khung hình.

Direct SLAM: align intensities, minimize the photometric errorSLAM trực tiếp: căn chỉnh cường độ, tối thiểu sai số trắc quang

A direct method skips keypoints and descriptors. It takes pixels p of a reference frame i, back-projects them with their depth dp, moves them into the new frame j with the current pose estimate, and compares the brightness there with the brightness at p:

Phương pháp trực tiếp bỏ qua điểm đặc trưng và bộ mô tả. Nó lấy các điểm ảnh p của khung tham chiếu i, chiếu ngược chúng ra không gian theo độ sâu dp, đưa sang khung mới j theo ước lượng tư thế hiện tại, rồi so sánh độ sáng ở đó với độ sáng tại p:

rp = Ij[ π( Tji π−1(p, dp) ) ] − Ii[p]

The pose (and, in a sliding window, the depths) that make these residuals small is the estimate. Methods differ in how many pixels they use: all of them (dense, as in DTAM), those with high gradient (semi-dense, as in LSD-SLAM), or a few thousand well-spread points with gradient (sparse, as in DSO).

Tư thế (và trong cửa sổ trượt, cả độ sâu) làm các phần dư này nhỏ nhất chính là ước lượng. Các phương pháp khác nhau ở số điểm ảnh sử dụng: tất cả (dày đặc, như DTAM), những điểm có gradient cao (bán dày đặc, như LSD-SLAM), hoặc vài nghìn điểm có gradient phân bố đều (thưa, như DSO).

The whole idea rests on brightness constancy: the same point looks equally bright in both images. Real cameras break it, through exposure changes, vignetting and a non-linear response. DSO therefore uses a photometrically calibrated camera and gives every frame an exposure time t and affine brightness parameters a, b:

Toàn bộ ý tưởng dựa trên giả thiết độ sáng không đổi: cùng một điểm trông sáng như nhau trong cả hai ảnh. Camera thực phá vỡ giả thiết này qua thay đổi phơi sáng, hiện tượng tối góc (vignetting) và hàm đáp ứng phi tuyến. Vì vậy DSO dùng camera đã hiệu chuẩn trắc quang và gán cho mỗi khung hình thời gian phơi sáng t cùng các tham số độ sáng affine a, b:

rp = ( Ij[p′] − bj ) − ( tj eaj ⁄ ti eai ) ( Ii[p] − bi )

StrengthsĐiểm mạnh

  • Uses edges and weak texture where corners are rare.
  • Intensity gradients give sub-pixel precision from many pixels at once.
  • Can produce semi-dense or dense maps, and skips descriptor computation.
  • Tận dụng cạnh và vùng kết cấu yếu, nơi ít có góc.
  • Gradient cường độ cho độ chính xác dưới điểm ảnh từ rất nhiều điểm cùng lúc.
  • Có thể tạo bản đồ bán dày đặc hoặc dày đặc, và không phải tính bộ mô tả.

LimitsHạn chế

  • Narrow convergence basin: it needs a good initial guess, small motion between frames and coarse-to-fine image pyramids.
  • Sensitive to exposure changes, rolling shutter and calibration errors.
  • No descriptors, so relocalization and loop closure need extra machinery.
  • Vùng hội tụ hẹp: cần ước lượng ban đầu tốt, chuyển động nhỏ giữa các khung hình và kim tự tháp ảnh từ thô đến tinh.
  • Nhạy với thay đổi phơi sáng, màn trập cuộn (rolling shutter) và sai số hiệu chuẩn.
  • Không có bộ mô tả, nên tái định vị và đóng vòng cần thêm cơ chế khác.

Try it: the two errors on one row of pixelsThử nghiệm: hai loại sai số trên một hàng điểm ảnh

This toy uses one row of 320 pixels as the image. The second frame is the same row moved by the camera motion, and possibly brighter or darker. The plots show the error each family minimizes as a function of the guessed motion; the open circle is the start (zero motion, as for a tracker without a motion prior) and the filled dot is where gradient descent stops.

Mô hình đơn giản này dùng một hàng 320 điểm ảnh làm ảnh. Khung thứ hai là cùng hàng đó bị dịch theo chuyển động của camera, có thể sáng hơn hoặc tối hơn. Hai biểu đồ cho thấy sai số mà mỗi họ tối thiểu theo chuyển động phỏng đoán; vòng tròn rỗng là điểm xuất phát (chuyển động bằng 0, như một bộ theo dõi không có dự đoán chuyển động) và chấm đặc là nơi phương pháp giảm gradient dừng lại.

Try:Thử:

Top: frame 1; bottom: frame 2, both at the chosen pyramid level. Ticks are keypoints and lines are descriptor matches (red if wrong).Trên: khung 1; dưới: khung 2, cả hai ở mức kim tự tháp đã chọn. Vạch nhỏ là điểm đặc trưng, đường nối là cặp khớp theo bộ mô tả (màu đỏ nếu sai).

  • Basin. At full resolution the photometric error has many local minima, and descent finds motions up to about 11 px in this row; matched keypoints find every motion.
  • Pyramids. Blurring, as on a coarser pyramid level, removes fine detail and widens the basin (about 31 px at level 1, the whole range at level 2). Direct methods start coarse and refine at finer levels.
  • Exposure. A darker frame moves the direct minimum by about half a pixel and leaves an error that cannot reach zero; modeling brightness fixes the minimum. Here it also narrows the basin, because a and b can absorb part of a wrong alignment, which is one reason DSO puts priors on them.
  • Texture. On a smooth surface there are no corners, so the feature front-end loses track, while the direct error still has a clear minimum from weak gradients.
  • Vùng hội tụ. Ở độ phân giải đầy đủ, sai số trắc quang có nhiều cực tiểu cục bộ, và phương pháp giảm gradient chỉ tìm được chuyển động tới khoảng 11 px trên hàng này; các điểm đặc trưng đã khớp tìm được mọi chuyển động.
  • Kim tự tháp ảnh. Làm mờ, như ở mức kim tự tháp thô hơn, xóa chi tiết nhỏ và mở rộng vùng hội tụ (khoảng 31 px ở mức 1, toàn bộ dải ở mức 2). Phương pháp trực tiếp bắt đầu ở mức thô rồi tinh chỉnh dần ở mức mịn hơn.
  • Phơi sáng. Khung tối hơn làm cực tiểu của phương pháp trực tiếp lệch khoảng nửa điểm ảnh và để lại sai số không thể về 0; mô hình hóa độ sáng sửa được cực tiểu. Ở đây nó cũng làm vùng hội tụ hẹp lại, vì a và b có thể "hấp thụ" một phần căn chỉnh sai, đó là một lý do DSO đặt tiền nghiệm cho chúng.
  • Kết cấu. Trên bề mặt trơn không có góc, nên front-end đặc trưng mất dấu, trong khi sai số trực tiếp vẫn có cực tiểu rõ ràng nhờ các gradient yếu.

A teaching toy, not a benchmark: one row of pixels, pure translation, no noise model. Real systems add motion priors, robust weights and many more constraints.Đây là mô hình minh họa, không phải phép đo hiệu năng: một hàng điểm ảnh, chỉ có tịnh tiến, không có mô hình nhiễu. Hệ thống thực còn có dự đoán chuyển động, trọng số bền vững và nhiều ràng buộc khác.

In between: semi-direct, hybrid and learned systemsỞ giữa: hệ bán trực tiếp, lai và học sâu

Semi-direct. SVO tracks small patches around sparse points by direct image alignment, which is fast and precise for small motions, then refines the patch positions and optimizes poses and points on the reprojection error like a feature-based system.

Bán trực tiếp. SVO theo dõi các mảnh ảnh nhỏ quanh các điểm thưa bằng căn chỉnh ảnh trực tiếp, vừa nhanh vừa chính xác với chuyển động nhỏ, rồi tinh chỉnh vị trí các mảnh và tối ưu tư thế, điểm theo sai số chiếu lại như một hệ dựa trên đặc trưng.

Hybrid. Many systems borrow from both sides: LDSO keeps DSO's direct odometry but adds descriptors to selected points so that it can close loops; Basalt and VINS-Mono track keypoints with optical flow (an intensity-based step) yet optimize reprojection errors.

Lai. Nhiều hệ thống vay mượn từ cả hai phía: LDSO giữ phần đo hành trình trực tiếp của DSO nhưng thêm bộ mô tả cho các điểm được chọn để có thể đóng vòng; Basalt và VINS-Mono theo dõi điểm bằng dòng quang học (một bước dựa trên cường độ) nhưng vẫn tối ưu sai số chiếu lại.

Learned. Recent learned systems blur the line further. DROID-SLAM predicts dense optical flow, much like per-pixel alignment, and then optimizes poses and depths with a differentiable bundle adjustment over those correspondences; DPVO and DPV-SLAM do the same with sparse patches. MASt3R-SLAM and VGGT-SLAM start from 3D foundation models that predict point maps directly (see our post on foundation models and world models for SLAM).

Học sâu. Các hệ học sâu gần đây còn làm mờ ranh giới hơn nữa. DROID-SLAM dự đoán dòng quang học dày đặc, khá giống căn chỉnh theo từng điểm ảnh, rồi tối ưu tư thế và độ sâu bằng một lớp tối ưu bó khả vi trên các tương ứng đó; DPVO và DPV-SLAM làm điều tương tự với các mảnh ảnh thưa. MASt3R-SLAM và VGGT-SLAM xuất phát từ các mô hình nền tảng 3D dự đoán trực tiếp bản đồ điểm (xem bài mô hình nền tảng và mô hình thế giới cho SLAM).

Side by sideSo sánh song song

Feature-basedDựa trên đặc trưng DirectTrực tiếp Learned correspondence + BATương ứng học được + tối ưu bó
MeasuresĐo gì Keypoint positionsVị trí điểm đặc trưng Pixel intensitiesCường độ điểm ảnh Predicted flow or 3D pointsDòng quang học hoặc điểm 3D dự đoán
ErrorSai số Reprojection (pixels)Chiếu lại (điểm ảnh) Photometric (brightness)Trắc quang (độ sáng) Reprojection on predicted matchesChiếu lại trên các cặp khớp dự đoán
ConvergenceHội tụ Wide, if matches are rightRộng, nếu cặp khớp đúng Narrow: needs pyramids and a good guessHẹp: cần kim tự tháp ảnh và ước lượng tốt Wide: the network proposes the matchesRộng: mạng đề xuất cặp khớp
Brightness changesThay đổi độ sáng TolerantChịu được Needs photometric calibration and a brightness modelCần hiệu chuẩn trắc quang và mô hình độ sáng Learned from dataHọc từ dữ liệu
Low texture, blurÍt kết cấu, ảnh nhòe WeakYếu Better: uses edges and weak gradientsTốt hơn: dùng cạnh và gradient yếu Often robustThường bền vững
MapBản đồ Sparse pointsĐiểm thưa Sparse, semi-dense or denseThưa, bán dày đặc hoặc dày đặc Dense depth or patchesĐộ sâu dày đặc hoặc mảnh ảnh
Loop closureĐóng vòng Built in (bag of words)Có sẵn (túi từ) Needs added descriptorsCần thêm bộ mô tả Depends on the systemTùy hệ thống
HardwarePhần cứng CPU, real timeCPU, thời gian thực CPU, real time (sparse)CPU, thời gian thực (bản thưa) Usually a GPUThường cần GPU
ExamplesVí dụ ORB-SLAM3, VINS-Mono, Basalt DSO, LSD-SLAM, DM-VIO DROID-SLAM, DPVO, MASt3R-SLAM

The state of the art in T-RO, RA-L and IJRRHiện trạng nghiên cứu trên T-RO, RA-L và IJRR

The most cited visual SLAM and odometry systems published in the three main robotics journals since 2019:Các hệ SLAM thị giác và đo hành trình được trích dẫn nhiều nhất trên ba tạp chí robot chính từ năm 2019:

The list shows where the field is going: feature-based systems are still the most used (ORB-SLAM3), points and lines and learned detectors make them more robust (PL-SLAM, AirSLAM), direct alignment returns in visual-inertial and LiDAR-visual odometry (DM-VIO, FAST-LIVO2), and event cameras bring direct-style tracking to fast motion and high dynamic range (ESVO, ESVO2).Danh sách cho thấy hướng đi của lĩnh vực: hệ dựa trên đặc trưng vẫn được dùng nhiều nhất (ORB-SLAM3), điểm kết hợp đường thẳng và bộ phát hiện học được giúp chúng bền vững hơn (PL-SLAM, AirSLAM), căn chỉnh trực tiếp trở lại trong đo hành trình thị giác-quán tính và LiDAR-thị giác (DM-VIO, FAST-LIVO2), còn camera sự kiện đưa cách theo dõi kiểu trực tiếp vào chuyển động nhanh và dải động cao (ESVO, ESVO2).

A family tree of visual SLAM systemsCây phả hệ các hệ SLAM thị giác

systemshệ thống
familieshọ
branchesnhánh
yearsgiai đoạn

A selection of influential systems, not a complete list. Pick a family or a system to see what it does and open its paper.Một tuyển chọn các hệ thống có ảnh hưởng, không phải danh sách đầy đủ. Chọn một họ hoặc một hệ thống để xem nó làm gì và mở bài báo.

Over timeTheo thời gian

Which one should you use?Nên dùng loại nào?

  • A safe default for most robots and handheld cameras, with fast motion, changing exposure, or the need to relocalize and reuse maps: a feature-based system such as ORB-SLAM3.
  • Direct methods such as DSO or DM-VIO pay off with a global-shutter camera that is calibrated, ideally photometrically too, smooth motion and scenes with edges but few corners.
  • Add an IMU in either case if you can: it bridges fast motion and gives metric scale to a single camera (VINS-Mono, Basalt, DM-VIO, ORB-SLAM3).
  • Learned systems such as DROID-SLAM or DPV-SLAM are often more robust in hard sequences, at the cost of a GPU and more memory.
  • Lựa chọn an toàn cho phần lớn robot và camera cầm tay, khi chuyển động nhanh, phơi sáng thay đổi, hoặc cần tái định vị và dùng lại bản đồ: một hệ dựa trên đặc trưng như ORB-SLAM3.
  • Phương pháp trực tiếp như DSO hay DM-VIO phát huy tác dụng với camera màn trập toàn cục (global shutter) đã hiệu chuẩn, tốt nhất là cả hiệu chuẩn trắc quang, chuyển động mượt và cảnh có nhiều cạnh nhưng ít góc.
  • Thêm IMU trong cả hai trường hợp nếu có thể: nó giúp vượt qua chuyển động nhanh và cho tỷ lệ thực khi chỉ có một camera (VINS-Mono, Basalt, DM-VIO, ORB-SLAM3).
  • Hệ học sâu như DROID-SLAM hay DPV-SLAM thường bền vững hơn ở các chuỗi khó, đổi lại cần GPU và nhiều bộ nhớ hơn.

Further readingĐọc thêm

Search the website

Type a title, author, topic or keyword.

Ctrl/⌘ K to open Esc to close