ros2 moveit轨迹规划参数设置问题
-
我尝试使用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
-
从您提供的信息来看,您在代码中尝试设置的 OMPL 参数(如
ompl.resample_dt
)并未被 MoveIt 正确识别和应用。这通常是因为参数设置的方式不正确或者参数设置的位置不正确。以下是一些可能的解决方案和建议:-
确保参数设置正确:
- MoveIt 使用
rclcpp::Node
的参数接口来接收配置。通常,您应该在 MoveIt 配置文件中(如move_group.yaml
或trajectory_execution.yaml
)设置这些参数,而不是在代码中直接设置。 ompl.resample_dt
是一个与 OMPL 规划器相关的参数,它通常应该在 MoveIt 的配置文件中的相关部分设置,而不是在PipelinePlanner
类的实例上设置。
- MoveIt 使用
-
修改配置文件:
- 在 MoveIt 的配置文件中,找到与 OMPL 规划器相关的部分,并添加或修改
resample_dt
参数。例如,在move_group.yaml
文件中,您可能需要查找类似于ompl
的部分,并在其中添加:planning: ompl: planning_algorithm: "RRTConnect" # 或者其他算法 resample_dt: 0.5 # 设置重新采样的时间间隔
- 确保您的配置文件路径正确,并且 MoveIt 节点在启动时正确加载了这些配置文件。
- 在 MoveIt 的配置文件中,找到与 OMPL 规划器相关的部分,并添加或修改
-
重启节点:
- 每次修改配置文件后,确保重启您的 MoveIt 节点以使更改生效。
-
检查日志和文档:
- 仔细检查 MoveIt 的日志文件,看看是否有关于参数加载的更多信息。
- 查阅 MoveIt 的官方文档,了解如何正确设置和修改 OMPL 规划器的参数。
-
验证参数生效:
- 在启动后,您可以使用 ROS 的
rosparam
命令来检查参数是否已被正确设置:rosparam get /move_group/planning_pipeline/ompl/resample_dt
- 这应该返回您在配置文件中设置的
0.5
值。
- 在启动后,您可以使用 ROS 的
-
代码中的参数设置:
- 如果您确实需要在代码中动态设置参数,确保使用正确的方法和接口。对于 MoveIt,通常是通过
rclcpp::Node
的declare_parameter
和set_parameter
方法来设置参数的。但是,对于 OMPL 的某些参数,最好还是在配置文件中设置。
- 如果您确实需要在代码中动态设置参数,确保使用正确的方法和接口。对于 MoveIt,通常是通过
通过上述步骤,您应该能够正确设置 OMPL 的
resample_dt
参数,并观察到机械臂运动速度的变化。如果问题仍然存在,可能需要进一步检查您的机械臂控制代码和 MoveIt 的集成方式。
以上为生成回答,仅供参考~
-
-
@小伊 在 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)
-
在 MoveIt 2 中,配置文件的路径和命名可能与 MoveIt 1 有所不同,尤其是在使用自己编译的 MoveIt 库和组件时。MoveIt 2 鼓励使用更加模块化和灵活的配置方式,通常通过 ROS 2 的参数服务器来动态配置参数,而不是完全依赖于静态 YAML 文件。不过,YAML 文件仍然是配置的一个重要部分,尤其是在定义机器人描述、规划组和运动学求解器等方面。
查找配置文件
-
MoveIt 配置包:
- 在 MoveIt 2 中,通常会有一个专门的 ROS 2 包用于存放 MoveIt 的配置文件。这个包通常命名为
<your_robot>_moveit_config
。 - 在这个包中,你应该能找到
launch
目录(包含.launch.py
文件)和config
目录(包含 YAML 文件)。
- 在 MoveIt 2 中,通常会有一个专门的 ROS 2 包用于存放 MoveIt 的配置文件。这个包通常命名为
-
配置文件位置:
- 如果你找不到
move_group.yaml
或trajectory_execution.yaml
,它们可能被整合到了其他 YAML 文件中,或者通过参数服务器直接配置。 - 在
config
目录下,通常会有多个 YAML 文件,分别用于描述机器人、规划组、控制器等。
- 如果你找不到
-
检查 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
配置,而是通过参数服务器或者通过编程方式在代码中设置。
解决方案
-
检查 ROS 2 参数服务器:
- 使用
ros2 param list /move_group
查看所有可用参数。 - 如果
resample_dt
存在,使用ros2 param set
命令设置它。
- 使用
-
查找并编辑 YAML 文件:
- 在
<your_robot>_moveit_config/config
目录下查找相关的 YAML 文件。 - 如果找到相关的 OMPL 配置部分,可以手动编辑文件来设置
resample_dt
。
- 在
-
检查 MoveIt 2 文档和源代码:
- 由于 MoveIt 2 是一个不断发展的项目,文档和源代码可能是获取最新信息的最佳途径。
- 查看 MoveIt 2 的 GitHub 仓库,特别是
moveit_ros2_planning
和moveit_task_constructor
,可能会有关于如何配置和使用resample_dt
的更多信息。
-
重新编译和部署:
- 如果你修改了 YAML 文件或源代码,确保重新编译并部署你的 MoveIt 配置包。
希望这些信息能帮助你找到并设置所需的参数!
以上为生成回答,仅供参考~
-