franka_example_controllers
该软件包包含了一些用于展示如何在 ROS 2 中编写控制器的示例控制器。目前,控制器只能访问测量到的关节位置和关节速度。基于这些信息,控制器可以发送力矩指令。目前尚不支持使用其他接口,例如关节位置接口。
示例控制器
该仓库附带了一些示例控制器,位于 franka_example_controllers 软件包中。
以下启动文件默认会启用夹爪。如果未安装夹爪,可以在启动文件中通过 load_gripper:=false 来禁用夹爪。
移动至起始位置
该控制器将机器人移动到其初始构型。
ros2 launch franka_bringup example.launch.py controller_name:=move_to_start_example_controller
重力补偿
这是最简单的控制器,也是编写自定义控制器的良好起点。它向所有关节发送零力矩指令,意味着机器人仅补偿自身的重力。
ros2 launch franka_bringup example.launch.py controller_name:=gravity_compensation_example_controller
夹爪示例
演示如何使用 Franka 动作接口(Action Interface) 控制 Franka Hand(即夹爪)。控制器会发送 目标(Goals),使夹爪以设定的抓取尺寸(包含公差 epsilon)反复执行闭合和张开操作。系统会根据物体的尺寸及设定的公差来判断抓取是否成功。
ros2 launch franka_bringup example.launch.py controller_name:=gripper_example_controller
关节阻抗示例
该示例以较高的顺应性周期性地驱动第 4 和第 5 个关节。在运行时,用户可以尝试手动移动这些关节。
ros2 launch franka_bringup example.launch.py controller_name:=joint_impedance_example_controller
带逆解(IK)的关节阻抗示例
该示例使用 MoveIt 服务中的 LMA-Orocos 求解器计算期望位姿对应的关节位置。期望位姿使末端执行器在 X 和 Z 方向上周期性移动。可以在 franka_fr3_moveit_config 软件包中的 kinematics.yaml 文件中更改运动学求解器。
ros2 launch franka_bringup joint_impedance_with_ik_example_controller.launch.py
模型示例控制器
这是一个只读控制器,会输出科氏力向量、重力向量、第 4 关节的位姿矩阵、第 4 关节的刚体雅可比矩阵,以及相对于基坐标系的末端执行器雅可比矩阵。
ros2 launch franka_bringup example.launch.py controller_name:=model_example_controller
关节位置示例
该示例周期性地向机器人发送位置指令。
ros2 launch franka_bringup example.launch.py controller_name:=joint_position_example_controller
关节速度示例
该示例周期性地向机器人的第 4 与第 5 个关节发送速度指令。
ros2 launch franka_bringup example.launch.py controller_name:=joint_velocity_example_controller
笛卡尔位姿示例
该示例使用笛卡尔位姿接口向机器人周期性发送位姿指令。
ros2 launch franka_bringup example.launch.py controller_name:=cartesian_pose_example_controller
笛卡尔姿态示例
该示例使用笛卡尔姿态接口,使机器人的末端执行器围绕 X 轴周期性地改变姿态。
ros2 launch franka_bringup example.launch.py controller_name:=cartesian_orientation_example_controller
笛卡尔位姿肘部示例
该示例在保持末端执行器位姿不变的情况下,周期性地发送肘部控制指令。
ros2 launch franka_bringup example.launch.py controller_name:=cartesian_elbow_example_controller
笛卡尔速度示例
该示例使用笛卡尔速度接口向机器人周期性发送速度指令。
ros2 launch franka_bringup example.launch.py controller_name:=cartesian_velocity_example_controller
笛卡尔肘部示例
该示例使用笛卡尔肘部接口,在保持末端执行器速度恒定的情况下周期性地发送肘部控制指令。
ros2 launch franka_bringup example.launch.py controller_name:=elbow_example_controller
编写自定义控制器
与 franka_ros 相比,目前仅提供了较少的控制器接口:
关节位置
关节速度
测量力矩
Franka 机器人状态
Franka 机器人模型
重要
Franka 机器人状态由 franka_robot_state_broadcaster 软件包发布到主题 /franka_robot_state_broadcaster/robot_state。
重要
建议通过 franka_semantic_components 类来访问 Franka 机器人状态和 Franka 机器人模型。它们在 state_interface 中以双指针形式存储,并在 franka_semantic_component 类中被还原为原始对象。
使用 franka_model 的示例可在 franka_example_controllers 软件包中找到:model_example_controller。
可以基于本软件包中的示例控制器编写自定义控制器。若需计算机器人的运动学与动力学量,可以结合关节状态与机器人 URDF 文件,使用例如 KDL 等库(该库也提供 ROS 2 版本)。