20 个不稳定版本 (3 个破坏性更新)
| 0.4.0-beta.2 | 2024 年 8 月 13 日 |
|---|---|
| 0.4.0-alpha.2 | 2024 年 7 月 27 日 |
| 0.2.0-beta.2 | 2024 年 3 月 28 日 |
#19 in 机器人
423 每月下载量
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 作为
SumStream和ProductStream的输入 - 在
MovingAverageStream中避免不必要的加权求和计算 - 将
PIDControllerShift中的移位数设为常量
- 使用数组而不是 vec 作为
- 将所有
MotionProfileState实例替换为MotionProfilePiece - 添加
History特性,它类似于Stream,但您指定获取数据的时间 - 将流重新组织到模块中
- 为几种类型移除不必要的
std要求
0.3.0-alpha.5
- 从
Stream和之前的设备系统迁移到Getter和Settable。Getter类似于流或编码器,而Settable类似于可写设备。 - 添加
Device类型,使原始的Getter和Settable能够作为系统中的机械设备更好地协同工作。这应该代表一个物理设备。 - 添加
Axle类型,其中包含多个Device对象。它利用每个设备的能力来控制现实生活中的系统。例如,从Getter设备(编码器的Device::Read和伺服电机的Device::ReadWrite)收集数据,并用于控制不包含自身控制理论处理的电机(Device::ImpreciseWrite),但可以自行执行此操作的电机(根据内部数据是否可读,为Device::ReadWrite和Device::PreciseWrite)则不需要此控制。此对象应代表设备之间的物理连接。 - 不要为 PID 控制器类型要求启用功能
- 将 PID 控制器类型的 API 更改为使用 k 值类型而不是三个单独的
f32。
0.3.0-beta.1
- 不要为运动配置要求启用功能
- 使
Settable能够跟随同一类型的Getter。 - 添加允许
History对象作为Getter使用的GetterFromHistory结构。
0.3.0
- 向
GetterFromHistory添加set_delta和set_time方法。 - 将
streams::Constant移动到ConstantGetter。 - 实现
Settable对ConstantGetter。 - 向
Settable添加get_last_request方法。 - 将
MotionProfile的get_*方法移动到Option而不是Result。 - 将
UpdateOutput重命名为NothingOrError。 - 修复
Axle的错误,该错误会尝试使用尚未接收Command的不存在的 PID 控制器为Device::ImpreciseWrite对象。 - 您现在实现
direct_set而不是直接在Settable中实现set。尽管如此,您仍然应该 调用 仅set。这是为了使SettableData和get_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>>。 - 使数学流使用泛型。
- 添加
SettableCommandDeviceWrapper和GetterStateDeviceWrapper,允许仅实现Settable<Command, _>的类型用作电机,仅实现Getter<State, _>的类型用作编码器。 - 恢复
PositionDerivativeDependentPIDKValues,现在有一个get_k_values方法来获取特定位置导数的k值。 - 为
PIDKValues和PositionDerivativeDependentPIDKValues添加evaluate方法。 - 添加
CommandPID,一种更简单、更快的使用PID控制将标准直流电机和编码器转换为事实上的伺服的方法。 - 添加
latest函数,它获取两个Datum对象中的较新者。
0.4.0-alpha.3
- 添加新的
streams子模块flow和logic。 - 添加新的流。
Expirerflow::IfStreamflow::IfElseStreamflow::FreezeStreamlogic::AndStreamlogic::OrStreamlogic::NotStream
- 对于实现
Not的Datum<T>,允许通过Not。 - 添加
NoneGetter。 - 添加与 0.4.0-alpha.1 版本非常相似的
Axle。 - 将
(SettableCommand|GetterState)DeviceWrapper移动到devices::wrappers模块。 - 为差分机构添加实验性的
Device实现。 - 移除现在不再使用的
GetterSettable标记特质。 - 将新的设备系统移动到新的
devices功能。 - 对
devices模块的文档进行小的修复。
0.4.0-beta.1
- 使差分计算能够平等地信任所有分支,而不是忽略一个。
- 从
InputGetter和InputTimeGetter中移除不必要的Box包装。
0.4.0-beta.2
- 将
following_update重命名为update_following_data并从其中移除update调用。 - 使
GetterFromHistory使用&mut dyn History而不是Box<dyn History>,并使它的构造函数接受impl History而不是dyn History。 - 移除
GetterFromHistory的new_for_motion_profile构造函数。 - 从
History<T, _>' 的T上移除Clone绑定。 - 使
GetterFromHistory返回请求的时间戳作为它的Datum时间戳,而不是内部History返回的时间戳。 - 将
make_input_getter和make_input_time_getter函数替换为宏。 - 添加
NoneGetter构造函数。(它是一个单元结构体,因此这是多余的。); - 向
Terminal添加一个disconnect方法。 - 为内置设备添加获取其终端引用的方法。
- 通过使用
MaybeUninit数组而不是Vec来略微提高Terminal的get实现的性能。 - 小的文档修复。