鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    ros2 moveit轨迹规划参数设置问题

    已定时 已固定 已锁定 已移动
    ROS 2相关问题
    ros2 humble moveit2 ompl
    2
    4
    448
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 5
      conin
      最后由 编辑

      ebc76d4c-e9c4-4664-8de5-878f1d63909d-image.png

      我尝试使用moveit的轨迹规划(应该默认使用的是ompl)然后得到了一堆轨迹点和每个点位的joints以及速度、加速度等信息,然后使用这些信息调真实机械臂的样条运动API,但是实际效果机械臂运动很慢(大概全速1/3左右)。然后我尝试手动降低轨迹点的采样,机械臂实际的运动速度就会快上一些,但是手动降采样我担心会过滤掉某个关键点,到时候实际运动会撞到障碍物,所以想通过ompl的参数来实现降采样轨迹点的效果,但是在代码中设置的属性不生效。

      代码中设置的参数:

        auto sampling_planner = std::make_shared<mtc::solvers::PipelinePlanner>(_node);
        sampling_planner->setProperty("max_velocity_scaling_factor", 1.0);
        sampling_planner->setProperty("max_acceleration_scaling_factor", 1.0);
        sampling_planner->setProperty("ompl.resample_dt", 0.5);
        _node->declare_parameter("move_group.planning_pipeline.ompl.resample_dt", 0.5);
      

      启动warning表示参数不生效:

      [mtc_node-1] [INFO] [1735523867.177258584] [moveit.ros_planning.planning_pipeline]: Using planning interface 'OMPL'
      [mtc_node-1] [INFO] [1735523867.186030601] [moveit_ros.add_time_optimal_parameterization]: Param 'ompl.path_tolerance' was not set. Using default value: 0.100000
      [mtc_node-1] [INFO] [1735523867.186063456] [moveit_ros.add_time_optimal_parameterization]: Param 'ompl.resample_dt' was not set. Using default value: 0.100000
      [mtc_node-1] [INFO] [1735523867.186067793] [moveit_ros.add_time_optimal_parameterization]: Param 'ompl.min_angle_change' was not set. Using default value: 0.001000
      [mtc_node-1] [INFO] [1735523867.186104183] [moveit_ros.fix_workspace_bounds]: Param 'ompl.default_workspace_bounds' was not set. Using default value: 10.000000
      [mtc_node-1] [INFO] [1735523867.186116440] [moveit_ros.fix_start_state_bounds]: Param 'ompl.start_state_max_bounds_error' was set to 0.100000
      
      1 条回复 最后回复 回复 引用 0
      • 小伊小
        机器人小伊
        最后由 编辑

        从您提供的信息来看,您在代码中尝试设置的 OMPL 参数(如 ompl.resample_dt)并未被 MoveIt 正确识别和应用。这通常是因为参数设置的方式不正确或者参数设置的位置不正确。以下是一些可能的解决方案和建议:

        1. 确保参数设置正确:

          • MoveIt 使用 rclcpp::Node 的参数接口来接收配置。通常,您应该在 MoveIt 配置文件中(如 move_group.yaml 或 trajectory_execution.yaml)设置这些参数,而不是在代码中直接设置。
          • ompl.resample_dt 是一个与 OMPL 规划器相关的参数,它通常应该在 MoveIt 的配置文件中的相关部分设置,而不是在 PipelinePlanner 类的实例上设置。
        2. 修改配置文件:

          • 在 MoveIt 的配置文件中,找到与 OMPL 规划器相关的部分,并添加或修改 resample_dt 参数。例如,在 move_group.yaml 文件中,您可能需要查找类似于 ompl 的部分,并在其中添加:
            planning:
              ompl:
                planning_algorithm: "RRTConnect"  # 或者其他算法
                resample_dt: 0.5  # 设置重新采样的时间间隔
            
          • 确保您的配置文件路径正确,并且 MoveIt 节点在启动时正确加载了这些配置文件。
        3. 重启节点:

          • 每次修改配置文件后,确保重启您的 MoveIt 节点以使更改生效。
        4. 检查日志和文档:

          • 仔细检查 MoveIt 的日志文件,看看是否有关于参数加载的更多信息。
          • 查阅 MoveIt 的官方文档,了解如何正确设置和修改 OMPL 规划器的参数。
        5. 验证参数生效:

          • 在启动后,您可以使用 ROS 的 rosparam 命令来检查参数是否已被正确设置:
            rosparam get /move_group/planning_pipeline/ompl/resample_dt
            
          • 这应该返回您在配置文件中设置的 0.5 值。
        6. 代码中的参数设置:

          • 如果您确实需要在代码中动态设置参数,确保使用正确的方法和接口。对于 MoveIt,通常是通过 rclcpp::Node 的 declare_parameter 和 set_parameter 方法来设置参数的。但是,对于 OMPL 的某些参数,最好还是在配置文件中设置。

        通过上述步骤,您应该能够正确设置 OMPL 的 resample_dt 参数,并观察到机械臂运动速度的变化。如果问题仍然存在,可能需要进一步检查您的机械臂控制代码和 MoveIt 的集成方式。


        以上为生成回答,仅供参考~

        我是小伊,已接入ChatGpt,所有回复,仅供参考~

        5 1 条回复 最后回复 回复 引用 0
        • 5
          conin @小伊
          最后由 编辑

          @小伊 在 ros2 moveit轨迹规划参数设置问题 中说:

          /move_group/planning_pipeline/ompl/resample_dt

          我使用的是moveit2,找不到move_group.yaml或者trajectory_execution.yaml的位置,其中依赖的moveit库是自己编译的moveit_task_constructor(git clone -b humble https://github.com/moveit/moveit_task_constructor.git)

          1 条回复 最后回复 回复 引用 0
          • 小伊小
            机器人小伊
            最后由 编辑

            在 MoveIt 2 中,配置文件的路径和命名可能与 MoveIt 1 有所不同,尤其是在使用自己编译的 MoveIt 库和组件时。MoveIt 2 鼓励使用更加模块化和灵活的配置方式,通常通过 ROS 2 的参数服务器来动态配置参数,而不是完全依赖于静态 YAML 文件。不过,YAML 文件仍然是配置的一个重要部分,尤其是在定义机器人描述、规划组和运动学求解器等方面。

            查找配置文件

            1. MoveIt 配置包:

              • 在 MoveIt 2 中,通常会有一个专门的 ROS 2 包用于存放 MoveIt 的配置文件。这个包通常命名为 <your_robot>_moveit_config。
              • 在这个包中,你应该能找到 launch 目录(包含 .launch.py 文件)和 config 目录(包含 YAML 文件)。
            2. 配置文件位置:

              • 如果你找不到 move_group.yaml 或 trajectory_execution.yaml,它们可能被整合到了其他 YAML 文件中,或者通过参数服务器直接配置。
              • 在 config 目录下,通常会有多个 YAML 文件,分别用于描述机器人、规划组、控制器等。
            3. 检查 ROS 2 参数服务器:

              • 使用 ros2 param list /move_group 来列出 /move_group 节点的所有参数。
              • 使用 ros2 param get /move_group <parameter_name> 来查看特定参数的值。
              • 你可以通过 ros2 param set /move_group <parameter_name> <value> 来动态设置参数,比如 /move_group/planning_pipeline/ompl/resample_dt。

            关于 resample_dt 参数

            • resample_dt 是 OMPL 规划器的一个参数,用于控制在规划过程中重新采样状态空间的频率。这个参数可以在 OMPL 的配置部分进行设置。
            • 在 MoveIt 2 中,这个参数可能不再直接通过 move_group.yaml 配置,而是通过参数服务器或者通过编程方式在代码中设置。

            解决方案

            1. 检查 ROS 2 参数服务器:

              • 使用 ros2 param list /move_group 查看所有可用参数。
              • 如果 resample_dt 存在,使用 ros2 param set 命令设置它。
            2. 查找并编辑 YAML 文件:

              • 在 <your_robot>_moveit_config/config 目录下查找相关的 YAML 文件。
              • 如果找到相关的 OMPL 配置部分,可以手动编辑文件来设置 resample_dt。
            3. 检查 MoveIt 2 文档和源代码:

              • 由于 MoveIt 2 是一个不断发展的项目,文档和源代码可能是获取最新信息的最佳途径。
              • 查看 MoveIt 2 的 GitHub 仓库,特别是 moveit_ros2_planning 和 moveit_task_constructor,可能会有关于如何配置和使用 resample_dt 的更多信息。
            4. 重新编译和部署:

              • 如果你修改了 YAML 文件或源代码,确保重新编译并部署你的 MoveIt 配置包。

            希望这些信息能帮助你找到并设置所需的参数!


            以上为生成回答,仅供参考~

            我是小伊,已接入ChatGpt,所有回复,仅供参考~

            1 条回复 最后回复 回复 引用 0
            • 第一个帖子
              最后一个帖子
            皖ICP备16016415号-7
            Powered by NodeBB | 鱼香ROS