Franka 机器人控制 GUI 操作完整步骤梳理

以下是整合两份文档后,按「环境搭建→GUI操作→编程开发→异常处理」逻辑梳理的完整步骤,每个步骤均说明「操作细节」「执行原因」「预期结果」,帮你清晰掌握每一步的核心逻辑:

第一部分:基础环境搭建(启动必备)

步骤1:启动Franka Emika机器人控制器

  • 操作:开启Franka机器人的控制器设备(硬件启动)。

  • 原因:机器人控制器是机器人的核心控制单元,必须先启动才能建立后续连接和控制。

  • 结果:控制器通电运行,为后续解锁关节、激活FCI做准备。

步骤2:通过浏览器访问Franka Desk界面

  • 操作:在连接控制器的设备上打开浏览器,输入机器人IP地址,进入Franka Desk Interface。

  • 原因:Franka Desk是机器人的web管理界面,仅能通过它完成关节解锁和FCI激活(核心控制接口)。

  • 结果:成功打开Franka Desk界面,可看到关节状态、FCI激活选项等控制入口。

步骤3:解锁机器人关节

  • 操作:在Franka Desk中点击「Open fail safe locking system」,解锁关节。

  • 原因:关节默认锁定是安全机制,解锁后机器人才可接收运动指令;若不解锁,后续控制节点无法执行运动命令。

  • 结果:机器人轻微移动,界面颜色从黄色变为白色,关节处于可运动状态。

步骤4:激活FCI(Franka Control Interface)

  • 操作:在Franka Desk右侧菜单点击「Activate FCI」,避免误点「Deactivate FCI」。

  • 原因:FCI是机器人与外部框架(RF Framework)通信的核心接口,未激活则无法通过ROS节点控制机器人。

  • 结果:FCI状态显示「active」,浏览器窗口可最小化/关闭,不影响后续操作。

步骤5:安装终端多路复用器(可选但推荐)

  • 操作:在Control-PC/Developer-PC中执行命令 sudo apt install terminator;使用快捷键 Ctrl+Shift+O 水平分割窗口、Ctrl+Shift+E 垂直分割窗口。

  • 原因:后续需要同时运行多个终端(控制节点、编译、GUI启动等),Terminator可在单个窗口内管理多个终端,提升操作效率。

  • 结果:成功安装Terminator,后续可快速切换多个终端任务,无需频繁打开新窗口。

步骤6:Control-PC启动实时Docker容器

  • 操作:打开Control-Terminal,执行命令 contkernel

  • 原因:RF Framework的核心组件(franka_ros、ros_control)需要实时内核支持,contkernel 启动的容器自带实时能力,确保运动控制的实时性。

  • 结果:实时Docker容器启动,为后续启动控制节点提供运行环境。

步骤7:启动FCI连接控制节点

  • 操作:在Control-Terminal中执行命令 roslaunch rf_robot_control Panda.launch robot_ip:=<Roboter IP> load_gripper:=true(替换 <Roboter IP> 为实际IP,如192.168.1.11)。

  • 原因:该命令建立Control-PC与机器人的FCI通信连接,加载夹爪(gripper)控制模块,是后续GUI和程序控制机器人的桥梁。

  • 结果:控制节点启动成功,终端显示无报错;若关节未解锁或IP错误,会提示连接失败。

步骤8:Developer-PC启动普通Docker容器

  • 操作:打开Developer-Terminal,执行命令 cont;若需使用USB摄像头等外部设备,需在启动容器前连接设备。

  • 原因cont 命令会搭建包含 qr_tracker 等开发包的工作区(catkin_ws),提供编程、编译所需的依赖环境;外部设备需提前连接,否则容器无法识别。

  • 结果:普通Docker容器启动,工作区搭建完成,可进行代码编写和项目编译。

步骤9:编译项目(Developer-PC)

  • 操作:在Developer-Terminal中执行命令:

    
    cd ~/catkin_ws
    catkin build
    
  • 原因:项目代码需编译后才能生成可执行文件,后续启动GUI和运行自定义程序都依赖编译结果。

  • 结果:项目编译成功,生成对应的可执行文件和ROS节点;若代码有语法错误,会提示编译失败,需修正后重新编译。

步骤10:启动RF Robot Control GUI

  • 操作:在Developer-Terminal中执行命令 rosrun rf_robot_control node

  • 原因:GUI是可视化操作界面,可直观完成点位教导、程序执行、状态监控等操作,无需直接输入命令。

  • 结果:RF Robot Control界面打开,默认显示Move模式、Real Robot状态(蓝色边框),可看到已保存的点位(如Home)和默认程序(TestProgram)。

第二部分:GUI核心操作(编程前准备,来自Programming文档)

步骤11:切换GUI工作模式(Move/Teach/Jog)

  • 操作:点击GUI顶部的「Move」「Teach」「Jog」标签切换模式。

    • Move:执行已教导的点位运动或自定义程序;

    • Teach:手动教导并保存机器人点位;

    • Jog:调整7轴机器人的关节角度(仅支持Simulation模式)。

  • 原因:不同操作目标对应不同模式,需根据需求切换(如教导点位需切到Teach,执行程序需切到Move)。

  • 结果:界面功能适配当前模式,如Teach模式显示「Teach Position」按钮,Jog模式仅在绿色边框的Simulation模式下可用。

