Skip to content

致动器

执行器是Rible.jl包中用于模拟和控制结构系统中各种作用力和输入的关键组件。本文档将详细介绍actuators.jl文件中定义的执行器类型及其功能。

基本概念

  • AbstractOperator: 操作符的抽象基类

  • AbstractActuator: 执行器的抽象基类

  • Structure: 表示整个结构系统的类型

主要执行器类型

1. ExternalForceActuator

这是最基本的外力执行器,用于在结构的特定位置施加力。

主要特征:

  • 可以指定力的大小和方向

  • 支持naive operator进行简单的力控制

  • 提供广义力和广义力雅可比矩阵的计算

使用示例:

julia
force_actuator = ExternalForceActuator(id, signifier, operator, force, action)
execute!(structure, force_actuator)

2. GravityActuator

重力执行器,用于模拟重力对结构的影响。

主要特征:

  • 自动计算结构体的重力

  • 无需额外的操作符

使用示例:

julia
gravity_actuator = GravityActuator(id, body)
execute!(structure, gravity_actuator)

3. RegisterActuator

寄存器执行器,用于控制多个执行器的参数。

主要特征:

  • 可以同时控制多个执行器

  • 使用矩阵形式存储和更新参数

使用示例:

julia
register_actuator = RegisterActuator(id, signifier, operator, register)
execute!(structure, register_actuator, u)

4. SMAHeater

形状记忆合金(SMA)加热器,用于控制SMA电缆的温度。

主要特征:

  • 可以设置加热规律

  • 支持绝对温度和增量温度控制

使用示例:

julia
sma_heater = SMAHeater(signifier, heating_law)
execute!(sma_heater, structure, temperature)

通用函数

  • get_id: 获取执行器ID

  • get_numbertype: 获取执行器使用的数值类型

  • get_num_of_actions: 获取执行器的动作数量

  • execute!: 执行执行器的操作

  • gen_force: 计算广义力

  • gen_force_jacobian!: 计算广义力的雅可比矩阵

使用建议

  1. 根据需要选择合适的执行器类型

  2. 正确设置执行器的参数,如id、signifier和operator

  3. 使用execute!函数来应用执行器的作用

  4. 对于复杂的控制需求,可以组合使用多种执行器

通过合理使用这些执行器,您可以精确地控制和模拟各种结构系统中的力和输入,从而实现高度灵活和准确的结构分析和控制。

量规器

定义了测量和误差评估的核心组件。这些组件用于监控和控制机器人的状态。

涉及类型

  1. Captum 类型用于选择要测量的量, 例如 PositionCaptum, VelocityCaptum, PosVelCaptum, AngleCaptumActionCaptum 等具体子类,分别用于如位置、速度、角度等。

  2. Gauge 类型将Captum和Signifier组合在一起,形成一个完整的测量单元。

Signifier 用于标识被测量的特定部件或关节,可以是_体_、,也可以是致动器。 CaptumGauge 为单纯测量量规;ErrorGauge 增加了参考值,用于计算误差。

涉及函数

  • measure(): 执行实际的测量

  • measure_jacobian(): 计算测量量关于Signifier状态的雅克比矩阵

  • measure_hessians(): 计算测量量关于Signifier状态的黑塞矩阵

使用示例

julia
# 创建一个位置Captum
pos_captum = PositionCaptum()

# 创建一个Signifier
sig = Signifier(body=some_body, pid=1)

# 创建一个CaptumGauge
gauge = CaptumGauge(1, sig, pos_captum)

# 使用Gauge进行测量
measurement = measure(structure, gauge)

# 创建一个ErrorGauge
error_gauge = ErrorGauge(1, sig, pos_captum, reference_position)

# 计算误差
error = measure(structure, error_gauge)

通过组合不同的Captum、Signifier和Gauge,可以灵活地定义各种测量和误差评估方案,为机器人的状态监控和控制提供基础。

控制中心

Rible.control! Method
julia
control!(bot::Robot,policy,state::ComponentArray)

For policy that acts directly on discrete solver's discretized states (e.g. iLQR)

Rible.control_jacobian! Method
julia
control_jacobian!(∂C∂q,∂C∂p,bot::Robot,policy,solver_cache,solver_state)

Jacobian of the control function w.r.t. the discrete solver's discretized states. For policy that acts directly on discrete solver's discretized states (e.g. iLQR)

误差与代价计算

在机器人控制和优化中,误差和代价计算是关键的部分。

在程序实现上,误差在量规gauge的层面上计算,无需考虑目标Objective, 而代价计算则在机器人系统的层面计算,需要考虑目标Objective。

1. 误差计算

误差是指实际测量值与参考值之间的差异。

ErrorGauge 类型定义了如何从测量数据中提取误差信息。 它通常包含测量误差的具体方法和误差的度量标准。 目前仅提供一种误差计算方式: $ e = \frac{1}{2} (\bm{a}-\bm{a}{ref})^T(\bm{a}-\bm{a}) $

测量函数 measure 计算,该函数接受结构和量规作为输入。

1.2 误差梯度

measure_gradient 误差雅可比矩阵是误差对系统状态(如位置和速度)的偏导数矩阵。 根据链式求导法则,通过测量函数的雅可比矩阵来计算。

1.3 误差海森矩阵

measure_hessians 误差海森矩阵是误差对系统状态的二阶偏导数矩阵。 根据链式求导法则,通过测量函数的雅可比矩阵来计算。

2. 代价

代价用于评估系统在给定状态和控制输入下的性能。 目标是最小化代价函数,以实现最优控制。

2.1 代价函数定义

代价函数通常是各项加权和。

  • 误差 ErrorGauge

  • 与致动器相关的代价 CaptumGauge

通过调整权重在总代价中的影响。

代价梯度是代价函数关于系统状态和控制输入的偏导数。 代价海森矩阵是代价函数对系统状态和控制输入的二阶偏导数矩阵。

3. 应用

在机器人控制中,误差和代价计算通常用于路径规划、运动控制和优化算法中。通过准确地计算误差和代价,我们可以设计出更高效的控制策略,实现机器人在复杂环境中的精确运动。

结论

误差和代价计算是机器人控制中的核心概念。通过理解误差和代价的计算方法,我们可以更好地设计和优化机器人控制系统,提高其性能和效率。希望本文档能帮助您更好地理解这些概念,并在实际应用中加以利用。