First Commit

This commit is contained in:
meiqi
2026-03-27 16:10:51 +08:00
commit c45245038f
103 changed files with 10994 additions and 0 deletions

View File

@@ -0,0 +1,47 @@
import mujoco
import numpy as np
from typing import Literal
class ElasticBand:
def __init__(self, property: Literal['spring', 'elastic'] = 'elastic', enable=True):
self.stiffness = 300
self.damping = 100
self.point = np.array([0, 0, 3])
self.length = 0
self.enable = enable
self.property = property
def Advance(self, x, dx):
"""
Args:
δx: desired position - current position
dx: current velocity
"""
δx = self.point - x
distance = np.linalg.norm(δx)
direction = δx / distance
v = np.dot(dx, direction)
if self.property =="spring":
f = (self.stiffness *
(distance - self.length) - self.damping * v) * direction
else:
# 只有当距离大于自然长度时才产生拉力
if distance > self.length:
f = (self.stiffness * (distance - self.length) - self.damping * v) * direction
else:
# 距离小于等于自然长度时不产生力
f = np.zeros_like(direction)
# f[0]=0
# f[1]=0
return f
def MujuocoKeyCallback(self, key):
glfw = mujoco.glfw.glfw
if key == glfw.KEY_UP:
self.length -= 0.1
if key == glfw.KEY_DOWN:
self.length += 0.1
if key == glfw.KEY_ESCAPE:
self.enable = not self.enable