步骤12:切换Real Robot/Simulation模式

  • 操作:点击GUI中的「Real Robot」(蓝色边框)或「Simulation」(绿色边框)切换。

  • 原因:Real Robot模式用于控制物理机器人,Simulation模式用于离线测试程序(无需物理机器人),避免调试时损坏设备。

  • 结果:切换后界面边框颜色变化,Jog模式仅在Simulation下激活;Real Robot模式下操作直接作用于物理机器人。

步骤13:教导并保存点位(Teach模式)

  • 操作

    1. 切换到Teach模式,解锁机器人User Stop按钮;

    2. 按住Guiding Taster(引导按钮)和Zustimmungsschalter(确认开关),手动移动机器人到目标位置;

    3. 在「Point Name」输入点位名称(如P1),点击「Teach Position」保存。

  • 原因:自定义程序需基于已教导的点位执行运动,点位是运动控制的基础数据。

  • 结果:点位自动保存到 rf_robot_control/config/points.yaml 文件,在Point Name下拉列表中可查看;无需手动保存,修改/删除后自动同步到文件。

步骤14:加载/删除/移动到已保存点位

  • 操作

    • 加载:点击「Load Points」,选择已保存的yaml格式点位文件;

    • 删除:在Point Name下拉列表选中点位,点击「Delete point」;

    • 移动:选中点位,点击「Move to Point」。

  • 原因:可复用历史点位(加载功能)、清理无用点位(删除功能)、快速让机器人到达目标位置(移动功能)。

  • 结果:加载后点位显示在下拉列表;删除后点位从列表和yaml文件中移除;移动后机器人按当前模式(Real/Simulation)运动到目标点位。

步骤15:调整机器人运动速度

  • 操作:拖动GUI中的「Speed Override」滑块(百分比),调整运动速度。

  • 原因:根据场景调整速度(如调试时用低速,正式运行时用高速),避免速度过快导致碰撞。

  • 结果:机器人运动速度按滑块比例调整(如10%表示以10%最大速度运动)。

步骤16:控制夹爪(Gripper)

  • 操作:点击GUI中的「Toggle Gripper」按钮。

  • 原因:夹爪的开合是抓取/放置物体的核心操作,需通过该按钮快速测试夹爪功能。

  • 结果:夹爪在「打开」和「关闭」状态间切换;若未加载夹爪(load_gripper:=false),则操作无效。

步骤17:执行默认/自定义程序

  • 操作

    1. 在「Program Name」下拉列表选中程序(默认TestProgram);

    2. 点击「Execute Program」。

  • 原因:通过GUI快速执行已编译的程序,验证程序逻辑是否正确。

  • 结果:机器人按程序指令运动,界面状态显示「MOVE」;若程序出错,状态显示「REFLEX」,需处理异常。

步骤18:处理错误提示

  • 操作:当界面显示错误信息时,点击「Acknowledge Errors」按钮。

  • 原因:机器人运动中可能出现故障(如碰撞、连接中断),需确认错误后才能继续操作。

  • 结果:错误信息清除,机器人回到可操作状态;若错误未解决(如硬件故障),需排查后重新确认。

第三部分:编程开发(核心功能实现,来自Programming文档)

步骤19:在VS Code中加载Docker容器工作区

  • 操作

    1. 打开VS Code,点击左侧Docker扩展;

    2. 右键点击容器 gitlab.uni-hannover.de:5050/roboterfabrik/rf_robot_framework:latest,选择「Attach Visual Studio Code」;

    3. 新窗口打开后,导航到 catkin_ws/src/rf_robot_control/src/rf_testprogram.cpp 文件。

  • 原因:VS Code提供代码编辑、自动补全(IntelliSense)功能,Attach容器后可直接编辑容器内的项目文件,无需本地复制。

  • 结果:成功加载工作区,可查看/编辑 rf_testprogram.cpp(默认程序文件),支持代码高亮、语法检查。

步骤20:查阅Doxygen文档(获取API支持)

  • 操作

    1. 打开终端,执行命令:

      
      cd ~/catkin_ws/src/doc && unzip doxygen_output.zip
      firefox ~/catkin_ws/src/doc/doxygen_output/html/index.html
      
    2. 在浏览器中点击「Classes」→「Class List」,查看目标类(如RFPTP、RFLIN、RFGripper)及方法(如moveToPoint、grasp)。

  • 原因:Doxygen文档包含所有框架类、方法的参数说明(如数据类型、功能描述),是编程的核心参考,避免误用API。

  • 结果:浏览器打开文档,可查询任意方法的使用方式(如 moveToPoint 需传入点位名称和运动时长)。

步骤21:编写自定义程序(以示例任务为例)

