四、使用MoveGroup C++接口——轨迹处理(七)

目录

1.轨迹处理

2.轨迹处理算法

3. joint_limits.yaml文件编写

4. joint_limits.yaml文件使用

4.1 放置位置: 

4.2 MoveIt配置: 

4.3 运动规划: 

4.4 调试与验证: 

参考资料


1.轨迹处理

        运动规划器通常只生成“路径”,即这些路径没有与之关联的时间信息。MoveIt 包含几种轨迹处理算法,这些算法可以处理这些路径,并生成正确时间参数化的轨迹,同时考虑到各个关节上施加的最大速度和加速度限制。这些限制是从为每个机器人指定的配置文件中读取的。该配置文件是可选的,它可以覆盖URDF(统一机器人描述格式)文件中的任何速度或加速度限制。

        截至2023年1月,推荐的算法是“时间最优轨迹生成”(TimeOptimalTrajectoryGeneration,简称TOTG)。但需要注意的是,该算法要求机器人在开始和结束时都处于静止状态。默认情况下,TOTG的时间步长为0.1秒。  

2.轨迹处理算法

         MoveIt 包括几种轨迹处理算法,包含内容有:

2.1 类(Classes)

  • IterativeSplineParameterization:这个类用于设置轨迹的时间戳,以强制执行速度和加速度约束。可以指定轨迹的初始/最终速度和加速度,以及模型中的速度和加速度限制。

  • IterativeParabolicTimeParameterization:这个类通过迭代方式,使用抛物线插值来参数化轨迹的时间,以满足特定的动态约束。

  • RuckigSmoothing:这个类实现了Ruckig算法,用于在保持速度和加速度约束的同时,对轨迹进行平滑处理。

  • PathSegmentPathTrajectory:这些类分别代表轨迹的片段、路径和整个轨迹。它们用于表示机器人在空间中的移动路径和对应的运动参数。

  • TimeOptimalTrajectoryGeneration:这个类用于生成时间最优的轨迹,即在满足所有约束条件(如速度、加速度限制)的前提下,使机器人完成给定任务所需的时间最短。

  • TimeParameterization:这是所有轨迹参数化算法的基类,提供了参数化轨迹的接口。

  • SingleJointTrajectoryLinearPathSegmentCircularPathSegment:这些类或结构体分别代表单个关节的轨迹、线性路径片段和圆形路径片段。

2.2 函数(Functions)

  • isTrajectoryEmpty():这个函数用于检查给定的轨迹是否为空。

  • trajectoryWaypointCount():这个函数返回给定轨迹中的路点(waypoint)数量。

  • globalAdjustment():这个函数用于对轨迹进行全局调整,通过修改轨迹中各个关节的时间戳(或时间差),来优化或满足某些全局约束条件。

        轨迹处理相关类与函数的详细实现见链接。

3. joint_limits.yaml文件编写

        轨迹处理算法在生成或修改机器人的运动轨迹时,会读取joint_limits.yaml 文件中的约束条件,并据此进行轨迹的计算和优化。joint_limits.yaml 是所读取的配置文件,它包含了机器人各个关节的物理限制信息,如最大速度、最大加速度和可能的最大位置限制等。这个文件允许开发者为机器人指定这些关键的运动参数,以确保机器人在操作过程中不会超过其物理限制,从而保护机器人不受损坏。在MoveIt中,这个配置文件可以被用来覆盖URDF文件中定义的默认限制。

        joint_limits.yaml可以从MoveIt 设置助手生成,MoveIt Setup Assistant在配置过程中会询问用户关于机器人关节的各种限制信息,如最大位置、最大速度、最大加速度等。用户可以在界面中输入这些信息,或者通过导入已有的URDF文件(如果URDF文件中已经包含了这些限制信息)来自动生成joint_limits.yaml文件。

  1. 基本结构:
    • 文件通常以YAML格式编写,遵循YAML的缩进规则(通常使用空格进行缩进,不使用制表符)。
    • 文件开头可以包含一些基本的注释,说明文件的用途和各个字段的意义。
  2. 关节定义:
    • 每个关节都应该有一个对应的条目,条目的名称应与URDF文件中定义的关节名称相匹配。
    • 对于每个关节,可以根据需要指定以下限制:
      • has_position_limits:是否有关节位置限制(布尔值)。
      • min_position:关节的最小位置限制(单位通常为弧度)。
      • max_position:关节的最大位置限制(单位通常为弧度)。

      • has_velocity_limits:是否有关节速度限制(布尔值)。
      • max_velocity:关节的最大速度限制(单位通常为弧度/秒)。
      • has_acceleration_limits:是否有关节加速度限制(布尔值)。
      • max_acceleration:关节的最大加速度限制(单位通常为弧度/秒²,但并非所有机器人都设置此限制)。
      • 其他可能的限制,如加加速度(jerk)限制,可以根据需要进行定义。
  3. 示例
joint_limits:  
  joint1:  
    has_position_limits: true  
    min_position: -1.57  
    max_position: 1.57  
    has_velocity_limits: true  
    max_velocity: 1.5  
    has_acceleration_limits: false  
    max_acceleration: 0.0  
  joint2:  
    ...

4. joint_limits.yaml文件使用

4.1 放置位置: 

         通常, joint_limits.yaml文件应放置在机器人的MoveIt配置目录中,例如robot_moveit_config/config/。 

4.2 MoveIt配置: 

         在MoveIt的配置过程中,需要确保MoveIt能够找到并读取  joint_limits.yaml文件。这通常通过MoveIt的配置文件(如ompl_planning.yaml)或启动文件(如xxxx_moveit.launch)中的相关设置来实现。 

4.3 运动规划: 

         当进行运动规划时,MoveIt将使用  joint_limits.yaml文件中定义的限制来生成满足这些限制的轨迹。

        如果在规划过程中违反了这些限制,规划可能会失败,或者生成的轨迹可能不符合预期。 

4.4 调试与验证: 

         在实际应用中,建议通过RViz等可视化工具来验证规划结果是否符合预期,并检查是否有任何违反限制的情况。

        如果发现限制设置不当或规划结果不符合预期,可以调整  joint_limits.yaml文件中的参数,并重新进行规划。 


参考资料

MoveIt2 官方教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值