ODrive的梯形轨迹

从PID到梯形曲线:用Python玩转Odrive的三种控制模式(位置/速度/电流环详解) 本文详细解析了Odrive控制器的三种PID控制模式(位置环、速度环、电流环)及其Python实现方法。通过梯形轨迹算法和参数调节技巧,帮助开发者掌握高精度运动控制,解决如'input_pos=50后为何不转'等典型问题,适用于机器人关节、云台稳定等场景。 阅读详情
AI摘要

文章介绍了如何使用ODrive控制器实现2804云台电机和5008航模电机的梯形轨迹控制,包括速度模式与位置模式的设置,以及电机和编码器的配置,强调了电机校准和轨迹规划的重要性。


 
SimpleFOC、ODrive和VESC 教程链接汇总:请点击
 
 

一、梯形轨迹

 
实际应用中,需要电机又快又稳的转到指定位置,梯形轨迹(INPUT_MODE_TRAP_TRAJ)本质上是一个分段函数的轨迹规划,是一个先加速,再匀速,再减速的三段函数的过程。

在这里插入图片描述

 

1.1、2804云台电机

在这里插入图片描述

ODrive 购买链接:https://item.taobao.com/item.htm?ft=t&id=644329838237,图锐科技
电机购买链接:https://item.taobao.com/item.htm?ft=t&id=643573104607,图锐科技

2804电机100kv,12V电源,最高速度为1200RPM = 20 转/秒

 
1.1.1、速度模式

先用速度模式热身,

odrv0.erase_configuration()
odrv0.config.dc_max_positive_current = 20
odrv0.config.dc_max_negative_current = -3.0
odrv0.axis0.motor.config.motor_type = MOTOR_TYPE_GIMBAL
odrv0.axis0.motor.config.pole_pairs = 7
odrv0.axis0.motor.config.calibration_current = 2.5                      //2=0.23A,2.5=0.3A(万用表测母线电流)
odrv0.axis0.encoder.config.mode = ENCODER_MODE_INCREMENTAL             //默认,选择编码器类型
odrv0.axis0.encoder.config.cpr = 4000                                  //默认8192,AS5047P=4000,TLE5012B=16384
odrv0.axis0.controller.config.control_mode = CONTROL_MODE_VELOCITY_CONTROL   //设置为速度模式
odrv0.axis0.controller.config.vel_gain = 0.02                          //默认0.167,速度环P参数
odrv0.axis0.controller.config.vel_integrator_gain = 0.2                //默认0.33333,速度环I参数
odrv0.axis0.controller.config.vel_limit = 20                           //默认2,限制最大转速
odrv0.axis0.controller.config.input_mode = INPUT_MODE_VEL_RAMP         //速度爬升模式
odrv0.axis0.controller.config.vel_ramp_rate = 10                       //默认1,非常小,加速度
odrv0.save_configuration()
odrv0.reboot()

odrv0.axis0.requested_state = AXIS_STATE_FULL_CALIBRATION_SEQUENCE    //电机参数校准和编码器校准
odrv0.axis0.error
odrv0.axis0.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL
odrv0.axis0.motor.config.pre_calibrated = True                     //设置预先校准,以后上电可以用保存的参数
odrv0.axis0.config.startup_encoder_offset_calibration = True       //编码器校准,每次上电必须
odrv0.axis0.config.startup_closed_loop_control = True
odrv0.save_configuration()
odrv0.reboot()

odrv0.axis0.controller.input_vel = 10
odrv0.axis0.controller.input_vel = 0
odrv0.axis0.requested_state = AXIS_STATE_IDLE   //退出闭环模式

 
1.1.2、位置模式,梯形轨迹

odrv0.erase_configuration()
odrv0.config.dc_max_positive_current = 20
odrv0.config.dc_max_negative_current = -3.0
odrv0.axis0.motor.config.motor_type = MOTOR_TYPE_GIMBAL
odrv0.axis0.motor.config.pole_pairs = 7
odrv0.axis0.motor.config.calibration_current = 2.5                        //2.5=0.3A,3=0.42A(万用表测母线电流)
odrv0.axis0.encoder.config.mode = ENCODER_MODE_INCREMENTAL              //选择编码器类型
odrv0.axis0.encoder.config.cpr = 4000                                  //默认8192,AS5047P=4000,TLE5012B=16384
odrv0.axis0.controller.config.control_mode = CONTROL_MODE_POSITION_CONTROL
odrv0.axis0.controller.config.vel_limit = 20
odrv0.axis0.controller.config.pos_gain = 10
odrv0.axis0.controller.config.vel_gain = 0.02
odrv0.axis0.controller.config.vel_integrator_gain = 1
odrv0.axis0.controller.config.input_mode = INPUT_MODE_TRAP_TRAJ   //梯形轨迹
odrv0.axis0.trap_traj.config.vel_limit = 5
odrv0.axis0.trap_traj.config.accel_limit = 10
odrv0.axis0.trap_traj.config.decel_limit = 10
odrv0.save_configuration()
odrv0.reboot()

