拾放示例

让我们深入研究并仿真将石头从 A 运输到 B。运行以下命令以启动伴有 Panda 和示例 world 的 Gazebo。

roslaunch franka_gazebo panda.launch x:=-0.5     
world:=$(rospack find franka_gazebo)/world/stone.sdf     
controller:=cartesian_impedance_example_controller     
rviz:=true

这将打开 Gazebo GUI,可以在其中看到带有石头和 RViz 的环境,可以用它来控制机器人的末端执行器位姿。

_images/franka-gazebo-example.png

取放示例的 Gazebo GUI(左)和 RViz(右)

要打开夹爪,只需向 move action 发送一个目标,类似于真正的 franka_gripper 的工作方式。让我们将夹爪以 10cms 移动到手指之间的宽度为 8cm:

rostopic pub --once /franka_gripper/move/goal franka_gripper/MoveActionGoal "goal: { width: 0.08, speed: 0.1 }"

由于我们使用 franka_example_controllers 的笛卡尔阻抗控制器启动了我们的机器人,因此可以使用 RViz 中的交互式标记 Gizmo 移动末端执行器,就像在现实中一样。移动机器人,使白色石头位于夹爪的手指之间,准备好被捡起。

备注

如果机器人的肘部移动很奇怪,这是因为笛卡尔阻抗示例控制器的默认零空间刚度设置为低。如有必要,启动 Dynamic Reconfigure 并调整 panda > cartesian_impedance_example_controller > nullspace_stiffness

为了拾取物体,这次我们使用 grasp action,因为我们想在抓握后施加一个力,使物体不掉落。石头宽约 3cm,重 50g 。让我们用 5N 来抓取它:

rostopic pub --once /franka_gripper/grasp/goal 
             franka_gripper/GraspActionGoal 
                          "goal: { width: 0.03, epsilon:{ inner: 0.005, outer: 0.005 }, speed: 0.1, force: 5.0}"

备注

在 Gazebo 的顶部菜单中,转到 View > Contacts 以可视化接触点和力

如果抓取成功,手指现在将把石头固定到位。如果不是,则可能是目标公差(内部和外部 epsilon)太小并且 action 失败。现在将物体轻轻地移到红色的落点区域。

_images/franka-gazebo-example-grasp.png

把石头从蓝色运到红色区域

将其轻轻放在红色垫子上后,通过夹爪的 stop action 停止抓握:

rostopic pub --once /franka_gripper/stop/goal franka_gripper/StopActionGoal {}

请注意,接触力现在消失了,因为不再施加力了。或者,也可以使用 move action。