actuator
在MuJoCo中,actuator(执行器) 是用于定义外部力或力矩的机制,这些力或力矩可以作用于关节、肌腱或身体。执行器可以模拟各种类型的驱动器,如电机、液压缸、肌肉等。它们通过定义传输(transmission)和力生成机制(force generation)来实现对模型的控制。
Actuator 元素可以包含以下子元素:
- general:通用执行器,提供对所有执行器组件的完全访问。
- motor:直接驱动执行器。
- position:位置伺服。
- velocity:速度伺服。
- intvelocity:积分速度伺服。
- damper:主动阻尼器。
- cylinder:气缸或液压缸。
- muscle:肌肉执行器。
- adhesion:主动粘附执行器。
- plugin:与引擎插件关联的执行器。
所有执行器类型共享以下属性:
- name:执行器名称。
- class:默认类。
- group:执行器组。
- ctrllimited:是否限制控制输入。
- forcelimited:是否限制力输出。
- actlimited:是否限制激活状态。
- ctrlrange:控制输入范围。
- forcerange:力输出范围。
- actrange:激活状态范围。
- gear:齿轮比。
- cranklength:曲柄长度(仅用于滑块-曲柄传输)。
- joint:作用的关节。
- tendon:作用的肌腱。
- site:作用的位点。
- refsite:参考位点。
- body:作用的身体。
- user:用户参数。
general(通用执行器)
通用执行器允许独立设置所有执行器组件,包括传输类型、激活动态、增益类型等。是一个非常灵活的执行器类型,允许用户自定义执行器的动态特性、增益和偏置。通过设置不同的属性和模块,可以实现各种类型的执行器,如直接驱动、位置伺服、速度伺服等。
属性:
- name: 可选,执行器的名称。
- class: 可选,活动默认类。
- group: 整数,执行器所属的组。
- ctrllimited: 控制输入是否被限制。
- forcelimited: 力输出是否被限制。
- actlimited: 激活状态是否被限制。
- ctrlrange: 控制输入的限制范围。(一般会用)
- forcerange: 力输出的限制范围。(一般会用)
- actrange: 激活状态的限制范围。
- lengthrange: 执行器长度的限制范围。
- gear: 齿轮比,用于缩放执行器的长度、力矩等。
- cranklength: 连杆长度,仅用于滑块连杆传动类型。
- joint: 执行器作用的关节。
- jointinparent: 执行器作用的父关节。
- site: 执行器作用的位点。(一般会用)
- body: 执行器作用的刚体。
- tendon: 执行器作用的肌腱。(一般会用)
- cranksite: 执行器作用的连杆位点。
- slidersite: 执行器作用的滑块位点。
- dyntype: 激活动态类型。(一般会用)
- gaintype: 增益类型。(一般会用)
- biastype: 偏置类型。(一般会用)
- dynprm: 激活动态参数。(一般会用)
- gainprm: 增益参数。
- biasprm: 偏置参数。
- actdim: 激活状态的维度。
- actearly: 是否使用下一个激活值。
<actuator>
<general name="my_general" joint="my_joint" gear="1 0 0 0 0 0"
dyntype="integrator" gaintype="fixed" biastype="none"/>
</actuator>
gainprm(增益参数)
作用 :控制执行器的输出力与输入信号的线性关系。
格式 :gainprm=“k0 k1 k2”,其中:
k0: 基础增益。
k1: 输入信号的线性增益(如关节角度偏差)。
k2: 输入信号的平方增益(用于非线性控制)。
biasprm(偏置参数)
作用 :定义执行器的静态偏置力(如模拟重力或摩擦力)。
格式 :biasprm=“b0 b1 b2”,其中:
b0: 基础偏置。
b1: 关节角度的偏置系数。
b2: 关节角速度的偏置系数。
activerange(激活范围)
作用 :限制执行器的输出力范围。
格式 :activerange=“min max”。比如activerange=“-100 100”
biastype(偏置类型)
作用 :定义偏置力的计算方式。 biastype=“quadratic”
可选值 :
none: 不计算偏置。
affine: 使用 biasprm 的线性组合。
quadratic: 包含二次项。
# 获取指定执行器的增益参数
# "actuator1"是xml中actuator的name
actuator_id = model.actuator_name2id("actuator1")
gainprm = model.actuator_gainprm[actuator_id]
print("Gain Parameters:", gainprm) # 输出: [100.0, 0.0, 0.0]
# 修改激活范围(需重新编译模型)
model.actuator_activerangemin[actuator_id] = -200
model.actuator_activerangemax[actuator_id] = 200
ctrllimited(控制限幅)
作用 :启用/禁用控制信号的限幅。
值 :ctrllimited=“true”(启用)或 “false”(禁用)。
motor(电机执行器)
电机执行器是直接驱动的执行器,适用于关节直接控制。
<actuator>
<motor name="my_motor" joint="my_joint" gear="1"/>
</actuator>
position(位置伺服)
位置伺服执行器用于位置控制,可以添加位置反馈增益和阻尼。
<actuator>
<position name="my_position" joint="my_joint" kp="100" kv="10"/>
</actuator>
velocity(速度伺服)
速度伺服执行器用于速度控制,适用于需要速度反馈的场景。
<actuator>
<velocity name="my_velocity" joint="my_joint" kv="50"/>
</actuator>
intvelocity(积分速度伺服)
积分速度伺服执行器结合了位置和速度控制,适用于需要积分位置误差的场景。
<actuator>
<intvelocity name="my_intvelocity" joint="my_joint" kp="100" kv="10"/>
</actuator>
damper(主动阻尼器)
主动阻尼器执行器用于模拟阻尼效果,适用于需要主动阻尼的场景。
<actuator>
<damper name="my_damper" joint="my_joint" kv="50"/>
</actuator>
cylinder(气缸或液压缸)
气缸执行器适用于模拟气缸或液压缸的行为。
<actuator>
<cylinder name="my_cylinder" joint="my_joint" gear="1" area="0.01"/>
</actuator>
muscle(肌肉执行器)
肌肉执行器用于模拟肌肉的动态行为,适用于生物力学模拟。
<actuator>
<muscle name="my_muscle" joint="my_joint" gear="1"
timeconst="0.01 0.04" range="0.75 1.05"/>
</actuator>
adhesion(主动粘附执行器)
主动粘附执行器用于模拟粘附力,适用于需要粘附效果的场景。
<actuator>
<adhesion name="my_adhesion" body="my_body" gain="10"/>
</actuator>
plugin(插件执行器)
插件执行器允许通过插件扩展MuJoCo的功能。
<actuator>
<plugin name="my_plugin" plugin="my_plugin_name"/>
</actuator>