odrv0.axis0.requested_state = AXIS_STATE_FULL_CALIBRATION_SEQUENCE
odrv0.axis0.error
odrv0.axis0.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL
odrv0.axis0.motor.config.pre_calibrated = True                          //ABZ编码器上电不校准无法进入闭环
odrv0.axis0.config.startup_encoder_offset_calibration = True
odrv0.axis0.config.startup_closed_loop_control = True
odrv0.save_configuration()
odrv0.reboot()

odrv0.axis0.controller.input_pos = 5
odrv0.axis0.controller.input_pos = 0

 

1.2、5008航模电机

在这里插入图片描述

ODrive 购买链接:https://item.taobao.com/item.htm?ft=t&id=644329838237,图锐科技
电机购买链接:https://item.taobao.com/item.htm?ft=t&id=643573104607,图锐科技

AS5047P_SPI接口,电源电压12V,24V都可以。

odrv0.erase_configuration()                                           //清除之前的配置,恢复默认配置
odrv0.config.dc_bus_overvoltage_trip_level = 56
odrv0.config.dc_max_positive_current = 30
odrv0.config.dc_max_negative_current = -5
odrv0.axis0.motor.config.motor_type = MOTOR_TYPE_HIGH_CURRENT         //设置电机类型
odrv0.axis0.motor.config.pole_pairs = 7                               //默认7
odrv0.axis0.motor.config.calibration_current = 8                      //默认10,12V设置为8=0.6A,24V设置为10=0.4A
odrv0.axis0.encoder.config.mode = ENCODER_MODE_SPI_ABS_AMS            //设置编码器类型
odrv0.axis0.encoder.config.abs_spi_cs_gpio_pin = 1                    //选择CS引脚
odrv0.axis0.encoder.config.cpr = 2**14                                //14bit
odrv0.axis0.controller.config.control_mode = CONTROL_MODE_POSITION_CONTROL
odrv0.axis0.controller.config.vel_limit = 100
odrv0.axis0.controller.config.pos_gain = 20
odrv0.axis0.controller.config.vel_gain = 0.1
odrv0.axis0.controller.config.vel_integrator_gain = 1
odrv0.axis0.controller.config.input_mode = INPUT_MODE_TRAP_TRAJ      //梯形轨迹
odrv0.axis0.trap_traj.config.vel_limit = 50
odrv0.axis0.trap_traj.config.accel_limit = 10
odrv0.axis0.trap_traj.config.decel_limit = 10
odrv0.save_configuration()
odrv0.reboot()

odrv0.axis0.requested_state = AXIS_STATE_FULL_CALIBRATION_SEQUENCE    //电机校准,“哔”一声,然后正反转一圈
odrv0.axis0.error                                                     //查看是否有错误
odrv0.axis0.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL          //进入闭环
odrv0.axis0.motor.config.pre_calibrated = True                        //设置预先校准,以后上电可以用保存的参数
odrv0.axis0.config.startup_encoder_offset_calibration = True          //编码器必须校准,否则重启后不能闭环
odrv0.axis0.config.startup_closed_loop_control = True                 //上电直接进入闭环
odrv0.save_configuration()
odrv0.reboot()

odrv0.axis0.controller.input_pos = 5
odrv0.axis0.controller.input_pos = 0

 
 
(完)
 
 
 
 

从2804云台电机到桌面机械臂:一个GD32+AS5600的FOC驱动踩坑实录 本文详细记录了从2804云台电机到桌面机械臂的DIY过程,重点介绍了GD32+AS5600的FOC驱动系统搭建中的实战经验。内容包括硬件选型、驱动电路迭代、AS5600磁编码器的I2C问题解决、PID调参技巧以及机械集成优化,为创客和工程师提供了宝贵的踩坑实录和技术参考。 阅读详情

相关推荐

机器人路径规划算法(三)

