Mujoco xml actuator

发布于:2025-04-13 ⋅ 阅读:(16) ⋅ 点赞:(0)

在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>

网站公告

今日签到

点亮在社区的每一天
去签到