SLAM stack for dimos. Rust only: the C++ cuVSLAM fork, its extern-"C" shim, and the per-platform SDK packaging live in cu_vslam_rs.
rust/— thedim_slamlibrary crate: cuVSLAM visual odometry (via thecu_vslam_rscrate) and an error-state Kalman fusion filter. Both cores are plain synchronous Rust over plain Rust types, owning no transport or threads, so anything can drive them; dimos supplies its own LCM wrapper. NeedsCUVSLAM_SDK_DIR(a dir withinclude/cuvslam/cuvslam2.handlib/libcuvslam.*) to build.flake.nix— re-exports the cuVSLAM SDKs this arch can run assdk-<variant>(x86_64-cuda12andx86_64-cuda13on x86 linux,orinandthoron arm linux,metalon arm macOS), and a devShell withCUVSLAM_SDK_DIRalready set to this machine's default.
use dim_slam::{FusionCore, OdometryFusionConfig, SourceConfig};
let mut fusion = FusionCore::new(OdometryFusionConfig {
odom_sources: vec![SourceConfig {
parent_frame_id: "visual_odom".into(),
child_frame_id: "base_link".into(),
pose_variances: [1e-4; 6],
..Default::default()
}],
..Default::default()
});
fusion.handle_source(&visual_odometry);
if let Some(estimate) = fusion.maybe_publish() { /* estimate.pose */ }A binary that links this crate has to embed the SDK's rpath itself; cargo does
not pass rustc-link-arg down from a dependency's build script.