20 个不稳定版本 (3 个破坏性更新)

0.4.0-beta.22024 年 8 月 13 日
0.4.0-alpha.22024 年 7 月 27 日
0.2.0-beta.22024 年 3 月 28 日

#19 in 机器人

Download history 6/week @ 2024-04-29 179/week @ 2024-05-27 11/week @ 2024-06-03 147/week @ 2024-06-10 186/week @ 2024-07-15 79/week @ 2024-07-22 127/week @ 2024-07-29 100/week @ 2024-08-05 115/week @ 2024-08-12

423 每月下载量

LGPL-3.0-only

125KB
3K SLoC

Rust 机器人工具包

一套用于 Rust 机器人的算法和其他工具。

它部分是 no_std。它目前不直接集成任何 API,但将来可能会添加。

许可

GNU 较小通用公共许可证,仅限版本 3

功能

  • 用于数据处理节点样式的流系统
    • 基本算术 + 积分和微分
    • PID
    • 移动平均
    • EWMA
  • 简单的设备控制系统
  • 梯形运动轮廓跟踪

RRTK 流构建器 现在可用:从视觉节点生成流系统的代码。

变更

0.1.0

初始版本。

0.1.1

修复运动轮廓问题。

0.2.0-alpha.1

开始新的电机-编码器系统。

0.2.0-alpha.2

为电机跟踪运动轮廓的功能。

0.2.0-beta.1

允许用户运行自定义更新循环以跟踪运动轮廓,作为单个函数的替代。

0.2.0-beta.2

为编码器添加更新方法。

0.2.0

为电机添加更新方法,以便更容易地检测运动轮廓的各个部分,并重新组织包以在模块中使用电机-编码器系统中的功能。

0.3.0-alpha.1

开始新的流系统。

0.3.0-alpha.2

稍微重新组织并添加 EWMA 流。

0.3.0-alpha.3

添加移动平均流。

0.3.0-alpha.4

  • 性能改进
    • 使用数组而不是 vec 作为 SumStreamProductStream 的输入
    • MovingAverageStream 中避免不必要的加权求和计算
    • PIDControllerShift 中的移位数设为常量
  • 将所有 MotionProfileState 实例替换为 MotionProfilePiece
  • 添加 History 特性,它类似于 Stream,但您指定获取数据的时间
  • 将流重新组织到模块中
  • 为几种类型移除不必要的 std 要求

0.3.0-alpha.5

  • Stream 和之前的设备系统迁移到 GetterSettableGetter 类似于流或编码器,而 Settable 类似于可写设备。
  • 添加 Device 类型,使原始的 GetterSettable 能够作为系统中的机械设备更好地协同工作。这应该代表一个物理设备。
  • 添加 Axle 类型,其中包含多个 Device 对象。它利用每个设备的能力来控制现实生活中的系统。例如,从 Getter 设备(编码器的 Device::Read 和伺服电机的 Device::ReadWrite)收集数据,并用于控制不包含自身控制理论处理的电机(Device::ImpreciseWrite),但可以自行执行此操作的电机(根据内部数据是否可读,为 Device::ReadWriteDevice::PreciseWrite)则不需要此控制。此对象应代表设备之间的物理连接。
  • 不要为 PID 控制器类型要求启用功能
  • 将 PID 控制器类型的 API 更改为使用 k 值类型而不是三个单独的 f32

0.3.0-beta.1

  • 不要为运动配置要求启用功能
  • 使 Settable 能够跟随同一类型的 Getter
  • 添加允许 History 对象作为 Getter 使用的 GetterFromHistory 结构。

