首页 > 其他分享 >ROS2 Moveit2 - URDF 和 SRDF

ROS2 Moveit2 - URDF 和 SRDF

时间:2024-08-20 21:06:51浏览次数:5  
标签:机器人 description URDF robot SRDF 关节 Moveit2 ROS2

URDF

MoveIt 2 从 URDF(统一机器人描述格式)开始,这是用于在 ROS 和 ROS2 中描述机器人的原生格式。在本教程中,您将找到 URDF 的资源、重要提示以及 MoveIt 2 特定要求的列表。

URDF 资源

注意:虽然上面的文档是为 ROS 编写的,但只要您将命令从 ROS 更改为 ROS2(即:rosrun -> ros2 run 或 roslaunch -> ros2 launch),所有文档都是有效的.

重要提示

本部分包含一组提示,用于确保您生成的 URDF 可以与 MoveIt 2 一起使用。在开始将 MoveIt 2 与机器人一起使用之前,请确保您阅读了所有这些提示。

关节名称中的特殊字符

关节名称不应包含以下任何特殊字符:-,[,],(,),

我们希望能够尽快摆脱对联名的这些限制。

安全限制

翻译:

一些URDF文件除了机器人的关节限制外还设置了安全限制。下面是为熊猫机器人头盘关节指定的安全控制器的示例:

<safety_controller k_position="100" k_velocity="1.5" soft_lower_limit="-2.857" soft_upper_limit="2.857"/>

“soft_lower_limit”字段和“soft_upper_limit”字段指定了该关节的关节位置限制。MoveIt 2 将比较这些限制和 URDF 中指定的关节硬限制,并选择更保守的限制。

注意:如果safety_controller中的“soft_lower_limit”和“soft_upper_limit”设置为0.0,您的关节将无法移动。MoveIt 2 依赖于您指定正确的机器人模型。

碰撞检查

MoveIt 2 使用 URDF 中指定的meshes(网格)进行冲突检查。URDF 允许您分别指定两组网格用于可视化和碰撞检测。一般来说,可视化网格可以详细且美观,但碰撞检测网格应该简单得多。网格中的三角形数量会影响碰撞检测机器人链接所需的时间。整个机器人的三角形数量应该在几千个左右。

Test your URDF

测试您的 URDF 并确保一切正常非常重要。ROS URDF 软件包提供了一个check_urdf工具。要使用 check_urdf 工具验证 URDF,请按照此处的说明进行操作。

URDF 示例

有许多 URDF 可用于使用 ROS 的机器人。

SRDF

SRDF 或语义机器人描述格式是对 URDF 的补充,并指定了关节组、默认机器人配置、其他碰撞检查信息以及完全指定机器人姿势可能需要的其他转换。生成 SRDF 的推荐方法是使用 MoveIt Setup Assistant。

虚拟关节

URDF 仅包含有关机器人物理关节的信息。通常,需要定义额外的关节,以指定机器人上根链接相对于世界坐标系的位置。在这种情况下,使用虚拟关节来指定此连接。例如,像PR2这样的移动机器人在平面上移动是使用平面虚拟关节来指定的,该平面虚拟关节将世界坐标系连接到机器人的坐标系上。一个固定的机器人(如工业机械手)应该通过固定的关节连接到世界。

被动接头(Passive Joints)

被动关节是机器人上的未致动关节,例如差速驱动机器人上的被动脚轮。它们在 SRDF 中单独指定,以确保运动规划或控制管道中的不同组件知道不能直接控制关节。如果您的机器人有未启动的脚轮,则应将它们指定为被动脚轮。

