use piper_sdk::client::control::TrajectoryPlanner;
use piper_sdk::client::types::{JointArray, Rad};
use std::time::Duration;
fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
piper_sdk::init_logger!();
println!("🚀 Piper SDK - Simple Move Example");
println!("===================================\n");
let start_positions = JointArray::from([
Rad(0.0), Rad(0.0), Rad(0.0), Rad(0.0), Rad(0.0), Rad(0.0), ]);
let target_positions = JointArray::from([
Rad(0.5), Rad(1.0), Rad(0.3), Rad(-0.5), Rad(0.0), Rad(0.2), ]);
println!("📍 起始位置: {:?}", start_positions[0]);
println!("🎯 目标位置: {:?}", target_positions[0]);
println!();
let duration = Duration::from_secs(5); let frequency_hz = 100.0;
let mut planner =
TrajectoryPlanner::new(start_positions, target_positions, duration, frequency_hz);
println!("📈 轨迹规划:");
println!(" - 持续时间: {:?}", duration);
println!(" - 采样频率: {} Hz", frequency_hz);
println!(" - 总采样点: {}", planner.total_samples());
println!();
println!("▶️ 执行轨迹...\n");
let total_samples = planner.total_samples();
let mut step_count = 0;
for (position, velocity) in &mut planner {
step_count += 1;
if step_count % 20 == 0 {
let progress = (step_count as f64) / (total_samples as f64) * 100.0;
println!(
" Step {}/{}: 进度 {:.1}% | J1 位置: {:.3} rad | J1 速度: {:.3} rad/s",
step_count, total_samples, progress, position[0].0, velocity[0]
);
}
std::thread::sleep(Duration::from_millis(10));
}
println!("\n✅ 轨迹执行完成!");
println!(" 总步数: {}", step_count);
println!();
println!("💡 API 特性:");
println!(" ✨ 强类型单位 (Rad, Deg, NewtonMeter)");
println!(" ✨ Iterator 模式 (内存高效)");
println!(" ✨ 平滑轨迹 (三次样条插值)");
println!(" ✨ 类型安全 (编译期保证)");
println!();
println!("🎉 示例完成!");
Ok(())
}