文章目录三、复合轨迹1.梯形轨迹2.双S速度曲线轨迹2.1 vlim=vmaxv_{lim} = v_{max}vlim​=vmax​2.2 vlim<vmaxv_{lim} < v_{max}vlim​<vmax​2.3 轨迹表达 三、复合轨迹 1.梯形轨迹 为了获得连续的速度轨迹,常见的轨迹方程就是使用线性差值混合抛物线插值,以此获得具有梯形剖面的速度轨迹。 梯形轨迹可以分为三部分。假设 q0<q1q_0<q_1q0​<q1​​ ,第一部分加速度为正的常数,因此速度是

九月清晨的博客 1451

ODrive应用 #1 ODrive入门指南

ODrive 入门 文章目录ODrive 入门硬件需求需要准备以下硬件:ODrive 接线Wiring up the motorsWiring up the encodersSafety & Power UPDownloading and Installing ToolsWindowsOSXLinuxFirmwareStart `odrivetool`Configure M02. Set ...

codenocold 8万+

Odrive梯形速度规划实战:从代码到电机平滑运动的保姆级解析

本文深入解析Odrive梯形速度规划算法,从代码实现到电机平滑运动的实战应用。通过详细讲解梯形速度规划的核心原理、工程实现步骤及与闭环控制的协同工作,帮助开发者掌握位置爬坡算法,优化电机运动性能,提升工业自动化设备的精度与寿命。

weixin_42565652的博客 211

【电机参数】直流无刷电机2804电机参数测量——电感、电阻、极对数、磁链常数

【电机控制】直流有刷电机、无刷电机汇总——持续更新使用工具:1.示波器:正点原子DS100(50M)2.电桥LCR:VICIOR4090A3.电钻:博世电动工具4.直流稳压电源:GPS305D(30V/5A)提示:以下是本篇文章正文内容,下面案例可供参考本文仅仅简单介绍了【电机控制】STM32F103CXT6无刷直流电机SimpleFOC控制学习板——带电流环方面,评论区欢迎讨论。

qq_42681425的博客 2万+

ODrive位置环PID调参实战:用TLE5012B编码器让3508电机实现‘钉子般’的精准定位

本文详细介绍了如何通过ODrive位置环PID调参,结合TLE5012B磁编码器,实现3508电机的精准定位。从基础参数设定到分阶段优化策略,再到高级频域分析法,全面解析了调参过程中的关键技巧和常见问题解决方案,帮助工程师实现‘钉子般’的定位精度。

weixin_42647395的博客 394

Makerbase ODrive 霍尔电机位置环模式实战:从零配置到精准定位

本文详细介绍了Makerbase ODrive与霍尔电机在位置环模式下的实战配置技巧,涵盖硬件连接、参数设置、编码器配置及位置环调参等关键步骤。通过实际案例解析,帮助用户实现精准定位,特别适合需要高精度运动控制的AGV、自动化设备等应用场景。

weixin_29164091的博客 348

Odrive源码分析(四) 位置爬坡算法

首先当需要控制电机运动到某个位置时,会调用函数,该函数会调用上面的函数planTrapezoidal。然后会在control对象中调用eval函数不断的计算出下一时刻的目标位置和速度。Odrive中自带一个简单的梯形速度爬坡算法,本文分析下这部分代码。那么关键就是两个函数planTrapezoidal和eval。

白色冰激凌的技术专栏 1261

从焊接翻车到电机转起来:一个硬件小白的ODrive AP调试全记录(附完整配置参数)

本文记录了硬件新手从焊接翻车到成功调试ODrive AP板的完整过程,详细分享了焊接技巧、固件配置、电机PID调参等实战经验,并附上关键配置参数。通过三十次失败总结出的调试方法,帮助读者快速掌握ODrive AP的调试技巧,实现无刷电机的精准控制。

weixin_30412167的博客 347

Odrive0.5.1-FOC电机控制 controller.cpp代码实现

这段代码是 ODrive 固件中的一个关键函数,用于抗齿槽效应(Anti-Cogging)校准,是高级电机控制中常用的补偿机制之一。这是 ODrive 0.5.1 中 Controller::update() 的完整实现,是控制核心逻辑的心脏部分,主要完成从输入指令 → 内部处理 → 生成最终力矩指令(torque setpoint)的全过程。这是控制器类(Controller)的函数,用于选择一个编码器作为该控制器的控制目标(如位置闭环控制时的位置反馈来源)。

MOS_JBET的博客 815

机器人轨迹规划——梯形速度轨迹(超详细)

