已知偏航角如何调节两侧旋翼速度以控制无人机恢复平衡,具体的调节方式是什么样的,如何把角度的误差转化为电机的转速差
6条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
要让无人机通过调节两侧旋翼速度来恢复平衡,你需要设计一个简单的控制系统,这个系统通常被称为PID(比例-积分-微分)控制器。PID控制器是一种常用的反馈控制器,它可以根据当前的偏差(即实际偏航角与期望偏航角之差)以及偏差的历史信息(积分项)和偏差的变化率(微分项)来调整输出。
以下是实现这一过程的步骤和伪代码:
-
定义参数:
- Kp:比例系数,用于快速响应当前偏差。
- Ki:积分系数,用于消除长期误差。
- Kd:微分系数,用于预测并抑制可能的振荡。
-
初始化:
- 设定期望偏航角为0度,因为我们要让无人机回到正前方。
- 初始化偏差、积分项和微分项为0。
-
测量:
- 从传感器获取实际偏航角。
-
计算偏差:
- 偏差 = 实际偏航角 - 期望偏航角。
-
积分项更新:
- 积分项 += 偏差 * 时间步长。
-
微分项计算:
- 如果是第一次计算,微分项 = 0;
- 否则,微分项 = (新偏差 - 旧偏差) / 时间步长。
-
PID输出:
- PID输出 = Kp * 偏差 + Ki * 积分项 + Kd * 微分项。
-
确定旋翼速度调整值:
- 由于我们有两个旋翼,我们可以简单地将PID输出平均分配给两个旋翼,或者根据旋翼位置进行不同的调整。
- 例如,如果左侧旋翼在前,右侧旋翼在后,则可以将PID输出的正值分配给左侧旋翼,负值分配给右侧旋翼,或者反之亦然,具体取决于你的无人机设计。
-
限制输出:
- 确保调整后的旋翼速度在允许的范围内。
-
执行:
- 将调整后的旋翼速度设置到相应的电机上。
以下是伪代码示例:
# 定义PID参数 Kp = 0.5 Ki = 0.1 Kd = 0.05 time_step = 0.01 # 时间步长,根据你的系统确定 max_speed_change = 100 # 旋翼速度的最大调整量 def pid_controller(current_yaw, desired_yaw): global error, integral, derivative # 计算偏差 error = current_yaw - desired_yaw # 更新积分项 integral += error * time_step # 计算微分项 if derivative is None: derivative = 0 else: derivative = (error - old_error) / time_step # PID输出 pid_output = Kp * error + Ki * integral + Kd * derivative # 限制输出 speed_adjustment_left = min(max(pid_output / 2, -max_speed_change), max_speed_change) speed_adjustment_right = min(max(-pid_output / 2, -max_speed_change), max_speed_change) # 设置旋翼速度 set_rotor_speed(0, current_speed_left + speed_adjustment_left) set_rotor_speed(1, current_speed_right + speed_adjustment_right) # 更新变量 old_error = error
这个伪代码展示了如何基于偏差、积分和微分来计算旋翼速度的调整值。你需要将其与你的硬件接口结合,并根据实际情况调整PID参数。注意,这只是一个基本的PID控制器,更复杂的无人机可能需要考虑更多因素,比如风力影响等。
解决 无用评论 打赏 举报 编辑记录-
悬赏问题
- ¥15 WPF动态创建页面内容
- ¥15 如何对TBSS的结果进行统计学的分析已完成置换检验,如何在最终的TBSS输出结果提取除具体值及如何做进一步相关性分析
- ¥15 SQL数据库操作问题
- ¥100 关于lm339比较电路出现的问题
- ¥15 Matlab安装yalmip和cplex功能安装失败
- ¥15 加装宝马安卓中控改变开机画面
- ¥15 STK安装问题问问大家,这种情况应该怎么办
- ¥15 关于罗技鼠标宏lua文件的问题
- ¥15 halcon ocr mlp 识别问题
- ¥15 已知曲线满足正余弦函数,根据其峰值,还原出整条曲线