公众号[2]-github项目分享-slambook2.rs项目

news/2025/2/14 5:01:15/文章来源:https://www.cnblogs.com/qsbye/p/18714668

项目链接:

  • [https://github.com/ByeIO/slambook2.rs]
  • [https://gitcode.com/QS2002/slambook2_rs]

引言

宝子们,今天给大家安利一个超酷的项目——slambook2的Rust🔥重构版!这可不是普通的代码重构,而是用Rust语言重新实现的SLAM(同时定位与建图)算法,简直太安全了!(≧▽≦)

这个项目提供了超详细的使用说明和开发笔记哦!✨ 宝子们可以用Wasmer运行时直接运行预构建的Wasm二进制文件,只需要几行命令,就能轻松搞定,不用担心编译失败的问题,简直不要太方便啦!(≧ω≦)

快去试试,感受一下Rust的魅力和SLAM算法的好玩吧!一起加油哦!💪💖

项目状态

  • preview 预览版(半成品)

slambook2的rust🔥重构

本项目是对[https://github.com/gaoxiang12/slambook2]的rust重构.
很多bug😂和todo🧾, 有些实现可能比较简略😄.
已经将很多算法用rust重写了.

使用说明

工程目录

  • Cargo.toml : 编译配置文件
  • examples文件夹 : slambook2的1~13章用rust重构的代码
  • src文件夹 : (忽略)
  • deprecated文件夹 : 弃用的zig语言方案
  • assets文件夹 : 代码运行需要用到的资源文件(裁剪过的数据集, 配置文件等)
  • logs文件夹 : 代码运行日志输出(有些文件过大, git忽略了)
  • prebuilt文件夹 : 预构建wasm二进制
  • python文件夹 : 验证效果的python脚本, python结果应该接近原版cpp代码
  • reference文件夹 : 参考代码
  • result文件夹 : 代码运行输出文件
  • static文件夹 : 修改的依赖库以及自制的库
  • target文件夹 : 编译输出
  • tools文件夹 : 小工具(空的)
  • vendor文件夹 : 编译项目所需的所有依赖包
  • 问题文件夹 : 开发日志

预构建文件

有1000多个crate需要编译, 有可能会由于各种原因编译失败,因而提供预构建的wasm版本,理论上支持全平台.
使用cargo build --target wasm32-wasip1-threads --release编译

  1. 安装wasmer运行时
    (理论上也支持其他运行时,例如wasmedge, wazero, wamr), 没有测试.
    参考教程[https://github.com/container2wasm/container2wasm]
# macOS/Linux
curl https://get.wasmer.io -sSfL | sh
curl https://get.wasmer.io -sSfL | sh -s "v4.3.6"
# Windows
iwr https://win.wasmer.io -useb | iex
$v="v4.3.6"; iwr https://win.wasmer.io -useb | iex
  1. 使用wasmer运行时运行wasm二进制(仅测试了4.3.6版本)
# --mapdir 本机目录:虚拟目录
wasmer run --dir `pwd` "./prebuilt/ch13-myslam.wasm" -- --config-file "`pwd`/examples/ch13-myslam/assets/default.yaml"
wasmer run ./prebuilt/ch13-myslam.wasm -- --help

输出:

输入的配置文件路径为: /Users/workspace/Desktop/projects/ByeIO/software/exp65-rust-ziglang-slambook2/examples/ch13-myslam/assets/default.yaml功能还没有实现完全, 勉强中...(ง •̀_•́)ง...,
程序即将退出!Usage: ch13-myslam.wasm [OPTIONS]Options:-c, --config-file <CONFIG_FILE>  配置文件路径 [default: ./assets/default.yaml]-h, --help                       Print help-V, --version                    Print version

开发笔记(博客)

  1. 折腾笔记[5]-使用rust解矩阵方程
  2. 折腾笔记[6]-使用rust绘制三维画面
  3. 折腾笔记[7]-使用rust进行李代数计算
  4. 折腾笔记[8]-使用rust去除灰度图的畸变
  5. 折腾笔记[9]-使用rust通过图优化进行曲线拟合
  6. 折腾笔记[10]-使用rust进行ORB角点检测
  7. 折腾笔记[11]-使用rust进行直接法视觉里程计估计
  8. 折腾笔记[12]-使用rust进行位姿图优化
  9. 折腾笔记[13]-使用rust对图像建立词袋
  10. 折腾笔记[14]-使用rust进行深度估计

编译

编译器版本

测试编译通过的编译器:

rustc --version; rustup --version; cargo --version
>rustc 1.83.0-nightly (14f303bc1 2024-10-04)
>rustup 1.27.1 (54dd3d00f 2024-04-24)
>info: This is the version for the rustup toolchain manager, not the rustc compiler.
>info: The currently active `rustc` version is `rustc 1.83.0-nightly (14f303bc1 2024-10-04)`
>cargo 1.83.0-nightly (80d82ca22 2024-09-27)

运行示例

cargo run --example ch3-coordinateTransform
cargo run --example ch3-useEigen-eigenMatrix
cargo run --example ch3-useEigen-linearEqSolution
cargo run --example ch3-useEigen-matrixExtractAssign
cargo run --example ch3-useGeometry
cargo run --example ch3-visualizeGeometry
cargo run --example ch3-plotTrajectory
cargo run --example ch4-trajectoryError
cargo run --example ch4-useSophus
cargo run --example ch4-useSophus_factrs
cargo run --example ch5-imageBasics-imageBasics
cargo run --example ch5-imageBasics-undistortImage
cargo run --example ch5-rgbd-joinMap
cargo run --example ch5-stereo-stereoVision
cargo run --example ch6-ceresCurveFitting
cargo run --example ch6-gaussNewton
cargo run --example ch6-g2oCurveFitting
cargo run --example ch7-orb_cv
cargo run --example ch7-orb_self
cargo run --example ch7-pose_estimation_2d2d
cargo run --example ch7-pose_estimation_3d2d
cargo run --example ch7-pose_estimation_3d3d
cargo run --example ch7-triangulation
cargo run --example ch8-direct_method_multi_layer
cargo run --example ch8-direct_method_single_layer
cargo run --example ch8-optical_flow
cargo run --example ch9-bundle_adjustment_ceres
cargo run --example ch9-bundle_adjustment_g2o
cargo run --example ch10-pose_graph_g2o_SE3
cargo run --example ch10-pose_graph_g2o_gs_rs
cargo run --example ch10-pose_graph_g2o_lie_algebra
cargo run --example ch11-feature_training
cargo run --example ch11-gen_vocab_large
cargo run --example ch11-loop_closure
cargo run --example ch12-dense_RGBD-octomap_mapping
cargo run --example ch12-dense_RGBD-pointcloud_mapping
cargo run --example ch12-dense_RGBD-surfel_mapping
cargo run --example ch12-dense_mono-dense_mapping
cargo run --example ch12-dense_mono-dense_mapping_image
cargo run --example ch13-myslam

使用本地crate

库文件在vendor文件夹.

  1. 将库文件离线到本地:
cargo vendor
  1. 使用本地库文件
    .cargo/config.toml
[source.crates-io]
replace-with = "vendored-sources"[source.vendored-sources]
directory = "vendor"
  1. 如果遇到编译时有关库文件的报错直接修改vendor文件夹内的库文件即可.

效果

输出结果在logs文件夹和result文件夹

  1. examples/ch8-direct_method_multi_layer.rs
结果图
  1. examples/ch11-loop_closure.rs
提取训练图片的特征...
Extracting keypoint descriptors from "assets/ch11-data/8.png"
Extracting keypoint descriptors from "assets/ch11-data/9.png"
Extracting keypoint descriptors from "assets/ch11-data/10.png"
Extracting keypoint descriptors from "assets/ch11-data/4.png"
Extracting keypoint descriptors from "assets/ch11-data/5.png"
Extracting keypoint descriptors from "assets/ch11-data/7.png"
Extracting keypoint descriptors from "assets/ch11-data/6.png"
Extracting keypoint descriptors from "assets/ch11-data/2.png"
Extracting keypoint descriptors from "assets/ch11-data/3.png"
Extracting keypoint descriptors from "assets/ch11-data/1.png"
检测到 1000 个 ORB 特征。
创建词汇表...词汇表 = Vocabulary {Word/Leaf Nodes: 506,Other Nodes: 82,Levels: 3,Branching Factor: 9,Total Training Features: 1000,Min Word Cluster Size: 1,Max Word Cluster Size: 25,Mean Word Cluster Size: 1,Median Word Cluster Size: 1,
}
保存词汇表...
加载词汇表...
词汇表: Vocabulary {Word/Leaf Nodes: 506,Other Nodes: 82,Levels: 3,Branching Factor: 9,Total Training Features: 1000,Min Word Cluster Size: 1,Max Word Cluster Size: 25,Mean Word Cluster Size: 1,Median Word Cluster Size: 1,
}
读取图片...
检测 ORB 特征...
比较图片与图片...
当前 block id: 7, 最大 block 数: 83
当前 block id: 60, 最大 block 数: 83
当前 block id: 1, 最大 block 数: 83
当前 block id: 10, 最大 block 数: 83
当前 block id: 5, 最大 block 数: 83
当前 block id: 50, 最大 block 数: 83
当前 block id: 7, 最大 block 数: 83
当前 block id: 61, 最大 block 数: 83
当前 block id: 5, 最大 block 数: 83
当前 block id: 51, 最大 block 数: 83
当前 block id: 3, 最大 block 数: 83
当前 block id: 31, 最大 block 数: 83
当前 block id: 2, 最大 block 数: 83
当前 block id: 19, 最大 block 数: 83
当前 block id: 9, 最大 block 数: 83
当前 block id: 77, 最大 block 数: 83
当前 block id: 1, 最大 block 数: 83
当前 block id: 15, 最大 block 数: 83
当前 block id: 1, 最大 block 数: 83
当前 block id: 16, 最大 block 数: 83
当前 block id: 3, 最大 block 数: 83
当前 block id: 31, 最大 block 数: 83
当前 block id: 2, 最大 block 数: 83
当前 block id: 19, 最大 block 数: 83
当前 block id: 4, 最大 block 数: 83
当前 block id: 39, 最大 block 数: 83
当前 block id: 5, 最大 block 数: 83
当前 block id: 47, 最大 block 数: 83
当前 block id: 4, 最大 block 数: 83
当前 block id: 38, 最大 block 数: 83
当前 block id: 3, 最大 block 数: 83
当前 block id: 31, 最大 block 数: 83
当前 block id: 3, 最大 block 数: 83
当前 block id: 31, 最大 block 数: 83
当前 block id: 2, 最大 block 数: 83
当前 block id: 19, 最大 block 数: 83
当前 block id: 1, 最大 block 数: 83
当前 block id: 12, 最大 block 数: 83
当前 block id: 6, 最大 block 数: 83
当前 block id: 52, 最大 block 数: 83
当前 block id: 5, 最大 block 数: 83
当前 block id: 49, 最大 block 数: 83
当前 block id: 1, 最大 block 数: 83
当前 block id: 10, 最大 block 数: 83
当前 block id: 2, 最大 block 数: 83
当前 block id: 25, 最大 block 数: 83
当前 block id: 2, 最大 block 数: 83
当前 block id: 21, 最大 block 数: 83
当前 block id: 2, 最大 block 数: 83
当前 block id: 21, 最大 block 数: 83
当前 block id: 7, 最大 block 数: 83
当前 block id: 61, 最大 block 数: 83
当前 block id: 5, 最大 block 数: 83
当前 block id: 47, 最大 block 数: 83
当前 block id: 2, 最大 block 数: 83
当前 block id: 22, 最大 block 数: 83
当前 block id: 3, 最大 block 数: 83
当前 block id: 31, 最大 block 数: 83
当前 block id: 1, 最大 block 数: 83
当前 block id: 10, 最大 block 数: 83
当前 block id: 2, 最大 block 数: 83
当前 block id: 19, 最大 block 数: 83
当前 block id: 1, 最大 block 数: 83
当前 block id: 16, 最大 block 数: 83
当前 block id: 2, 最大 block 数: 83
当前 block id: 27, 最大 block 数: 83
当前 block id: 5, 最大 block 数: 83
当前 block id: 47, 最大 block 数: 83
当前 block id: 7, 最大 block 数: 83
当前 block id: 60, 最大 block 数: 83
当前 block id: 8, 最大 block 数: 83
当前 block id: 67, 最大 block 数: 83
当前 block id: 8, 最大 block 数: 83
当前 block id: 71, 最大 block 数: 83
当前 block id: 1, 最大 block 数: 83
当前 block id: 11, 最大 block 数: 83
当前 block id: 1, 最大 block 数: 83
当前 block id: 13, 最大 block 数: 83
当前 block id: 4, 最大 block 数: 83
当前 block id: 39, 最大 block 数: 83
当前 block id: 6, 最大 block 数: 83
当前 block id: 52, 最大 block 数: 83
当前 block id: 8, 最大 block 数: 83
当前 block id: 69, 最大 block 数: 83
当前 block id: 8, 最大 block 数: 83
当前 block id: 68, 最大 block 数: 83

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/883558.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[2025.2.10 JavaWeb学习]Ajax/Axios Vue-cli Nginx

Ajax 概念Asynchronous JavaScript And XML,异步的JS和XML 作用:数据交换:通过Ajax可以给服务器发送请求,并获取服务器响应的数据 异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术Axios 基本概念对原生的Ajax进行了封装 基本使用:前端…

【枚举】遍历矩阵对角线的方法

矩阵为\(n*m\)型,\(n\)为行,\(m\)为列,\(n+m-1\)为对角线数量//撇对角线for (int i = 0; i < n + m - 1; i++){for (int j = max(0, i - m + 1); j <= min(i, n - 1); j++){cout << g[j][i - j] << ;}cout << \n;}//捺对角线for (int i = 1 - m; i…

Typora使用指南

Typora 使用方法 快捷键 标题 +空格=一级标题 +空格=二级标题 +空格=三级标题 最多支持6级 字体 粗体:字体两边+两个** 斜体:字体两边+一个* 斜体加粗:字体两边+三个*** 划横线删除:字体两边+两个~~ 引用:文本前>加 空格 注意引用只能在首字符。例如只能在首字符进行引…

图解支付系统订单号设计与最佳实践

本文主要讲清楚支付系统订单号(或业务ID)各种设计方案对比,各子域的订单号(或业务ID)为什么要统一规范,以及最佳实践。最后还会简单分析微信支付和支付宝的对客订单号的组成差异。 假如你也好奇为什么有了数据库自增ID外还需要业务ID,或者想了解如何在业务ID中编织进业务…

Windows 网络存储ISCSI

本文介绍网络存储ISCSI的主要知识点以及如何通过代码控制挂载。 Windows网络存储有很多协议,我目前学习、稍微有了解的是FTP、SMB、ISCSI,FTP、SMB类似可以用来添加共享文件夹,或者添加映射网络驱动器:我使用FTP都是先建个映射,再将内部的文件夹固定到快速访问。平时使用效…

2022-03-17-hello-world

📌 Thinking No emotion; no journal; less platitude I have a habit of writing diaries in high school, to decrease the pressure and anxiety. So blog inherit it. As time going by, I realize I have to make a review of my life, in every single post, and its r…

2023-01-01-one-wisdom

2023 新年伊始,整理 2022 的陳年筆記時發現有很多不知名,但是又捨不得丟棄的句子,想着乾脆把他們做成引用得了。連着建倉庫,設計頁面,寫腳本一套下來也沒花太多時間,一個簡單的靜態自動部署的網站就建好了: One[1].Tech stackJekyll Github ActionHighlightsEvery single…

小米 R3G 路由器(Pandavan)实现网络打印机功能

通过小米 R3G 路由器的 USB 3.0 接口和 Pandavan 固件,轻松将没有网络打印功能的打印机接入网络。本文详细讲解如何通过无线桥接、设置内外网、端口映射和启用打印服务,让 PC 通过 TCP/IP 方式添加打印机,实现多设备共享打印,解决传统共享打印的高耗电问题。小米 R3G 路由器…

[MoE] Tutel源码解读

[MoE] Tutel源码解读 前言 最近MoE变得火了起来。但我在和别人讨论MoE时,总有一些不清楚的地方,就算读了论文也不确定内部到底是怎么实现的。于是我决定还是要看一看已有的代码,看看每个细节究竟都是怎么实现的。 作为实现参考,Tutel这篇工作就很不错。最近的工作基本都拿T…

Java笔记-15、Web后端基础 分层解耦

三层架构 满足单一职责原则。Controller控制层:接收前端发送的请求,对请求进行处理并响应数据。 Service业务逻辑层:处理具体的业务逻辑。 Dao数据访问层(持久层):负责数据访问操作,包括数据的增删改查。浏览器发过来请求,首先访问Controller层,Controller调用Service…

框架ThinkPHP

引子:本章主要介绍ThinkPHP(PHP开发框架)的简单使用和一些安全问题。免责声明:本文章仅用于交流学习,因文章内容而产生的任何违法&未授权行为,与文章作者无关!!! 附:完整笔记目录~ ps:本人小白,笔记均在个人理解基础上整理,若有错误欢迎指正! 1.5 🐘框架&a…

我的“DeepSeek服务不忙了”,腾讯云671B满血模型无限量调用攻略!

DeepSeek R1虽然免费,但是基本到了无法使用的状态。一两轮对话后,就开始服务忙了。好在这是一个开源模型,大量的第三方平台开始上线了。上一篇我们就讲过硅基流动。最近听闻腾讯云也上线了 DeepSeek-V3、DeepSeek-R1 满血版模型。而且可以免费不限量使用。具体规则如下: 添…