机器人轨迹 这一系列轨迹教程将主要包括以下内容: 点到点轨迹(P2P) 五次多项式插值轨迹 三次多项式插值轨迹 梯形速度曲线轨迹 双S形速度曲线轨迹 多个自由度轨迹的时间同步 在线轨迹规划 多项式在线轨迹规划 梯形在线轨迹规划 双S形在线轨迹规划 非线性实时轨迹滤波 多点轨迹(Multi-point) 三次样条曲线(cubic spline) 贝赛尔曲线(Bezier Curve) B样条曲线(BSpline) 时间最优轨迹 三次样条时间最优轨迹 任意路径下的时间最优轨迹 时间

出门搔白首,若负平生志 1万+

飞塔防火墙CVE-2022-40684漏洞复现:手把手教你搭建靶场环境(附调试技巧)

本文详细指导如何搭建Fortinet飞塔防火墙CVE-2022-40684认证绕过漏洞的靶场环境,涵盖虚拟机部署、网络配置、调试模式开启及漏洞原理分析。通过手把手教程,读者可掌握漏洞复现与深度调试技巧,深入理解该认证绕过漏洞的利用与防御。

h6i7j8的博客 695

Odrive驱动板FOC控制实战:从PID调参到多模式应用解析

本文详细解析了Odrive驱动板的FOC控制实战,从基础配置、PID参数调试到多模式应用。重点介绍了如何通过编码器反馈和PID调节实现电机的精准控制,涵盖位置、速度、力矩三种模式,并提供了实用的调试技巧和常见问题解决方案,帮助开发者高效应用FOC技术。

efc123456的博客 179

玩转肺癌目标检测数据集Lung-PET-CT-Dx ——①从TCIA获取影像数据集

该目标检测公共数据集源自 The Cancer Imaging Archive(TCIA),是肿瘤研究方面的著名的医学影像公开数据库。 数据以 DICOM 格式存储,由肺癌受试者的 CT 和 PET-CT DICOM 图像组成。

takedachia的博客 1万+

3个智能算法让你的开源电机驱动器性能翻倍

ODrive是一个开源的高性能无刷电机驱动器项目,它将复杂的运动控制技术变得触手可及,让普通开发者和机器人爱好者也能实现专业级的电机控制。通过先进的控制算法和灵活的硬件设计,ODrive让廉价的无刷电机具备了工业级的运动控制能力,为机器人、CNC机床和自动化设备提供了强大的驱动解决方案。 ## 项目全景:从电机"驯兽师"到运动"指挥家" 想象一下,无刷电机就像一匹未经驯服的野马,充满了能量但难

gitblog_00807的博客 521

WPF毛玻璃效果别再写C#代码了!纯XAML用Border+VisualBrush+BlurEffect三步搞定

本文详细介绍了如何在WPF中通过纯XAML实现毛玻璃效果,无需编写C#代码。通过VisualBrush、BlurEffect和Clip的黄金组合,开发者可以快速创建专业级的毛玻璃面板,提升UI的现代感和视觉层次。文章还提供了性能优化技巧和实战案例,帮助开发者在各种场景中高效应用这一技术。

weixin_28630185的博客 352

数字后端实现Innovus教程之手把手教你N种高亮timing path和clock tree方法

数字IC后端设计实现Innovus教程之手把手教你N种高亮timing path和clock tree方法

weixin_37584728的博客 3592

ODrive Firmware v0.5.6 — MotionControl模块源码解析

本文解析了ODrive固件v0.5.6版本中MotionControl模块的架构与实现。该模块采用严格实时的多环控制链:控制器(慢环)决策力矩目标,电机对象调度执行,FOC电流环(快环)处理电流采样与变换,估计器提供位置速度反馈。文章详细介绍了各子模块职责,包括轴状态机、轨迹规划、FOC实现、编码器处理等核心组件,并阐述了实时调度机制和信号处理流程。重点分析了轴对象的构造与状态机循环,以及控制器如何实现位置/速度/力矩控制模式转换。通过组件化设计和信号源切换机制,系统实现了灵活的控制策略配置。

weixin_40767138的博客 905

k8s集群部署私有镜像仓库

本文介绍了在Kubernetes集群中部署私有镜像仓库的完整方案。使用registry:2镜像创建Deployment,通过NodePort(30500)暴露服务,并采用hostPath(/data/registry)实现数据持久化。部署过程包括节点标记、YAML配置、资源创建及验证步骤,同时提供了Docker和Containerd两种环境下的详细使用方法,包括配置不信任私有仓库、镜像推送/拉取操作指南。该方案特别适合开发测试环境,为团队提供便捷的本地镜像管理能力。

weixin_42728286的博客 893

ODrive无刷电机驱动快速上手:从接线到闭环控制的完整避坑指南