前提:已通过GUI教导点位P1、P2、Home
任务1:PTP模式移动到P1并打开夹爪
  • 操作:在 rf_testprogram.cppexecute() 函数中添加代码:

    
    RFPTP ptp(*m_pNodeHandle); // 初始化PTP运动类
    ptp.moveToPoint("P1", 2.0); // 2秒内移动到P1
    RFGripper gripper(*m_pNodeHandle); // 初始化夹爪类
    gripper.open(); // 打开夹爪
    
  • 原因:PTP模式(关节空间运动)适合快速移动,打开夹爪为后续抓取物体做准备。

  • 结果:编译运行后,机器人2秒内移动到P1,夹爪自动打开。

任务2:线性移动(RFLIN)5cm向下(速度0.1m/s)
  • 操作:添加代码:

    
    RFLIN lin(*m_pNodeHandle); // 初始化线性运动类
    lin.setSpeed(0.1); // 设置最大速度0.1m/s
    // 相对当前点(P1)向下移动5cm(z轴偏移-0.05m)
    lin.moveRelativeToPoint(0.0, 0.0, -0.05, 0.0, 0.0, 0.0);
    
  • 原因:线性运动(笛卡尔空间)适合精准定位,相对移动无需重新教导点位,灵活调整位置。

  • 结果:机器人从P1沿z轴负方向移动5cm,速度控制在0.1m/s。

任务3:抓取1cm边长的立方体
  • 操作:添加代码:

    
    // 预期物体宽度0.01m,速度0.05m/s,抓取力20N
    gripper.grasp(0.01, 0.05, 20);
    
  • 原因grasp() 方法需传入物体宽度、夹爪速度、抓取力,确保稳定抓取目标物体。

  • 结果:夹爪闭合抓取物体,若未检测到物体(宽度不匹配),会抛出运行时异常。

任务4:线性移动到P2(默认速度)
  • 操作:添加代码:

    
    lin.resetToDefaultValues(); // 恢复默认速度(0.25m/s)
    lin.moveToPoint("P2"); // 移动到P2
    
  • 原因:默认速度适合常规移动,无需自定义速度时调用 resetToDefaultValues() 简化操作。

  • 结果:机器人以默认速度线性移动到P2,抓取的物体随机器人移动。

任务5:放置物体(打开夹爪)
  • 操作:添加代码:

    
    gripper.open(); // 打开夹爪,放置物体
    
  • 原因:到达目标位置后打开夹爪,完成物体放置动作。

  • 结果:夹爪打开,物体留在P2位置。

任务6:PTP模式返回Home点位
  • 操作:添加代码:

    
    ptp.moveToPoint("Home", 2.0); // 2秒内返回Home
    
  • 原因:任务结束后返回初始位置(Home),便于下次操作,提升流程规范性。

  • 结果:机器人2秒内返回Home点位,程序执行完成。

步骤22:编译并运行自定义程序

  • 操作

    1. 保存代码(Ctrl+S);

    2. 在VS Code终端执行 cd ~/catkin_ws && catkin build(重新编译);

    3. 启动GUI(rosrun rf_robot_control node),在Program Name选中自定义程序,点击「Execute Program」。

  • 原因:代码修改后必须重新编译才能生成新的可执行文件,否则运行的仍是旧程序。

  • 结果:编译成功后,GUI中可选择自定义程序,执行后机器人按编写的逻辑完成抓取-放置流程。

第四部分:异常处理(保障运行安全,来自Programming文档)

步骤23:添加try-catch块处理异常

  • 操作:在程序关键代码(如抓取、运动)外层添加try-catch块:

    
    try {
      lin.moveToPoint("Pickup");
      gripper.grasp(0.015, 0.05, 20); // 预期物体宽度0.015m
    } catch (const std::runtime_error &e) {
      // 输出错误信息
      ROS_ERROR_STREAM("Gripper grasp failed. Aborting and moving back to Home: " << e.what());
      gripper.open(); // 打开夹爪
      ptp.moveToPoint("Home", 2.0); // 返回Home
      throw; // 重新抛出异常,标记程序执行失败
    }
    
  • 原因:物理机器人可能出现不可预期的错误(如未放置物体、碰撞),未处理的异常会导致程序中断,机器人停在错误位置,存在安全风险。

  • 结果:当抓取失败(如无物体)时,终端输出错误信息,机器人打开夹爪并返回Home,处于安全的定义状态;避免机器人停在危险位置或保持错误姿态。

关键补充说明

  1. 两种Setup适配

    • Setup 1(Control-PC≠Developer-PC):Control-PC仅运行实时容器和控制节点,Developer-PC负责编程、编译、启动GUI,需确保两台设备通过以太网连接;

    • Setup 2(Control-PC=Developer-PC):需在两个终端分别执行Control-PC和Developer-PC的命令(实时容器+控制节点、普通容器+编译+GUI),无需额外设备。

  2. 常见问题解决

    • 程序执行无响应:检查是否重新编译、关节是否解锁、FCI是否激活;

    • 夹爪无动作:启动控制节点时确保 load_gripper:=true

    • 点位无法加载:确认yaml文件路径正确(rf_robot_control/config/points.yaml)。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