鼠标按住连点没反应

鼠标按住连点没反应

标题:MuJoCo深度解析:qfrc三力详解及鼠标交互物理效果测试

内容:

大家好,今天我将带大家详细了解MuJoCo中的三种力:qfrc_actuator、qfrc_passive和qfrc_applied,并在其可视化窗进行鼠标拖拽交互测试。

在MuJoCo的官方文档mjData中,我们可以看到以下三种力的定义:

1. qfrc_actuator:对于关节电机表现为力矩,如电机驱动关节转动;对于线性执行器,表现为线,如推动连杆。

2. qfrc_passive:由被动力学元件产生,包括关节的弹簧力、阻尼力、摩擦力、接触力等。例如,在xml中定义的关节接触、摩擦等。

3. qfrc_applied:外部施加的力或力矩,例如我们可以通过代码手动给模型中的某个点施加力或力矩。

接下来,让我们看看如何在MuJoCo中使用鼠标拖拽进行物理交互。在可视化窗,我们可以通过鼠标拖拽模型来测试qfrc的实时变化。

当我们双击接触点或物体,并按住Ctrl键进行鼠标右键点击并拖动时,MuJoCo会在接触点(或选中的物体)上施加一个位置约束,使物体跟随鼠标移动。这个过程等效于在接触点上施加一个弹簧阻尼力,即实现了位置拖拽(Position Drag)。

同样地,当我们双击接触点或物体,并按住Ctrl键进行鼠标左键按住旋转时,MuJoCo会在物体上施加力矩,使其绕指定轴旋转。这就是旋转拖拽(Rotation Drag)。

为了更好地记录拖拽过程中的qfrc_actuator变化,我们可以编写一段代码来存储关节力矩的列表,并绘制关节力矩随时间变化的曲线。这样,我们就可以直观地看到鼠标拖拽对模型力的影响。

示例代码片段如下:

python

import mujoco_viewer

import numpy as np

import matplotlib.pyplot as plt

class TestViewer(mujoco_viewer.CustomViewer):

def __init__(self, model_path):

super().__init__(model_path, 3, azimuth=180, elevation=-30)

self.model_path = model_path

self.torque_history = [] 存储关节力矩的列表

self.time_history = [] 存储时间戳

def mouse_drag(self, event):

在鼠标拖拽时记录力矩

if event.button == 1: 左键拖拽,实现旋转拖拽

记录力矩变化…

elif event.button == 3: 右键拖拽,实现位置拖拽

记录位置约束下的力变化…

def runFunc(self):

绘制关节力矩曲线…(与示例代码类似)

pass

if __name__ == “__main__”:

test_viewer = TestViewer(“model/trs_so_arm100/scene.xml”) 加载模型路径

test_viewer.run_loop() 运行视图循环


鼠标按住连点没反应

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注