Franka 机器人控制 GUI 操作完整步骤梳理
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模式)
-
操作:
-
切换到Teach模式,解锁机器人User Stop按钮;
-
按住Guiding Taster(引导按钮)和Zustimmungsschalter(确认开关),手动移动机器人到目标位置;
-
在「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:执行默认/自定义程序
-
操作:
-
在「Program Name」下拉列表选中程序(默认TestProgram);
-
点击「Execute Program」。
-
-
原因:通过GUI快速执行已编译的程序,验证程序逻辑是否正确。
-
结果:机器人按程序指令运动,界面状态显示「MOVE」;若程序出错,状态显示「REFLEX」,需处理异常。
步骤18:处理错误提示
-
操作:当界面显示错误信息时,点击「Acknowledge Errors」按钮。
-
原因:机器人运动中可能出现故障(如碰撞、连接中断),需确认错误后才能继续操作。
-
结果:错误信息清除,机器人回到可操作状态;若错误未解决(如硬件故障),需排查后重新确认。
第三部分:编程开发(核心功能实现,来自Programming文档)
步骤19:在VS Code中加载Docker容器工作区
-
操作:
-
打开VS Code,点击左侧Docker扩展;
-
右键点击容器
gitlab.uni-hannover.de:5050/roboterfabrik/rf_robot_framework:latest,选择「Attach Visual Studio Code」; -
新窗口打开后,导航到
catkin_ws/src/rf_robot_control/src/rf_testprogram.cpp文件。
-
-
原因:VS Code提供代码编辑、自动补全(IntelliSense)功能,Attach容器后可直接编辑容器内的项目文件,无需本地复制。
-
结果:成功加载工作区,可查看/编辑
rf_testprogram.cpp(默认程序文件),支持代码高亮、语法检查。
步骤20:查阅Doxygen文档(获取API支持)
-
操作:
-
打开终端,执行命令:
cd ~/catkin_ws/src/doc && unzip doxygen_output.zip firefox ~/catkin_ws/src/doc/doxygen_output/html/index.html -
在浏览器中点击「Classes」→「Class List」,查看目标类(如RFPTP、RFLIN、RFGripper)及方法(如moveToPoint、grasp)。
-
-
原因:Doxygen文档包含所有框架类、方法的参数说明(如数据类型、功能描述),是编程的核心参考,避免误用API。
-
结果:浏览器打开文档,可查询任意方法的使用方式(如
moveToPoint需传入点位名称和运动时长)。
步骤21:编写自定义程序(以示例任务为例)
前提:已通过GUI教导点位P1、P2、Home
任务1:PTP模式移动到P1并打开夹爪
-
操作:在
rf_testprogram.cpp的execute()函数中添加代码: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:编译并运行自定义程序
-
操作:
-
保存代码(
Ctrl+S); -
在VS Code终端执行
cd ~/catkin_ws && catkin build(重新编译); -
启动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,处于安全的定义状态;避免机器人停在危险位置或保持错误姿态。
关键补充说明
-
两种Setup适配:
-
Setup 1(Control-PC≠Developer-PC):Control-PC仅运行实时容器和控制节点,Developer-PC负责编程、编译、启动GUI,需确保两台设备通过以太网连接;
-
Setup 2(Control-PC=Developer-PC):需在两个终端分别执行Control-PC和Developer-PC的命令(实时容器+控制节点、普通容器+编译+GUI),无需额外设备。
-
-
常见问题解决:
-
程序执行无响应:检查是否重新编译、关节是否解锁、FCI是否激活;
-
夹爪无动作:启动控制节点时确保
load_gripper:=true; -
点位无法加载:确认yaml文件路径正确(
rf_robot_control/config/points.yaml)。
-
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)