pybullet电机控制总结
Posted bug404
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pybullet电机控制总结相关的知识,希望对你有一定的参考价值。
恒定速度
要让电机保持恒速运动,需要指定施加在电机的最大外力。如
maxForce = 500
p.setJointMotorControl2(bodyUniqueId=objUid,
jointIndex=0,
controlMode=p.VELOCITY_CONTROL,
targetVelocity=targetVel,
force=maxForce)
一段完整的代码
import pybullet as p
import time
import pybullet_data
p.connect(p.GUI)
p.setAdditionalSearchPath(pybullet_data.getDataPath())
cartpole = p.loadURDF("cartpole.urdf")
p.setRealTimeSimulation(1)
maxForce=50000
p.setJointMotorControl2(cartpole,1,p.VELOCITY_CONTROL,targetVelocity=300,force=maxForce)
while (1):
p.setGravity(0, 0, -10)
js = p.getJointState(cartpole, 1)
print("js=",js)
# print("position=", js[0], "velocity=", js[1])
time.sleep(0.5)
可以通过调整maxForce, targetVelocity, time.sleep等的参数来观察不同的效果,注意js输出的速度信息。参数中的targetVelocity并不是机构一定会达到的速度,只有当施加给电机的力足够时,才能达到。
位置控制
位置控制是最简单的控制方式,直接贴上一个例子。
import pybullet as p
import time
import pybullet_data
p.connect(p.GUI)
p.setAdditionalSearchPath(pybullet_data.getDataPath())
cartpole = p.loadURDF("cartpole.urdf")
p.setRealTimeSimulation(1)
p.setGravity(0,0,-10)
nj=p.getNumJoints(cartpole)
print("numJoints=",nj)
ji=p.getJointInfo(cartpole,0)
print("joint 1 info=",ji)
ji_1=p.getJointInfo(cartpole,1)
print("joint 2 info=",ji_1)
js=p.getJointState(cartpole,0)
print("joint 1 state=",js)
js_1=p.getJointState(cartpole,1)
print("joint 2 state=",js_1)
p.setJointMotorControl2(cartpole,1,p.POSITION_CONTROL,targetPosition=6.28,force=80)
print(- *40)
nj=p.getNumJoints(cartpole)
print("numJoints=",nj)
ji=p.getJointInfo(cartpole,0)
print("joint 1 info=",ji)
ji_1=p.getJointInfo(cartpole,1)
print("joint 2 info=",ji_1)
js=p.getJointState(cartpole,0)
print("joint 1 state=",js)
js_1=p.getJointState(cartpole,1)
print("joint 2 state=",js_1)
while(1):
p.setGravity(0,0,-10)
js=p.getJointState(cartpole,1)
print(js)
time.sleep(0.01)
通过调整p.setJointMotorControl2(cartpole,1,p.POSITION_CONTROL,targetPosition=6.28,force=80)
里面的targetPosition和force参数可以实现不同的效果,具体的可以调参试一下。很有趣。
以上是关于pybullet电机控制总结的主要内容,如果未能解决你的问题,请参考以下文章
ERROR: Failed building wheel for pybullet 解决方案