首页 > 其他分享 >Franka Ros2 Build & Install

Franka Ros2 Build & Install

时间:2024-07-08 22:43:58浏览次数:7  
标签:franka launch 示例 robot state Franka Build Install ros2

! franka_ros2在 Windows 上不受支持。

franka_ros2 repo包含libfranka的 ROS 2 集成 。

 

franka_ros2 正在快速开发中。预计会出现重大变化。在 GitHub上报告错误。

先决条件:

  • ROS 2 Humble 安装( ros-humble-desktop)或带有 DevContainer 的 VSCode IDE。

  • PREEMPT_RT 内核(可选,但强烈推荐)。

  • 对于cartesian_posejoint_positionelbow_position命令接口来说,实时内核是绝对必要的。

  • 系统范围的libfranka 安装。libfranka 的最低支持版本是 0.13.2。这是一个最小示例:

sudo apt install -y libpoco-dev libeigen3-dev
git clone https://github.com/frankaemika/libfranka.git --recursive
cd libfranka
git checkout 0.13.2
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=OFF  ..
cmake --build . -j$(nproc)
cpack -G DEB
sudo dpkg -i libfranka-*.deb

可选的 .bashrc 设置:

  • 要获得彩色的警告和错误消息,您可以将它放入 您的 中。export RCUTILS_COLORIZED_OUTPUT=1.bashrc

  • 如果您的系统语言未设置为美式英语,您应该输入 以避免 RViz 中出现问题。export LC_NUMERIC=en_US.UTF-8.bashrc

设置

从源安装

  1. 安装要求:

    sudo apt install -y \
    ros-humble-ament-cmake \
    ros-humble-ament-cmake-clang-format \
    ros-humble-angles \
    ros-humble-ros2-controllers \
    ros-humble-ros2-control \
    ros-humble-ros2-control-test-assets \
    ros-humble-controller-manager \
    ros-humble-control-msgs \
    ros-humble-control-toolbox \
    ros-humble-generate-parameter-library \
    ros-humble-joint-state-publisher \
    ros-humble-joint-state-publisher-gui \
    ros-humble-moveit \
    ros-humble-pinocchio \
    ros-humble-realtime-tools \
    ros-humble-xacro \
    ros-humble-hardware-interface \
    ros-humble-ros-gz \
    python3-colcon-common-extensions

    2. 创建 ROS 2 工作区:

    mkdir -p ~/franka_ros2_ws/src

      3. 克隆 repo 并构建包:

source /opt/ros/humble/setup.bash
cd ~/franka_ros2_ws
git clone https://github.com/frankaemika/franka_ros2.git src/franka_ros2
git clone https://github.com/frankaemika/franka_description.git src/franka_description
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release
source install/setup.sh

使用 VSCode DevContainer

FrankaROS2 软件包带有 .devcontainer 文件夹,开发人员无需手动安装 ROS2 或 libfranka 即可使用 FrankaROS2 软件包。VSCode DevContainer 工作示意图如下图所示:

  1. 按照 VSCode devcontainer_setup的设置指南进行操作。

  2. 创建 ROS 2 工作区:

mkdir franka_ros2_ws
cd franka_ros2_ws

3. 克隆仓库:

git clone https://github.com/frankaemika/franka_ros2.git src/franka_ros2
git clone https://github.com/frankaemika/franka_description.git src/franka_description

4. 将 .devcontainer 文件夹移动到 franka_ros2_ws 父文件夹:

mv src/franka_ros2/.devcontainer .

5. 打开 VSCode:

code .

6.在 DevContainer 中打开当前文件夹:

ctrl + shift + p

在命令提示符栏中写入:

Dev Containers: Rebuild and Reopen in Container

并在搜索结果中点击此选项

7.在 VScode 中打开终端:

