You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python脚本发布ROS话题控制Franka机械臂夹爪张开问题排查

解决Franka Research 3 Python脚本控制夹爪无动作的问题

问题根源

你直接用goal=(0.08, 0.1)发布消息的方式是错误的。franka_gripper/MoveActionGoal是嵌套结构的ROS消息,并非简单的元组参数。它包含三个层级:

  • header:ROS标准消息头,需要包含时间戳和帧ID
  • goal_id:动作目标的唯一标识(可留空)
  • goal:真正的夹爪控制参数,内部包含width和speed字段

rostopic pub命令会自动帮你填充header等默认字段,但Python脚本需要手动构建完整的消息结构。

修正后的夹爪控制代码

1. 张开夹爪的正确实现

# 构建完整的MoveActionGoal消息
open_goal = franka_gripper.msg.MoveActionGoal()
open_goal.header.stamp = rospy.Time.now()
open_goal.goal.width = 0.08
open_goal.goal.speed = 0.1

# 创建Publisher并发布
open_pub = rospy.Publisher('/franka_gripper/move/goal', franka_gripper.msg.MoveActionGoal, queue_size=10)
# 等待Publisher与订阅者建立连接(关键步骤,否则消息可能丢失)
rospy.sleep(0.5)
open_pub.publish(open_goal)

2. 闭合夹爪的正确实现

同理,GraspActionGoal也需要完整构建:

close_goal = franka_gripper.msg.GraspActionGoal()
close_goal.header.stamp = rospy.Time.now()
close_goal.goal.width = 0.03
close_goal.goal.epsilon.inner = 0.005
close_goal.goal.epsilon.outer = 0.005
close_goal.goal.speed = 0.1
close_goal.goal.force = 5.0

close_pub = rospy.Publisher('/franka_gripper/grasp/goal', franka_gripper.msg.GraspActionGoal, queue_size=10)
rospy.sleep(0.5)
close_pub.publish(close_goal)

完整修改后的main函数

替换你原脚本中的main函数即可:

def main():
    try:
        traj = Trajectory()
        
        # Open hand - 修正版
        open_goal = franka_gripper.msg.MoveActionGoal()
        open_goal.header.stamp = rospy.Time.now()
        open_goal.goal.width = 0.08
        open_goal.goal.speed = 0.1
        
        open_pub = rospy.Publisher('/franka_gripper/move/goal', franka_gripper.msg.MoveActionGoal, queue_size=10)
        rospy.sleep(0.5)
        open_pub.publish(open_goal)
        
        # Move arm
        traj.go_to_joint_state(tau/18, -tau/5.71428571, -tau/6.54545455, -tau/3.75, -tau/6.42857143, tau/5.71428571, -tau/51.4285714)

    except rospy.ROSInterruptException:
        return
    except KeyboardInterrupt:
        return

额外注意事项

  • 等待连接:创建Publisher后必须等待短暂时间(如0.5秒),让ROS完成节点间的连接建立,否则发布的消息会直接丢失。
  • 消息结构验证:可以用rostopic info /franka_gripper/move/goal和rosmsg show franka_gripper/MoveActionGoal查看完整的消息结构,确保字段赋值正确。

内容的提问来源于stack exchange,提问作者Arturo Medina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 19:09:54