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
。 - 添加新的流。
Expirer
flow::IfStream
flow::IfElseStream
flow::FreezeStream
logic::AndStream
logic::OrStream
logic::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
实现的性能。 - 小的文档修复。