#traffic #performance #package #complete #gap #realism

traffic-sim

一个专注于性能和真实性的简单交通模拟包

2 个版本

0.1.1 2022 年 8 月 4 日
0.1.0 2022 年 7 月 30 日

#225 in 模拟

GPL-3.0-or-later

105KB
2.5K SLoC

traffic-sim

这是一个简单的交通模拟模块,侧重于性能和真实性。

这是一个个人项目,目前文档不佳,且功能尚未完全。

目标

该包的目标是能够以合理性能以真实方式模拟任何道路网络。这包括模拟如下事物:

  • 车辆跟随
  • 车道变更决策和动态
  • 在让行/停车标志处让行
  • 合并和分叉
  • 简单路径查找

目前的主要差距是缺少车道变更。有部分内容,但总体上这是一个非常难以解决的问题。

联系方式

对该项目感兴趣?请随时通过我的电子邮件地址联系我。


lib.rs:

这是一个简单的交通模拟模块,侧重于性能和真实性。

这是一个个人项目,目前文档不佳,且功能尚未完全。

目标

该包的目标是能够以合理性能以真实方式模拟任何道路网络。这包括模拟如下事物:

  • 车辆跟随
  • 车道变更决策和动态
  • 在让行/停车标志处让行
  • 合并和分叉
  • 简单路径查找

目前的主要差距是缺少车道变更。有部分内容,但总体上这是一个非常难以解决的问题。

你好,世界

此示例代码演示了如何在直线单车道道路上模拟一辆车辆。

use traffic_sim::{Simulation, LinkAttributes, VehicleAttributes};
use traffic_sim::math::{LineSegment2d, Point2d};

// Create a simulation
let mut simulation = Simulation::new();

// Add a link, which is a single lane of traffic
// This one is a straight line 100m long
let link_id = simulation.add_link(&LinkAttributes {
    curve: &LineSegment2d::from_ends(Point2d::new(0.0, 0.0), Point2d::new(100.0, 0.0)),
    speed_limit: 16.6667, // m/s (60km/h)
});

// Add a vehicle to the start of the link we just created
let veh_id = simulation.add_vehicle(&VehicleAttributes {
    width: 2.0, // m
    length: 5.0, // m
    wheel_base: 1.5, // m
    max_acc: 2.0, // m
    comf_dec: 2.0, // m
}, link_id);

// Simulate 10 frames, each advancing time by 0.1s.
// Each frame, print out the coordinates of our single vehicle
for _ in 0..10 {
    simulation.step(0.1);
    println!("Vehicle is at {:?}", simulation.get_vehicle(veh_id).position());
}

依赖关系

~2–3MB
~61K SLoC