now minitaur class can output joint angles, velocities and torques. I also extract evaluate functions to a file

This commit is contained in:
Jie Tan
2017-02-09 14:43:40 -08:00
parent 4df8b27626
commit 509b77054a
3 changed files with 136 additions and 30 deletions

View File

@@ -2,15 +2,11 @@ import pybullet as p
import numpy as np
class Minitaur:
def __init__(self):
def __init__(self, urdfRootPath=''):
self.urdfRootPath = urdfRootPath
self.reset()
def reset(self):
self.quadruped = p.loadURDF("quadruped/quadruped.urdf",0,0,.3)
self.kp = 1
self.kd = 0.1
self.maxForce = 3.5
self.motorDir = [1, -1, 1, -1, -1, 1, -1, 1]
def buildJointNameToIdDict(self):
nJoints = p.getNumJoints(self.quadruped)
self.jointNameToId = {}
for i in range(nJoints):
@@ -20,13 +16,39 @@ class Minitaur:
for i in range(100):
p.stepSimulation()
def buildMotorIdList(self):
self.motorIdList.append(self.jointNameToId['motor_front_leftR_joint'])
self.motorIdList.append(self.jointNameToId['motor_front_leftL_joint'])
self.motorIdList.append(self.jointNameToId['motor_back_leftR_joint'])
self.motorIdList.append(self.jointNameToId['motor_back_leftL_joint'])
self.motorIdList.append(self.jointNameToId['motor_front_rightL_joint'])
self.motorIdList.append(self.jointNameToId['motor_front_rightR_joint'])
self.motorIdList.append(self.jointNameToId['motor_back_rightL_joint'])
self.motorIdList.append(self.jointNameToId['motor_back_rightR_joint'])
def reset(self):
self.quadruped = p.loadURDF("%s/quadruped/quadruped.urdf" % self.urdfRootPath,0,0,.3)
self.kp = 1
self.kd = 0.1
self.maxForce = 3.5
self.nMotors = 8
self.motorIdList = []
self.motorDir = [1, -1, 1, -1, -1, 1, -1, 1]
self.buildJointNameToIdDict()
self.buildMotorIdList()
def disableAllMotors(self):
nJoints = p.getNumJoints(self.quadruped)
for i in range(nJoints):
p.setJointMotorControl2(bodyIndex=self.quadruped, jointIndex=i, controlMode=p.VELOCITY_CONTROL, force=0)
def setMotorAngleById(self, motorId, desiredAngle):
p.setJointMotorControl2(bodyIndex=self.quadruped, jointIndex=motorId, controlMode=p.POSITION_CONTROL, targetPosition=desiredAngle, positionGain=self.kp, velocityGain=self.kd, force=self.maxForce)
def setMotorAngleByName(self, motorName, desiredAngle):
p.setJointMotorControl2(bodyIndex=self.quadruped, jointIndex=self.jointNameToId[motorName], controlMode=p.POSITION_CONTROL, targetPosition=desiredAngle, positionGain=self.kp, velocityGain=self.kd, force=self.maxForce)
self.setMotorAngleById(self.jointNameToId[motorName], desiredAngle)
def resetPose(self):
#right front leg
@@ -76,11 +98,29 @@ class Minitaur:
def applyAction(self, motorCommands):
motorCommandsWithDir = np.multiply(motorCommands, self.motorDir)
self.setMotorAngleByName('motor_front_leftR_joint', motorCommandsWithDir[0])
self.setMotorAngleByName('motor_front_leftL_joint', motorCommandsWithDir[1])
self.setMotorAngleByName('motor_back_leftR_joint', motorCommandsWithDir[2])
self.setMotorAngleByName('motor_back_leftL_joint', motorCommandsWithDir[3])
self.setMotorAngleByName('motor_front_rightL_joint', motorCommandsWithDir[4])
self.setMotorAngleByName('motor_front_rightR_joint', motorCommandsWithDir[5])
self.setMotorAngleByName('motor_back_rightL_joint', motorCommandsWithDir[6])
self.setMotorAngleByName('motor_back_rightR_joint', motorCommandsWithDir[7])
for i in range(self.nMotors):
self.setMotorAngleById(self.motorIdList[i], motorCommandsWithDir[i])
def getMotorAngles(self):
motorAngles = []
for i in range(self.nMotors):
jointState = p.getJointState(self.quadruped, self.motorIdList[i])
motorAngles.append(jointState[0])
motorAngles = np.multiply(motorAngles, self.motorDir)
return motorAngles
def getMotorVelocities(self):
motorVelocities = []
for i in range(self.nMotors):
jointState = p.getJointState(self.quadruped, self.motorIdList[i])
motorVelocities.append(jointState[1])
motorVelocities = np.multiply(motorVelocities, self.motorDir)
return motorVelocities
def getMotorTorques(self):
motorTorques = []
for i in range(self.nMotors):
jointState = p.getJointState(self.quadruped, self.motorIdList[i])
motorTorques.append(jointState[3])
motorTorques = np.multiply(motorTorques, self.motorDir)
return motorTorques