引言

上一篇博客中,我们讲解了UR5机械臂的DH参数设置,了解了UR5机械臂在仿真环境中的实际轴向所在的坐标轴,这一节,我们再来熟悉下pybullet中用于接触力测试的仿真环境设置。                                                  

墙面设置

为了测试起见,我们设置了墙壁,进行碰撞实验,来获取接触力。我们查阅pybullet手册,发现官方提供的模型中,并没有“墙”这个模型。因此我们需要用其他模型代替墙,找了一圈,发现盘子这个模型不错,我们可以用盘子的背面来模拟墙壁,只是需要对墙壁的位置进行设置。我们在环境中设置两个位置,分别对应着世界坐标系的两个轴向。

在reset中,我们首先放置地平面,桌子和机械臂

p.loadURDF("plane.urdf", basePosition=[0, 0, -0.65])
self.UR5 = p.loadURDF("ur5_test.urdf", useFixedBase=True)
p.loadURDF("table/table.urdf", basePosition=[0.5, 0, -0.65])

在导入机器人模型的时候,一定要注意一点,就是因为我们在前面已经经pybullet_data路径添加到pybullet搜索目录中,因此我们在当前代码文件夹下一定不能出现模型文件,例如做ur5_test.urdf这个文件,只能出现在pybullet_data中,万万不能出现在代码目录下,这样会导致打开失败。

然后在世界坐标系的x轴和y轴放置盘子。当我们对盘子的姿态不进行设置的时候,盘子默认的位置和姿态如下:

当我们绕着世界坐标系的z轴旋转90度,再沿着旋转后的x轴旋转90度的时候,代码和图像如下:

orientation_wall1 = p.getQuaternionFromEuler([math.pi / 2., 0, math.pi / 2.])
p.loadURDF("tray/tray.urdf", basePosition=[0.8, 0, 0.25], baseOrientation=orientation_wall1)

当我们绕着世界坐标系的z轴旋转180度,再绕着旋转后的坐标系的x轴旋转90度的时候,代码和图像如下:

orientation_wall2 = p.getQuaternionFromEuler([math.pi / 2., 0, math.pi])
p.loadURDF("tray/tray.urdf", basePosition=[0, 0.9, 0.25], baseOrientation=orientation_wall2)

机械臂初始化

在运动之前,我们首先初始化力传感器,由于我们在机械臂的urdf文件中描述工具坐标系姿态同末端连杆坐标系,因此工具固连处的受力与末端关节处受力相同;而力矩与力的作用线长度有关,为了获取更加有效的接触力和力矩,我们选择使用工具坐标系也就是第七关节处的关节力矩传感器。同时使能第六连杆,作为对照。

p.enableJointForceTorqueSensor(self.UR5, 7,1)
p.enableJointForceTorqueSensor(self.UR5, 6,1)

接下来,我们将机械臂运动到大致位置

rest_poses = [0.019493980630576238, -1.6104386316325356, 2.371476945587111, -2.3317793248031182,-1.57079440431533, 0]
for j in range(6):
      p.resetJointState(self.UR5, j + 1, rest_poses[j])
p.stepSimulation()

接下来,我们将主要探讨力接触力设置中的旋转专题。

May the force be with you!