一、准备工作
1、pybullet
我们的仿真环境基于pybullet,因此需要先安装好pybullet,有关pybullet的介绍以及安装在这篇文章中有介绍过。
2、mini cheetah 的模型
这里的模型指的是urdf模型,pybullet里面已经预先为我们建立好了urdf模型,在pybullet_data
这个文件夹内可以找到
在pybullet_envs/example
里面也有该模型的测试例子。运行效果如下:
例子的代码如下,看起来非常简短。
import pybullet as p
import pybullet_data as pd
import time
p.connect(p.GUI) # 连接到仿真服务器
p.setGravity(0, 0, -9.8) # 设置重力值
p.setAdditionalSearchPath(pd.getDataPath()) # 设置pybullet_data的文件路径
# 加载地面
floor = p.loadURDF("plane.urdf")
# mini cheetah的初始位置
startPos = [0, 0, 0.5]
# 加载urdf文件
robot = p.loadURDF("mini_cheetah/mini_cheetah.urdf", startPos)
# 获取关节数量
numJoints = p.getNumJoints(robot)
# 设置机器人的视觉效果,这里参数-1指的是机器人的base link。
# 我们可以通过rgba值改变机器人相关link的颜色
p.changeVisualShape(robot, -1, rgbaColor=[1, 1, 1, 1])
# 设置每个link的颜色,并且设置初始关节角度
for j in range(numJoints):
p.changeVisualShape(robot, j, rgbaColor=[1, 1, 1, 1])
force = 200
pos = 0
p.setJointMotorControl2(robot, j, p.POSITION_CONTROL, pos, force=force)
dt = 1./240.
p.setTimeStep(dt)
# 进行仿真
while 1:
p.stepSimulation()
time.sleep(dt)
在我们正式开始之前,请确保你能够成功运行上面这个例子。
3、urdf文件解析
为了了解我们所使用的的模型,通过urdf文件查看其相关信息是十分有必要的,我们可以在命令行输入以下命令,获取各关节继承的关系:
check_urdf mini_cheetah.urdf
结果:
robot name is: mini_cheetah
---------- Successfully Parsed XML ---------------
root Link: body has 4 child(ren)
child(1): abduct_hl
child(1): thigh_hl
child(1): shank_hl
child(1): toe_hl
child(2): abduct_hr
child(1): thigh_hr
child(1): shank_hr
child(1): toe_hr
child(3): abduct_fl
child(1): thigh_fl
child(1): shank_fl
child(1): toe_fl
child(4): abduct_fr
child(1): thigh_fr
child(1): shank_fr
child(1): toe_fr
还可以通过以下命令查看模型的总体结构(关节名称编者修改过):