“组”(有时称为“JointGroup”或“规划组”)是 MoveIt 2 中的一个中心概念。MoveIt 2 始终作用于特定组。MoveIt 2 将仅考虑移动它正在规划的组中的关节 - 其他关节保持静止。(机器人中所有关节可能移动的运动计划可以通过创建一个包含所有关节的组来实现。组只是关节和链接的集合。可以通过以下几种不同方式之一指定每个组:

关节集合

可以将组指定为关节的集合。每个关节的所有子链接都将自动包含在组中。

链接集合

也可以将组指定为链接的集合。链接的所有父关节也包含在组中。

串行链

使用base link和 tip link指定串行链。链条中的尖端环节是链条中最后一个关节的 child link。链中的基础环节是链中第一个关节的parent link。

子组的集合

组也可以是组的集合。例如,您可以将 left_arm 和 right_arm 定义为两个组,然后定义一个名为 both_arms 的新组,其中包含这两个组。

末端执行器

机器人中的某些组可以被赋予特殊名称作为末端执行器。末端执行器通常通过固定关节连接到另一组(如手臂)。请注意,在指定作为末端执行器的组时,请务必确保末端执行器与其连接到的父组之间没有公共链接。

自碰撞

默认自碰撞矩阵生成器(Setup Assistant 的一部分)在机器人上搜索可以安全地禁用碰撞检查的链接对,从而减少运动规划处理时间。当这些链接对始终处于碰撞状态、从不处于碰撞状态、在机器人的默认位置发生碰撞时或当链接在运动链上彼此相邻时,它们将被禁用。采样密度指定了要检查多少个随机机器人位置以进行自碰撞。较高的密度需要更多的计算时间,而较低的密度更有可能禁用不应被禁用的对。默认值为 10,000 次碰撞检查。碰撞检查是并行进行的,以减少处理时间。

机器人姿势

SRDF 还可以存储机器人的固定配置。在这种情况下,SRDF 的一个典型示例是定义操纵器的 HOME 位置。配置与字符串 ID 一起存储,以后可以使用该字符串 ID 来恢复配置。

SRDF 文档

有关 SRDF 语法的信息,请在 ROS SRDF Wiki 页面上阅读更多详细信息。

装载 URDF 和 SRDF

MoveIt的所有使用RobotModel的组件都需要访问URDF和SRDF才能正常运行。在ROS 1中,这是通过将每个XML加载到全局参数服务器中的字符串参数(分别为/robot_description和/robot_description_semantic)来实现的。ROS 2没有全局参数服务器,因此确保所有适当的节点都有访问权限需要更多的工作。

启动文件规范

一种选择是为需要它们的每个节点设置参数,这通常使用启动文件完成。

加载 URDF 通常使用 xacro,因此加载它看起来像

from launch_ros.parameter_descriptions import ParameterValue
from launch.substitutions import Command

robot_description = ParameterValue(Command(['xacro ', PATH_TO_URDF]),
                                   value_type=str)

同时,必须明确地读入 SRDF。

with open(PATH_TO_SRDF, 'r') as f:
    semantic_content = f.read()

然后,必须将值加载到 EACH 节点中。

move_group_node = Node(package='moveit_ros_move_group', executable='move_group',
                       output='screen',
                       parameters=[{
                            'robot_description': robot_description,
                            'robot_description_semantic': semantic_content,
                            # More params
                       }],
                       )

字符串主题规范

另一种方法是将两个字符串发布为主题。此模式已通过 Robot State Publisher 完成,该发布器发布有关该主题的消息。这可以在启动文件中完成:std_msgs/msg/String/robot_description

rsp_node = Node(package='robot_state_publisher',
                executable='robot_state_publisher',
                respawn=True,
                output='screen',
                parameters=[{
                    'robot_description': robot_description,
                    'publish_frequency': 15.0
                }]
                )

您还可以指示 MoveIt 节点发布主题。

move_group_node = Node(package='moveit_ros_move_group', executable='move_group',
                       output='screen',
                       parameters=[{
                            'robot_description': robot_description,
                            'publish_robot_description': True,
                            # More params
                       }],
                       )

将机器人描述发布为主题只需执行一次,无需在需要描述的每个节点中执行。

类似地,我们也可以将SRDF作为一条消息发布。这要求一个节点在启动文件中设置参数,并设置额外的参数publish_robot_description_semantic为True。

 

move_group_node = Node(package='moveit_ros_move_group', executable='move_group',
                       output='screen',
                       parameters=[{
                            'robot_description_semantic': semantic_content,
                            'publish_robot_description_semantic': True,
                            # More params
                       }],
                       )

然后,所有其他节点都可以订阅发布的字符串消息。

幕后花絮:RDFLoader

在 MoveIt 代码中的许多地方,机器人描述和语义是使用 RDFLoader 类加载的,该类将尝试从节点读取参数,如果失败,将尝试在短时间内订阅 String 主题。如果两种方法都无法获取参数,则警告将打印到控制台。

标签:机器人,description,URDF,robot,SRDF,关节,Moveit2,ROS2
From: https://www.cnblogs.com/ai-ldj/p/18370327

相关文章

  • Ros2 MoveIt2 MoveGroup C++接口
     在MoveIt中,最简单的用户界面是通过 MoveGroupInterface 类。它为用户可能想要执行的大多数操作提供了易于使用的功能,特别是设置关节或姿势目标、创建运动计划、移动机器人、将对象添加到环境中以及从机器人上连接/分离对象。此接口通过ROS主题、服务和操作与 MoveGrou......
  • ubuntu 22.04安装 ROS2 (清华源)
    下载ROS的GPGKey:sudoaptinstallcurlgnupg2sudocurl-sSLhttps://mirror.ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/ros.key-o/usr/share/keyrings/ros-archive-keyri添加ROS源echo"deb[arch=$(dpkg--print-architecture)s......
  • Ros2 Moveit2 之 围绕对象进行规划 - 添加障碍物
    本教程将向您介绍如何将对象插入规划场景并围绕它们进行规划。先决条件如果您还没有这样做,请确保您已完成RViz中的可视化hello_moveit中的步骤。本项目假设您从上一个教程结束的地方开始。如果您只想运行本教程,您可以按照Docker指南启动一个包含已完成教程的容器。步骤1添......
  • Ros2 Moveit2 之 在Riz2中可视化
     本教程将向您介绍一个工具,通过在RViz中呈现可视化效果,该工具可以帮助您更轻松地了解MoveIt应用程序正在做什么。先决条件如果你还没有完成,请确保你已经完成了你的第一个项目hello_moveit中的步骤。这个项目假设你从上一个教程结束的地方开始。步骤1添加依赖moveit_v......
  • Ros2 Moveit2 之 moveit_visual_tools.prompt
    moveit_visual_tools.prompt是MoveIt!的一个功能,用于在可视化工具中暂停程序执行并提示用户进行某些操作。在机器人开发和调试过程中,通常需要与用户进行交互,比如等待用户在界面上点击按钮或在某个状态下继续执行程序。moveit_visual_tools.prompt提供了一种简单的方法来实现这......
  • Ros2 Moveit2 第一个C++项目
     本教程将指导您使用MoveIt编写第一个C++应用程序。警告:MoveIt中的大多数功能将无法正常工作,因为完整的MoveGroup功能需要附加参数。如需完整设置,请继续阅读MoveGroupC++接口教程。先决条件如果您还没有这样做,请确保您已经完成入门指南中的步骤。本教程假设您了......
  • Ros2 Moveit2 Rviz2 快速入门
     这里将教您如何使用RViz和MoveItDisplay插件在MoveIt中创建运动计划。Rviz是ROS中的主要可视化工具,也是调试机器人的非常有用的工具。MoveItDisplay插件允许您设置虚拟环境(规划场景)、以交互方式为机器人创建起始和目标状态、测试各种运动规划器并可视化输出。让我......
  • franka ros2
    franka_ros2在Windows上不受支持。franka_ros2repo包含libfranka的ROS2集成 。 警告:franka_ros2正在快速开发中。预计会出现重大变化。在 GitHub上报告错误。先决条件ROS2Humble安装( ros-humble-desktop)或带有DevContainer的VSCodeIDE。PREEMPT_RT......
  • ros2 自定义一个控制器
    在ROS2中,自定义一个控制器并进行使用涉及几个步骤,包括编写控制器代码、配置控制器参数、编写控制器启动文件以及在运行时加载和使用控制器。以下是一个详细的步骤指南:1.编写控制器代码首先,创建一个控制器类,该类继承自controller_interface::ControllerInterface。下面是一......
  • ROS2对比ROS
    ROS(RobotOperatingSystem)和ROS2(RobotOperatingSystem2)是两个广泛使用的机器人软件框架,它们由OpenRobotics组织维护和开发。尽管名称中包含“操作系统”,但ROS和ROS2实际上是一组工具、库和约定,用于帮助开发机器人软件。下面列出了ROS2相对于ROS的一......