0.3.0

  • GetterFromHistory 添加 set_deltaset_time 方法。
  • streams::Constant 移动到 ConstantGetter
  • 实现 SettableConstantGetter
  • Settable 添加 get_last_request 方法。
  • MotionProfileget_* 方法移动到 Option 而不是 Result
  • UpdateOutput 重命名为 NothingOrError
  • 修复 Axle 的错误,该错误会尝试使用尚未接收 Command 的不存在的 PID 控制器为 Device::ImpreciseWrite 对象。
  • 您现在实现 direct_set 而不是直接在 Settable 中实现 set。尽管如此,您仍然应该 调用set。这是为了使 SettableDataget_last_request 正确工作而需要的解决方案。
  • MotionProfile 移动到 History<Command, E> 而不是 History<State, E>
  • 将时间戳移动到 i64 而不是 f32。建议的单位是纳秒。这不是 u64,因为使用了时间差。
  • 修复 MovingAverageStream 的崩溃问题。
  • StreamPID 重命名为 PIDControllerStream
  • 提高 PIDControllerStream 的性能。
  • Error 枚举标记为不完整。
  • 编写三个示例文件。
  • 为几个结构体派生额外的特型。
  • MotionProfile 完成后给它一个返回值。这是基于构造函数提供的最终状态。它会选择可能的最小位置导数以满足最终状态。这意味着如果加速度为0,则命令中的位置导数将是速度,否则是加速度。如果速度也为0,则将是位置,否则只是速度。
  • Command 添加 get_(position|velocity|acceleration) 方法。
  • 添加 Latest 流,允许您选择一组流中具有较晚时间戳的输出。
  • Command 实现 From<State>
  • TimeGetterFromStream 重命名为 TimeGetterFromGetter

0.3.1

  • State 实现 core::ops 特型和 Copy
  • 修复 PositionToState 的名称。
  • 通过删除不必要的代码,略微提高 MotionProfile(Position|Velocity|Acceleration)ToState 的性能。
  • 改进测试。
  • 进行一些文档修正。
  • 在几个文件中添加缺失的LGPL许可声明。

0.4.0-alpha.1

  • 开始新的设备系统。

0.4.0-alpha.2

  • 让所有内容都使用 &RefCell<Terminal> 而不是 Rc<RefCell<Terminal>>
  • 使数学流使用泛型。
  • 添加 SettableCommandDeviceWrapperGetterStateDeviceWrapper,允许仅实现 Settable<Command, _> 的类型用作电机,仅实现 Getter<State, _> 的类型用作编码器。
  • 恢复 PositionDerivativeDependentPIDKValues,现在有一个 get_k_values 方法来获取特定位置导数的k值。
  • PIDKValuesPositionDerivativeDependentPIDKValues 添加 evaluate 方法。
  • 添加 CommandPID,一种更简单、更快的使用PID控制将标准直流电机和编码器转换为事实上的伺服的方法。
  • 添加 latest 函数,它获取两个 Datum 对象中的较新者。

0.4.0-alpha.3

  • 添加新的 streams 子模块 flowlogic
  • 添加新的流。
    • Expirer
    • flow::IfStream
    • flow::IfElseStream
    • flow::FreezeStream
    • logic::AndStream
    • logic::OrStream
    • logic::NotStream
  • 对于实现 NotDatum<T>,允许通过 Not
  • 添加 NoneGetter
  • 添加与 0.4.0-alpha.1 版本非常相似的 Axle
  • (SettableCommand|GetterState)DeviceWrapper 移动到 devices::wrappers 模块。
  • 为差分机构添加实验性的 Device 实现。
  • 移除现在不再使用的 GetterSettable 标记特质。
  • 将新的设备系统移动到新的 devices 功能。
  • devices 模块的文档进行小的修复。

0.4.0-beta.1

  • 使差分计算能够平等地信任所有分支,而不是忽略一个。
  • InputGetterInputTimeGetter 中移除不必要的 Box 包装。

0.4.0-beta.2

  • following_update 重命名为 update_following_data 并从其中移除 update 调用。
  • 使 GetterFromHistory 使用 &mut dyn History 而不是 Box<dyn History>,并使它的构造函数接受 impl History 而不是 dyn History
  • 移除 GetterFromHistorynew_for_motion_profile 构造函数。
  • History<T, _>' 的 T 上移除 Clone 绑定。
  • 使 GetterFromHistory 返回请求的时间戳作为它的 Datum 时间戳,而不是内部 History 返回的时间戳。
  • make_input_gettermake_input_time_getter 函数替换为宏。
  • 添加 NoneGetter 构造函数。(它是一个单元结构体,因此这是多余的。);
  • Terminal 添加一个 disconnect 方法。
  • 为内置设备添加获取其终端引用的方法。
  • 通过使用 MaybeUninit 数组而不是 Vec 来略微提高 Terminalget 实现的性能。
  • 小的文档修复。

无运行时依赖

功能