ctrl + `

8. 获取环境:

source /opt/ros/humble/setup.sh

9. 安装 Franka ROS 2 软件包:

colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release
source install/setup.sh

移動

为了检查一切是否正常,你可以尝试在机器人上运行 MoveIt 示例:

ros2 launch franka_moveit_config moveit.launch.py robot_ip:=<fci-ip>

MotionPlanning然后在RViz中激活显示。

如果您没有机器人,您仍然可以通过在虚拟硬件上运行来测试您的设置:

ros2 launch franka_moveit_config moveit.launch.py robot_ip:=dont-care use_fake_hardware:=true

等到您可以在终端内看到 MoveIt 的绿色消息。然后关闭并重新打开。之后再打开。You can start planning now!PlanningSceneMotionPlanning

控制器示例

这个 repo 附带了位于包中的几个示例控制器franka_example_controllers

默认情况下,以下启动文件与夹持器一起执行。如果您未连接夹持器,则可以使用 禁用启动文件中的夹持器load_gripper:=false

移至开始

该控制器将机器人移动到其原始配置。

ros2 launch franka_bringup move_to_start_example_controller.launch.py arm_id:=fr3 robot_ip:=<fci-ip>

重力补偿

这是我们拥有的最简单的控制器,也是编写自己的控制器的良好起点。它将零作为扭矩命令发送到所有关节,这意味着机器人仅补偿其自身重量。
ros2 launch franka_bringup gravity_compensation_example_controller.launch.py arm_id:=fr3 robot_ip:=<fci-ip>

关节阻抗示例

该示例以非常柔顺的周期性运动移动关节 4 和 5。您可以尝试在运行时移动关节。

 

ros2 launch franka_bringup joint_impedance_example_controller.launch.py arm_id:=fr3 robot_ip:=<fci-ip

带 IK 的关节阻抗示例

该示例使用 MoveIt 服务中的 LMA-Orocos 解算器来计算所需姿势的关节位置。所需姿势是周期性地沿 x 和 z 方向移动末端执行器。您可以在 franka_moveit_config 包 kinematics.yaml 文件中更改运动学解算器。

ros2 launch franka_bringup joint_impedance_with_ik_example_controller.launch.py arm_id:=fr3 robot_ip:=<fci-ip>

模型示例控制器

这是一个只读控制器,它打印相对于基准框架的科里奥利力矢量、重力矢量、Joint4 的姿势矩阵、Joint4 主体雅可比矩阵和末端执行器雅可比矩阵。

ros2 launch franka_bringup model_example_controller.launch.py arm_id:=fr3 robot_ip:=<fci-ip>

关节位置示例

此示例向机器人发送周期性位置命令。

位置轨迹需要从机器人的初始位置开始。

要读取机器人的起始位置,您可以在开始发送任何命令之前读取initial_joint_position . state 接口值。

if (initialization_flag_) {
  for (size_t i = 0; i < 7; ++i) {
    initial_q_.at(i) = state_interface[i].get_value();
  }
  initialization_flag_ = false;
}
ros2 launch franka_bringup joint_position_example_controller.launch.py arm_id:=fr3 robot_ip:=<fci-ip>

关节速度示例

此示例向机器人的第 4 和第 5 关节发送周期性速度命令。  
ros2 launch franka_bringup joint_velocity_example_controller.launch.py arm_id:=fr3 robot_ip:=<fci-ip>

笛卡尔姿势示例

 此示例使用 CartesianPose 接口向机器人发送周期性姿势命令。

ros2 launch franka_bringup cartesian_pose_example_controller.launch.py arm_id:=fr3 robot_ip:=<fci-ip>

笛卡尔方向示例

此示例使用 CartesianOrientation 接口发送围绕机器人末端执行器 X 轴的周期性方向命令。

ros2 launch franka_bringup cartesian_orientation_example_controller.launch.py arm_id:=fr3 robot_ip:=<fci-ip>

笛卡尔姿势肘部示例

此示例发送周期性的肘部命令,同时保持末端执行器的姿势恒定。

ros2 launch franka_bringup cartesian_elbow_example_controller.launch.py arm_id:=fr3 robot_ip:=<fci-ip>

笛卡尔速度示例

此示例使用 CartesianVelocity 接口向机器人发送周期性速度命令。

ros2 launch franka_bringup cartesian_velocity_example_controller.launch.py arm_id:=fr3 robot_ip:=<fci-ip>

笛卡尔肘部示例

此示例使用 CartesianElbow 接口向机器人发送周期性肘部命令,同时保持末端执行器速度恒定。

ros2 launch franka_bringup elbow_example_controller.launch.py arm_id:=fr3 robot_ip:=<fci-ip>

软件包描述

本节包含每个包的更详细描述。一般来说,包结构尽量遵循 此处提出的结构。

弗兰卡_bringup

该包包含示例的启动文件以及基本franka.launch.py启动文件,可用于在没有任何控制器的情况下启动机器人。

当您使用以下命令启动机器人时:

ros2 launch franka_bringup franka.launch.py arm_id:=fr3 robot_ip:=<fci-ip> use_rviz:=true

除了 之外,没有其他控制器在运行joint_state_broadcaster。但是,仍然建立了与机器人的连接,并且当前机器人姿势在 RViz 中可视化。在此模式下,当用户按下停止按钮时,可以引导机器人。但是,一旦使用 的控制器effort_command_interface启动,机器人将使用来自 libfranka 的扭矩接口。例如,可以 gravity_compensation_example_controller通过运行以下命令启动:

ros2 control load_controller --set-state active  gravity_compensation_example_controller

这相当于运行重力补偿gravity_compensation_example_controller.launch.py中提到的启动文件 。

当控制器停止时:

ros2 control set_controller_state gravity_compensation_example_controller inactive

机器人将停止扭矩控制,并且仅通过 FCI 发送其当前状态。

您现在可以选择使用以下命令再次启动同一个控制器:

ros2 control set_controller_state gravity_compensation_example_controller active

或者加载并启动另一个:

ros2 control load_controller --set-state active joint_impedance_example_controller

franka_description

从 0.1.14 版本开始,franka_description 包不再在 franka_ros2 存储库中提供。它可在单独的存储库Franka Description中找到。

此包包含用于可视化机器人的 xacro 文件和网格。此外,它还包含一个启动文件,该文件可在无需访问真实机器人的情况下可视化机器人模型:

ros2 launch franka_description visualize_franka.launch.py load_gripper:=<true|false>

franka_example_controllers

此包包含一些控制器,可作为如何在 ROS 2 中编写控制器的示例。目前,控制器只能访问测量的关节位置和关节速度。基于此信息,控制器可以发送扭矩命令。目前无法使用其他接口,如关节位置接口。

弗兰卡夹子

此软件包包含用于franka_gripper_node与 交互的。

提供franka_gripper_node以下操作:

  • homing- 将夹持器归位,并根据安装的手指更新最大宽度。

  • move- 以定义的速度移动到目标宽度。

  • grasp- 尝试以所需的力度抓取所需的宽度,同时以给定的速度闭合。如果d夹爪之间的距离为width - epsilon.inner < d < width + epsilon.outer

  • gripper_action- MoveIt 的特殊抓握动作。

此外,还有一项stop服务可以中止夹持器动作并停止抓取。

使用以下启动文件来启动夹钳:

 
ros2 launch franka_gripper gripper.launch.py robot_ip:=<fci-ip>

您现在可以在不同的选项卡中执行归位并发送抓取命令:

ros2 action send_goal /fr3_gripper/homing franka_msgs/action/Homing {}
ros2 action send_goal -f /fr3_gripper/grasp franka_msgs/action/Grasp "{width: 0.00, speed: 0.03, force: 50}"

内部和外部 epsilon 默认为 0.005 米。您也可以明确设置 epsilon:

ros2 action send_goal -f /fr3_gripper/grasp franka_msgs/action/Grasp "{width: 0.00, speed: 0.03, force: 50, epsilon: {inner: 0.01, outer: 0.01}}"

要停止抓取,您可以使用stop服务:

ros2 service call /fr3_gripper/stop std_srvs/srv/Trigger {}

弗兰卡_硬件

自 0.1.14 版本起的重大变化:franka_hardwarerobot_state 和 robot_model 将以 为前缀arm_id

  • panda/robot_model  -> ${arm_id}/robot_model

  • panda/robot_state  -> ${arm_id}/robot_state

状态和命令接口的命名没有变化。它们以 URDF 中的关节名称作为前缀。

 

此软件包包含ros2_controlfranka_hardware所需的插件。该插件从机器人的 URDF 加载并通过机器人描述传递给控制器​​管理器。它为每个关节提供:

  • 包含测量的关节位置。position state interface

  • 包含测量的关节速度。velocity state interface

  • 包含测量的链接侧关节扭矩。effort state interface

  • 包含机器人初始关节位置的。initial_position state interface

  • 包含无重力情况下所需的关节扭矩。effort command interface

  • 包含 所需关节位置的。position command interface

  • 包含 所需关节速度的。velocity command interface

此外

  • 包含franka_robot_state机器人状态信息franka_robot_state

  • 包含franka_robot_model_interface指向模型对象的指针。

重要的

franka_robot_statefranka_robot_model_interface状态接口不应直接从硬件状态接口使用。相反,它们应该由franka_semantic_components接口使用。

机器人的 IP 是通过 URDF 中的参数读取的。

franka_语义组件

该包包含franka_robot_model、franka_robot_state和cartesian命令类。这些类用于转换franka_robot_model对象和franka_robot_state对象,它们以双指针形式存储在hardware_state_interface中。

有关如何使用这些类的更多参考: Franka Robot State Broadcaster 和 Franka Example Controllers(model_example_controller)

  • 笛卡尔位姿界面:

此接口用于使用借出的命令接口向机器人发送笛卡尔姿势命令。FrankaSemanticComponentInterface 类负责处理借出的命令接口和状态接口。在启动笛卡尔姿势接口时,用户需要向构造函数传递一个布尔标志,以指示该接口是否用于肘部。

auto is_elbow_active = false;
CartesianPoseInterface cartesian_pose_interface(is_elbow_active);

该接口允许用户读取franka硬件接口设置的当前姿势命令接口值。

std::array<double, 16> pose;
pose = cartesian_pose_interface.getInitialPoseMatrix();

人们还可以读取特征格式的四元数和平移值。

Eigen::Quaterniond quaternion;
Eigen::Vector3d translation;
std::tie(quaternion, translation) = cartesian_pose_interface.getInitialOrientationAndTranslation();

设置好笛卡尔接口后,您需要在控制器中执行assign_loaned_command_interfacesassign_loaned_state_interfaces。这需要在控制器的 on_activate() 函数中完成。示例可以在 分配借出的命令接口示例中找到

cartesian_pose_interface.assign_loaned_command_interfaces(command_interfaces_);
cartesian_pose_interface.assign_loaned_state_interfaces(state_interfaces_);

在控制器的更新功能中,您可以向机器人发送姿势命令。

std::array<double, 16> pose;
pose = {1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0.5, 0, 0.5, 1};
cartesian_pose_interface.setCommanded(pose);

或者您可以以 Eigen 格式发送四元数、平移值。

Eigen::Quaterniond quaternion(1, 0, 0, 0);
Eigen::Vector3d translation(0.5, 0, 0.5);
cartesian_pose_interface.setCommand(quaternion, translation);
  • 笛卡尔速度接口:

此接口用于使用借出的命令接口向机器人发送笛卡尔速度命令。FrankaSemanticComponentInterface 类负责处理借出的命令接口和状态接口。

 
auto is_elbow_active = false;
CartesianVelocityInterface cartesian_velocity_interface(is_elbow_active);

要将速度命令发送给机器人,您需要在自定义控制器中分配_loaned_command_interface。

cartesian_velocity_interface.assign_loaned_command_interface(command_interfaces_);

在控制器的更新功能中,您可以向机器人发送笛卡尔速度命令。

std::array<double, 6> cartesian_velocity;
cartesian_velocity = {0, 0, 0, 0, 0, 0.1};
cartesian_velocity_interface.setCommand(cartesian_velocity);

franka_robot_state_broadcaster

此包包含只读的 franka_robot_state_broadcaster 控制器。它将 franka_robot_state 主题发布到名为/franka_robot_state_broadcaster/robot_state 的主题。此控制器节点由 franka_bringup 中的 franka_launch.py​​ 生成。因此,所有包含 franka_launch.py​​ 的示例都会发布 robot_state 主题。

弗兰卡MoveIt配置

此包包含 MoveIt2 的配置。有一个名为 的新移动组 panda_manipulator,其尖端位于夹持器手指之间,其 Z 轴旋转 -45 度,因此 X 轴现在朝前,使其更易于使用。移动组panda_arm仍然可用,以实现向后兼容。新应用程序应改用新的panda_manipulator移动组。

 新旧移动组的可视化

弗兰卡消息

该包包含不同夹持器动作和机器人状态消息的定义。

联合作用力轨迹控制器

此包包含一个经过修改的 joint_trajectory_controller,可以使用的努力接口 franka_hardware::FrankaHardwareInterface。它基于此 Pull 请求

笔记

由于修复程序已在 ros2_controllers主分支中可用,因此此软件包将很快被删除。一旦将其反向移植到 Humble,它将从 franka_ros2 存储库中删除。

弗兰卡凉亭

重要的

franka_description最低版本要求为 0.3.0。你可以从https://github.com/frankaemika/franka_description克隆 franka_description 包。

将 Franka ROS 2 与 Gazebo 模拟器集成的项目。

启动 RVIZ + Gazebo

启动一个生成 RVIZ 和 Gazebo 来显示机器人的示例:

 

ros2 launch franka_gazebo_bringup visualize_franka_robot.launch.py

如果要显示另一个机器人,可以定义arm_id:

ros2 launch franka_gazebo_bringup visualize_franka_robot.launch.py arm_id:=fp3

如果您想启动包括 franka_hand 的模拟:

ros2 launch franka_gazebo_bringup visualize_franka_robot.launch.py load_gripper:=true franka_hand:='franka_hand'

使用 Gazebo 的关节速度控制示例

开始之前,请确保构建了franka_example_controllersfranka_description包。franka_description 的最低版本必须是 0.3.0。

colcon build --packages-select franka_example_controllers

现在您可以使用 Gazebo 模拟器启动速度示例。 

ros2 launch franka_gazebo_bringup gazebo_joint_velocity_controller_example.launch.py load_gripper:=true franka_hand:='franka_hand'

请记住,夹持器关节与关节速度控制器存在错误。如果您有兴趣控制夹持器,请使用关节位置界面。

使用 Gazebo 的关节位置控制示例

要运行关节位置控制示例,您需要在关节速度控制部分列出所需的软件。

然后您可以使用以下命令运行。

ros2 launch franka_gazebo_bringup gazebo_joint_position_controller_example.launch.py load_gripper:=true franka_hand:='franka_hand'

Gazebo 的联合阻抗控制示例

对于运行扭矩示例。您必须编译位于franka_gazebo下的franka_ign_ros2_control包。您可以使用以下命令编译franka_ign_ros2_control 。

colcon build --packages-select franka_ign_ros2_control

然后获取您的工作区。

source install/setup.sh

 

然后您可以运行阻抗控制示例。

ros2 launch franka_gazebo_bringup gazebo_joint_impedance_controller_example.launch.py load_gripper:=true franka_hand:='franka_hand'

故障排除

如果您遇到 Gazebo 找不到您的模型文件的情况,请尝试包含工作区。例如

export GZ_SIM_RESOURCE_PATH=${GZ_SIM_RESOURCE_PATH}:/workspaces/src/

 

标签:franka,launch,示例,robot,state,Franka,Build,Install,ros2
From: https://www.cnblogs.com/ai-ldj/p/18290817

相关文章

  • ROS 2 Humble Install
    设置区域确保您的语言环境支持UTF-8。如果您处于最小环境(例如docker容器),语言环境可能像一样最小POSIX。我们使用以下设置进行测试。但是,如果您使用其他支持UTF-8的语言环境,应该没问题。locale#checkforUTF-8sudoaptupdate&&sudoaptinstalllocalessudoloca......
  • VSCode中 npm install 安装依赖包太慢了,一直加载不出来问题解决
    1.问题描述采用VSCode打开别人传过来的项目时,需要先加载依赖包,一般是通过终端来加载:终端中输入npminstall. 但是采用npminstall安装依赖包出现问题,一直加载不完,卡到某一地方,如图: 2.尝试解决2.1采用淘宝镜像,依旧慢,最后证书过期2.2采用pnpminstall(做了一部分)npmins......
  • Franka Linux 设置实时内核 PREEMPT_RT
    为了使用控制您的机器人libfranka,工作站PC上的控制器程序必须在内核下以实时优先级PREEMPT_RT运行。本节介绍了修补内核以支持 PREEMPT_RT并创建安装包的过程。内核不支持NVIDIA二进制驱动程序PREEMPT_RT。 sudoapt-getinstallbuild-essentialbccurlca-certific......
  • Franka 在Linux上安装
    本章介绍如何安装libfranka和franka_ros(作为二进制包或从源代码构建),以及如何安装实时Linux内核。仅当您想使用ROSfranka_ros控制机器人时才需要。虽然libfranka软件包franka_ros可以在不同的Linux发行版上运行,但目前官方仅支持:Ubuntu18.04LTS BionicBeaver和ROS Mel......
  • Franka libfranka 最低系统要求和网络要求
    本页仅指定了运行Franka控制接口(FCI)的要求。其他要求在您随机器人收到的文件中指定。工作站电脑最低系统要求操作系统带有PREEMPT_RT修补内核的Linux 或Windows10(实验性)网卡100BASE-TX由于机器人以1kHz的频率发送数据,因此工作站PC的配......
  • Install the Operating System of Windows and Linux on the Laptop
    EnvironmentsWindows11Ubuntu24.04LTSLaptop:YogaPro14SARH7AllocatedDiskForUbuntu:146.5GBStepI:DownloadUbuntuPackageDownloadtheUbuntuISOfilefromtheofficialwebsite:https://ubuntu.com/download/desktopJustselecttheversion......
  • Franka libfranka与FCI的关系
    libfranka确实是直接与FrankaEmika机器人进行交互的,那为什么使用FCI指挥时还需要连接到车间网络而不是机器人网络呢?这主要是因为FCI(FrankaControlInterface)和libfranka有着不同的功能和使用场景:libfranka:libfranka是一个C++库,提供了直接访问FrankaEmika机器人硬......
  • Franka Ros Moveit 基于关节空间的目标位置运动
    #include<cmath>#include<iostream>#include<moveit/move_group_interface/move_group_interface.h>#include<moveit/planning_scene_interface/planning_scene_interface.h>#include<ros/ros.h>#include<sensor_msgs/JointSta......
  • Franka libfranka 基于笛卡尔空间位置控制
    #include<array>#include<cmath>#include<iostream>#include<franka/exception.h>#include<franka/model.h>#include<franka/robot.h>#include<franka/tools.h>intmain(intargc,char**argv){try{//......
  • Franka libfranka 基于笛卡尔空间位置的运动控制
    #include<array>#include<cmath>#include<iostream>#include<franka/exception.h>#include<franka/model.h>#include<franka/robot.h>#include<franka/tools.h>intmain(intargc,char**argv){try{//......