MoveIt是一个专门针对机械臂操作的ROS软件,其对机械臂的运动规划方式包括关节空间规划,工作空间规划,和笛卡尔运动规划。
在一些机器人任务中,速度的快慢对于任务完成的质量至关重要,所以本文就来探讨这些规划方法的速度控制。
关节空间规划:以关节角度为控制量的机器人运动;
工作空间规划:通过机器人末端的位姿控制机器人运动(轨迹无约束);
笛卡尔运动规划:不仅控制机械臂的起始和终止位姿,还可控制运动过程中的位姿(如直线或圆弧)。
方法一:设置最大速度
对于关节空间规划和工作空间规划方法,可以直接通过MoveIt的API设定允许的最大速度和加速度,以此来控制机械臂的速度。
关键API如下所示:
arm.set_max_acceleration_scaling_factor(0.5) arm.set_max_velocity_scaling_factor(0.5)
需要指出的是这两个API对于笛卡尔运动规划的方法并不起作用,笛卡尔运动规划的速度控制参考下述方法。
方法二:轨迹重定义
对于笛卡尔运动规划方法,我们可以对其规划完成的路径的属性进行设置,比如对其速度和加速度进行缩放。
轨迹重定义Python函数:
def scale_trajectory_speed(traj, scale): new_traj = RobotTrajectory() new_traj.joint_trajectory = traj.joint_trajectory n_joints = len(traj.joint_trajectory.joint_names) n_points = len(traj.joint_trajectory.points) points = list(traj.joint_trajectory.points) for i in range(n_points): point = JointTrajectoryPoint() point.positions = traj.joint_trajectory.points[i].positions point.time_from_start = traj.joint_trajectory.points[i].time_from_start / scale point.velocities = list(traj.joint_trajectory.points[i].velocities) point.accelerations = list(traj.joint_trajectory.points[i].accelerations) for j in range(n_joints): point.velocities[j] = point.velocities[j] * scale point.accelerations[j] = point.accelerations[j] * scale * scale points[i] = point new_traj.joint_trajectory.points = points return new_traj
当完成轨迹重定义之后就可以运行测试了。
(plan, fraction) = arm.compute_cartesian_path new_traj = scale_trajectory_speed(plan, 0.2) arm.execute(new_traj)
方法三:参考Rviz中的函数
在Rviz的交互界面中,在笛卡尔运动规划方式下,仍然可以通过拖动速度和加速度线条来控制机械臂的速度和加速度。那么我们就可以用Rviz中的控制函数来实现相同的功能。
参考moveit_ros/visualization/motion_planning_rviz_plugin/src/motion_planning_frame_planning.cpp 文件,其中调用了iptp 的 computeTimeStamps 函数实现了速度和加速度的控制,类似的,我们也可以使用这个函数实现此功能。
方法四:修改配置文件的参数
MoveIt的全部配置文件放置在对应功能包的config文件夹下,这些配置文件中有很多.yaml的设置文件,其中就有用于机器人运动关节速度限制的配置文件,joint_limits,yaml文件,可以设置最大速度和最大加速度的数值。代码如下:
joint_limits: elbow_joint: has_velocity_limits: true max_velocity: 3.1415926535897931 has_acceleration_limits: false max_acceleration: 0 shoulder_lift_joint: has_velocity_limits: true max_velocity: 3.1415926535897931 has_acceleration_limits: false max_acceleration: 0
如果在运动规划中机器人的运动速度较慢,可以修改该文件中的速度限位值,但是要重新启动move_group节点来完成参数的加载。
本文总结了MoveIt在不同规划模式下的速度控制方法,尤其是对笛卡尔运动规划的速度控制给出了多种方法,供相关人员参考,在实际情况下可以根据便捷性和扩展性采用最合适的速度控制方法。
本文为个人观点,如有错误请指正,也可能还有其他方法,欢迎大家在评论区交流。
原文链接:https://blog.csdn.net/weixin_41628708/article/details/139197592