5 个版本

0.0.4 2024年2月23日
0.0.3 2024年2月23日
0.0.2 2024年2月22日
0.0.1 2024年2月21日
0.0.0 2023年12月29日

#93 in 机器学习

Download history 13/week @ 2024-03-09 2/week @ 2024-03-16 29/week @ 2024-03-30 5/week @ 2024-04-06

143 每月下载量

MIT 许可证

88KB
1K SLoC

🚗 openpilot

Crates.io docs License

openpilot 是一个综合的 Rust 包,旨在帮助构建完全自动驾驶车辆。此包的主要重点是提供构建和模拟传感器模型、GPS 传感器以及实现扩展卡尔曼滤波器 (EKF) 的工具。库中包括用于管理传感器读取、简单传感器、GPS 传感器和具有高性能 1D 扩展卡尔曼滤波器 (EKF) 实现的模块。

除了这些基本功能之外,openpilot 还引入了 selfdrive 包。此包专门设计用于自动驾驶车辆控制,提供便于对象跟踪、聚类管理和详细的前车分析的模块和结构。

🦀 为什么选择 Rust?

I Like Yo Cut G!

Python 主要是一种面向孩子的编程语言!

openpilot 选择 Rust 就像是给你的自动驾驶车辆代码装上喷气发动机。Rust 带来的内存安全和并发控制水平,将潜在的编程噩梦转化为无bug的宁静之旅。凭借其高性能 1D 扩展卡尔曼滤波器和针对传感器管理和自动驾驶控制的模块,Rust 中的 openpilot 不只是一个工具箱;它是自动驾驶车辆开发的詹姆斯·邦德。那么,为什么选择 Rust?因为当你的代码在街道上导航时,你想要的不仅仅是一种可以驾驶的语言,而是一种可以像外科手术机器人一样精确、像瑞士手表一样可靠的驾驶语言。欢迎来到自动驾驶的高速通道,Rust 是确保你无bug、优雅地到达目的地的方向盘。

✨ 特点

  • 自动驾驶车辆: selfdrive 包引入了为自动驾驶车辆控制设计的模块和结构。这包括对象跟踪、聚类管理和详细的前车分析等功能。这些工具是构建完全自动驾驶系统的关键组件。

Peak Auto Pilot Momentum

看!我的本田车正在自己驾驶!

  • 传感器模型:轻松构建和模拟传感器模型,灵活地自定义观测模型和协方差矩阵。

  • 简单传感器: 创建并利用简单传感器进行高效数据处理,实现与您的自主系统的无缝集成。

  • GPS传感器: 实现具有精确读数的GPS传感器,支持经纬度坐标,以实现精确的位置跟踪。

  • 1D扩展卡尔曼滤波器(EKF): 利用快速高效的1D EKF实现,用于鲁棒的状态估计和跟踪应用。

🚀 快速入门

按照以下简单步骤开始使用 openpilot

  1. 通过在您的 Cargo.toml 文件中添加以下行来安装 openpilot
[dependencies]
openpilot = "0.0.4"
  1. 导入必要的模块,并在您的Rust项目中使用提供的功能
use ndarray::arr2;
use openpilot::common::ext_kal_fltr::{SensorReading, SimpleSensor, GPS, EKF, FastEKF1D};
use openpilot::selfdrive::controls::radar_helpers::{Track, Cluster, Lead};

fn main() {
    // Example usage
    let data = arr2(&[[1.0, 2.0], [3.0, 4.0]]);
    let obs_model = arr2(&[[1.0, 0.0], [0.0, 1.0]]);
    let covar = arr2(&[[0.1, 0.0], [0.0, 0.1]]);
    let sensor_reading = SensorReading::new(data.clone(), obs_model.clone(), covar.clone());

    // Create a simple sensor
    let simple_sensor = SimpleSensor::new(obs_model.clone(), covar.clone(), 2);
    let reading = simple_sensor.read(data.clone(), None);
    println!("Simple Sensor Reading: {:?}", reading);

    // Create a GPS sensor
    let gps_sensor = GPS::new((0, 1), 2, 0.01);
    let latlon = &[37.7749, -122.4194];
    let reading = gps_sensor.read(latlon, None);
    println!("GPS Sensor Reading: {:?}", reading);

    // Create and use a fast 1D Extended Kalman Filter
    let mut fast_ekf_1d = FastEKF1D::new(0.1, 0.01, 0.001);
    fast_ekf_1d.update_scalar(&sensor_reading);
    fast_ekf_1d.predict(0.1);
    let (tf, tfj) = fast_ekf_1d.calc_transfer_fun(0.1);
    println!("EKF Transfer Function: {:?}, Jacobian: {:?}", tf, tfj);

    // Use Track, Cluster, and Lead structs and functions
    let mut track = Track::new();
    track.update(10.0, -5.0, 20.0, 15.0, 30.0, 0.1, 0.5, 0.5, 15.0, 20.0, 10.0);
    let key = track.get_key_for_cluster();
    println!("Track Key for Cluster: {:?}", key);

    let mut cluster = Cluster::new();
    let track1 = Track::new();
    let track2 = Track::new();
    cluster.add(track1);
    cluster.add(track2);
    let d_rel = cluster.d_rel();
    println!("Cluster Relative Distance: {:?}", d_rel);

    let mut lead = Lead {
        d_rel: 0.0,
        y_rel: 0.0,
        v_rel: 0.0,
        a_rel: 0.0,
        v_lead: 0.0,
        a_lead: 0.0,
        d_path: 0.0,
        v_lat: 0.0,
        v_lead_k: 0.0,
        a_lead_k: 0.0,
        status: false,
        fcw: true,
    };
    cluster.to_live20(&mut lead);
    println!("Lead Vehicle Information: {:?}", lead);
}

🧪 测试

使用以下命令运行 openpilot 包的测试

cargo test

🌐 GitHub仓库

您可以在 GitHub 上访问 openpilot 的源代码。

🤝 贡献

欢迎贡献和反馈!如果您想贡献、报告问题或建议改进,请在 GitHub 上与该项目互动。您的贡献有助于提高这个包对社区的价值。

💰 支持

My Meet Ain't Meeting

如果您喜欢这个项目,请考虑向虚拟的小费罐中投币。您的捐赠有助于保持咖啡的供应和代码的破解。所以,如果您想成为这个项目应得的英雄,为什么不向开发者的虚拟帽子中撒一些金币呢?

📘 文档

openpilot 的完整文档可在 docs.rs 上找到。

📄 许可证

本项目采用 MIT许可证 许可。

依赖项

~2MB
~34K SLoC