当前位置: 首页 > news >正文

【SimpleFOC】SimpleFOC的运动规划器(Motion Planner)和梯形速度规划

SimpleFOC 在位置(角度)模式时,达到目标位置过程中,是默认开启平滑转动的效果的。

SimpleFOC 的平滑转动是通过运动规划器(Motion Planner)实现的,而不是瞬间跳到目标位置。

运动规划器的工作原理

1. 默认的梯形速度规划

// SimpleFOC 内部自动生成的平滑运动轨迹
void loop() {motor.loopFOC();          // 执行FOC控制motor.move(target_position); // 这里包含运动规划!
}

2. 运动规划参数配置

void setup() {// ... 其他初始化代码 ...// 配置运动规划器 - 实现平滑转动的关键!motor.PID_velocity.P = 0.2;    // 速度环P增益motor.PID_velocity.I = 2;      // 速度环I增益motor.LPF_velocity.Tf = 0.01;  // 速度滤波时间常数// 运动规划器参数motor.velocity_limit = 10.0;     // 最大速度 (rad/s)motor.acceleration_limit = 50.0; // 最大加速度 (rad/s²)motor.jerk_limit = 100.0;        // 加加速度限制 (rad/s³)
}

3. 平滑运动的三阶段

当执行 motor.move(6*_PI) 时:

阶段1:加速阶段

// 内部计算示例
current_velocity += acceleration * dt;  // 逐渐加速
current_position += current_velocity * dt;

阶段2:匀速阶段

// 保持最大允许速度
current_velocity = velocity_limit;

阶段3:减速阶段

// 逐渐减速到目标位置
float distance_to_target = target_position - current_position;
if (distance_to_target < braking_distance) {current_velocity -= acceleration * dt;  // 平滑减速
}

4. 可视化运动曲线

速度 (rad/s)▲│        *********│      **         **│    **             **│  **                 **│**                     **└─────────────────────────▶ 时间加速  匀速   减速

5. 自定义更平滑的运动

// 如果想要更平滑的运动,可以降低限制值
void setup() {// 更温和的运动参数motor.velocity_limit = 5.0;      // 降低最大速度motor.acceleration_limit = 10.0; // 降低加速度motor.jerk_limit = 20.0;         // 降低加加速度
}

6. 实时监控运动状态

void loop() {motor.loopFOC();motor.move(target_position);// 监控运动状态Serial.print("目标: ");Serial.print(target_position);Serial.print(" | 实际: ");Serial.print(motor.shaft_angle);Serial.print(" | 速度: ");Serial.println(motor.shaft_velocity);
}

对比:非平滑 vs 平滑

非平滑运动(直接设置位置)

  • 电机会剧烈启动/停止

  • 产生较大机械冲击

  • 可能丢失同步

平滑运动(使用运动规划)

  • 速度从0逐渐增加到最大值

  • 接近目标时平滑减速

  • 减少机械应力,运行更安静

这就是 SimpleFOC 实现"平滑转动"的核心机制!运动规划器确保了电机在任何目标位置变化时都能产生平滑的速度曲线。

http://www.gsyq.cn/news/12605.html

相关文章:

  • “计算理论之美”课程笔记四:高维空间组合优化
  • 4gl
  • 926
  • 免费领夸克盘1tb
  • sql优化个人总结
  • Powershell 入门
  • US$100 Free Activation VVDI2 Copy 48 Transponder by OBDII Function Authorization Service
  • 题解:P13523 [KOI 2025 #2] 序列与查询
  • 实用指南:(14)ASP.NET Core2.2 中的日志记录
  • 论文笔记:How Can Recommender Systems Benefit from Large Language Models: A Survey - 详解
  • newDay04
  • day005
  • 软工9.26
  • 告别照相馆!这些小软件让你轻松搞定证件照!
  • Ext-js-即时入门-全-
  • 基于大数据的水产品安全信息可视化分析框架【Hadoop、spark、可视化大屏、课程毕设、毕业选题、数据分析、资料爬取、数据可视化】
  • 什么?就是算法面试(5)------NMS(非极大值抑制)原理 Soft-NMS、DIoU-NMS
  • CSS值
  • 2025_Polar秋季赛_web全解
  • 本地调试接口时遇到的跨域问题,十分钟解决
  • CF1995D Cases
  • 《etcd库——键值存储系统》 - 教程
  • 深度学习周报(9.15~9.21) - 实践
  • 2025.9.26总结 - A
  • 深入解析:盟接之桥EDI软件:中国制造全球化进程中的连接挑战与路径探索
  • 搜维尔科技:Force Dimension Omega力反馈设备遥操作工业机器人
  • C++程序练习(部分未完全完成)
  • C#性能优化基础:垃圾回收机制
  • 安装python解释器 - Jun
  • 深入解析MySQL InnoDB锁机制 - 教程