无刷电机(BLDC/PMSM)的精准控制依赖FOC(磁场定向控制)技术,而ODrive作为开源驱动器,将高中低功率的机器人关节、舵轮底盘等场景的驱动方案集成在一块电路板上。上手ODrive的关键并非急于通电,而是理解编码器校准、极对数配置与三相相序等基础概念。从工程实践角度出发,梳理从接线、固件工具链到闭环控制的完整路径,并针对供电不稳、编码器跳数、电机抖动等高频故障给出排查方法,能够帮助开发者快速跨越“接上就冒烟”的坑,实现电机从点动到平滑位置控制的跃迁。

weixin_28278377的博客 211

基于分水岭分割进行肺癌诊断

近年来,肺癌的发病率和病死率均迅速上升,目前已居所有癌症之首。随着肺癌病人数量的增加,医生对肺部 CT 图像进行研判的工作量也增加了不少,在这种情况下难免工作效率降低甚至会出现误诊。为了帮助医生减少重复性工作,对肺部 CT 图像进行计算机辅助检测的技术就被广泛应用于对肺癌的诊断和治疗过程中。医学 CT 图像处理主要是研究医学图像中的器官和组织之间的关系,并进行病理性分析。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1568

华为OD机试真题 新系统2026-04-01 Python&JS 实现【空间占用计算】

员工A的磁盘空间经常被耗尽,他需要找到占用空间最大的目录或文件,然后决定如何清理文件释放空间。给定某一目录,请编写程序帮助他统计该目录内一级子目录和文件的占用空间,并返回目标目录一级子项(文件或子目录)中占用空间最大的项。

MISAYAONE的博客 1299

ODrive 关键参数配置实战指南

本文提供ODrive关键参数配置实战指南,详细解析电机类型选择、极对数设置、电流限制等核心配置步骤。通过编码器校准技巧和控制参数调优,帮助用户避免常见故障,实现高性能无刷电机的稳定运行和精确控制。

oauth7security的博客 794

docker安装部署openclaw详细教程(安装、卸载、问题处理)

摘要: 本文详细介绍了使用Docker部署OpenClaw本地AI智能体框架的全流程,包括代码下载、容器化安装、交互式配置及Token设置。Docker方案解决了环境配置复杂、依赖冲突等痛点,提供开箱即用的隔离环境。教程涵盖常见错误(如EACCES权限问题、网关启动失败、设备配对需求)的解决方案,并提供了完整的卸载指南。通过Docker部署,用户可快速构建安全、一致的AI智能体开发环境,实现大模型与本地工具的高效连接。

少说,多做 4003

ODrive与Arduino集成:完整代码示例与项目实战

ODrive是一款开源的高性能无刷电机驱动器,专门为机器人、CNC机床和自动化设备设计。本文将详细介绍如何将ODrive与Arduino集成,提供完整的代码示例和项目实战指南,帮助初学者快速上手无刷电机控制。 ## 🎯 为什么选择ODrive与Arduino集成? ODrive提供了精确的电机控制能力,而Arduino作为广泛使用的微控制器平台,两者结合可以快速构建原型系统。ODrive支持

gitblog_00404的博客 617

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

ODrive移植keil(九)—— 抗齿槽效应算法

在永磁电机中,即使定子中没有电流通过,也会存在一个电磁转矩,这个转矩叫齿槽力矩(Cogging Torque)。用手转动电机,会感觉到它从当前点“跳跃”并“稳定”在另一个点,电机有“一格一格”的顿挫感(俗称颗粒感)。当电机低速转动时,表现为“一顿一顿”,当电机高速转动时,电机的振动和噪声会更大。某疆早期的2312电机齿槽效应非常大,后来的电机齿槽效应明显变小了。5008电机的齿槽效应小,改善效果不明显,用齿槽效应大的电机测试,改善效果还是很明显的。

loop222的博客 1万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

ODrive 配置 重要参数

Odrive重要参数,odrivetool,配置cpr检查所需的精度,用于在执行编码器偏移校准时编码器的实际输出计算的移动距离和电机开环步进移动距离之间允许的最大误差,超过此误差将报错 ERROR_CPR_OUT_OF_RANGE。类型为 [float],单位为 [A],电机运行的电流范围,根据此值来自动调整电流采样运放的增益,设置后需要保存配置并重启才能生效。类型为 [float],单位为 [turn/s],输入的电机目标转速,如:设置为 1 即表示电机将以 1转/秒的速度旋转。(更快地响应电机位置变化)

GKDf1sh 1870

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

上一篇: ODrive的CAN通信
下一篇: VESC操作入门(二)——双轮毂电机控制和CAN通信
loop222
博客等级 码龄8年 4091粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值