#运动 #轨迹 #轨迹

cartesian_trajectories

创建笛卡尔运动配置文件

1 个不稳定版本

0.1.0 2021 年 5 月 6 日

#183 in 机器人学

EUPL-1.2

41KB
659

crates.io GitHub Workflow Status crates.io crates.io docs.rs

cartesian_trajectories

cartesian_trajectories 允许创建任意的笛卡尔轨迹,并在其上添加速度配置文件。

示例

use cartesian_trajectories::generate_absolute_motion;
use cartesian_trajectories::s_curve::SCurveConstraints;
use cartesian_trajectories::CartesianTrajectory;
use cartesian_trajectories::VelocityProfile::SCurve;
use nalgebra::Isometry3;
use std::time::Duration;

fn main() {
    let start_pose = Isometry3::translation(2., 2., 0.);
    let pose_generator = generate_absolute_motion(Isometry3::translation(1., 1., 0.));
    let mut trajectory = CartesianTrajectory::new(
        pose_generator,
        SCurve {
            start_pose,
            constraints: SCurveConstraints {
                max_jerk: 5.,
                max_acceleration: 5.,
                max_velocity: 5.,
            },
        },
    );
    for &i in [0., 0.5, 1.0].iter() {
        let time = trajectory.get_total_duration().mul_f64(i);
        let output = trajectory.get_pose(&start_pose, time);
        println!("{:?}", output);
        assert!(f64::abs(output.pose.translation.x + i - 2.) < 1e-7);
        assert!(f64::abs(output.pose.translation.y + i - 2.) < 1e-7);
        if i < 1. {
            assert!(!output.finished);
        } else {
            assert!(output.finished);
        }
    }
}

此示例将生成一个从 (2,2,0) 移动到 (1,1,0) 的轨迹,使用 SCurve 运动。然后可以使用 trajectory.get_pose() 查询轨迹,它接受初始姿态和当前时间。由于轨迹未预先计算,因此需要初始姿态。

功能

预定义的 PoseGenerators 用于

  • 相对运动
  • 绝对运动
  • 圆周运动

此外,还可以定义自定义的位置和方向生成器,并将它们组合成一个姿态生成器。可以通过乘法等方式组合 PoseGenerators,例如,从圆周运动和相对运动创建螺旋运动。也可以连接多个 PoseGenerators。

然后可以通过应用自定义速度配置文件或使用以下预定义的速度配置文件创建笛卡尔轨迹

  • 线性
  • 余弦
  • SCurve

许可证

本库版权所有 © 2021 Marco Boneberger

根据 EUPL,版本 1.2 或 – 如欧洲委员会批准 – 随后的 EUPL 版本(“许可证”);

您只能根据许可证使用此作品。您可以在 https://joinup.ec.europa.eu/software/page/eupl 获取许可证副本。

除非适用法律要求或书面同意,否则在许可证下分发的软件按“原样”分发,不提供任何明示或暗示的保证或条件。

有关许可证下管理权限和限制的特定语言,请参阅许可证。

See the Licence for the specific language governing permissions and limitations under the Licence.

依赖关系

~3.5MB
~69K SLoC