Mujoco 控制器接口(四)

目录

.1 简介

1.1 控制器实现

.2 sim.step()

.3 实例

References


.1 简介

Mujoco 控制器接口(四)_第1张图片

control看到下面的图中就是mjtNum类型

Mujoco 控制器接口(四)_第2张图片

 Mujoco 控制器接口(四)_第3张图片

 mjtNum实际上就是浮点数

ctrl是底层的输入

外界扰动就是通过上图的qfrc和xfrc来添加的

1.1 控制器实现

实际上加上控制器就是xml里添加actuator

Mujoco 控制器接口(四)_第4张图片

 

 joint就是对应由哪个电机控制

motor代表电机

ctrllimited代表的是电机的转动范围有限

这里说明了mujoco的逻辑 是siso就是单输入得到单输出

需要注意的是输入都被保存在变量mjData.ctrl的变量里

force outputs保存在另一个变量里

.2 sim.step()

这个函数做了什么

Mujoco 控制器接口(四)_第5张图片

 先是检查参数是否在范围内

然后进行正向动力学的计算(位置速度来计算加速度)

然后检查加速度是不是合理的状态

然后进行差分迭代

最后是一个积分器,欧拉积分器

在一个while循环中添加每一步的控制量,再写一个step就可以开始循环这个函数很方便

.3 实例

import mujoco_py as mp

model = mp.load_model_from_path('ur5.xml')
sim = mp.MjSim(model)
viewer = mp.MjViewer(sim)

for i in range(3000):
    # sim.data.ctrl[:6] = 1
    sim.step()
    viewer.render()

先是读取了ur5的model

ur5的model里添加了相应的actuator

Mujoco 控制器接口(四)_第6张图片

 

然后建立Mjsim的仿真并传入viewer中显示

sim = mp.MjSim(model)
viewer = mp.MjViewer(sim)

然后开启循环

for i in range(3000):
    # sim.data.ctrl[:6] = 1
    sim.step()
    viewer.render()

把每个关节的控制输入给到1

sim.data.ctrl[:6] = 1

然后step开始输出

输出完之后进行render

完整代码:

import mujoco_py as mp

model = mp.load_model_from_path('ur5.xml')
sim = mp.MjSim(model)
viewer = mp.MjViewer(sim)

for i in range(3000):
    sim.data.ctrl[:6] = 1
    sim.step()
    viewer.render()

运行

Mujoco 控制器接口(四)_第7张图片

 

References

Mujoco 控制器接口(四)_第8张图片

 

你可能感兴趣的:(#,mujoco,人工智能)