目录
- 1.引言
- 2. 实验流程
- 2.1. V-REP环境搭建
- 2.2. 电机和部件建模
- 3.控制策略描述
- 3.1. PID控制
- 3. 2. 控制参数调整
- 4.代码结构
- 5.结论
- 配套环境和源代码
- PS.扩展阅读
- ps1.六自由度机器人相关文章资源
- ps2.四轴机器相关文章资源
- ps3.移动小车相关文章资源
1.引言
在机器人学和自动化领域,V-REP(Virtual Robot Experimentation Platform)仿真环境是一个强大的工具,它允许研究人员和开发者在虚拟环境中设计、测试和优化机器人模型。本文将引导读者了解如何在V-REP中建模一个二轮平衡车,并实现其直立平衡控制。通过这个过程,我们不仅能够学习到机器人建模的基础知识,还能够了解pid控制算法的调整体验。
2. 实验流程
2.1. V-REP环境搭建
首先,我们需要在V-REP中搭建仿真环境。这包括创建二轮平衡车的模型,以及为它添加必要的部件,如电机、车轮和车身。
2.2. 电机和部件建模
在V-REP中,我们使用参数化建模方法来创建电机和车轮。每个部件都可以通过V-REP的图形界面进行调整和优化。
为确保模型的仿真效果接近现实,我们需要为每个部件设置适当的物理属性。
3.控制策略描述
平衡车的控制网上已经有很多讨论了,也比较成熟,不再过多赘述,主要用平衡、速度和转向三个PID的叠加输出对电机进行实时控制。
核心在于保持车身的直立平衡。这通常通过一个反馈控制系统来实现,该系统根据车身的倾斜角度来调整电机的转速,以实现平衡。其中PID参数的调试比较费时。主要知识点涉及如下:
3.1. PID控制
PID控制器是一种常见的反馈控制器,它根据误差的比例(P)、积分(I)和微分(D)来计算控制输出。
python实现示例:
class PID:
def __init__(self, kp, ki, kd, setpoint=0):
"""
初始化PID控制器。
:param kp: 比例增益
:param ki: 积分增益
:param kd: 微分增益
:param setpoint: 设定点
"""
self.kp = kp
self.ki = ki
self.kd = kd
self.setpoint = setpoint
self.integral = 0
self.last_error = 0
def update(self, feedback_value):
"""
更新PID控制器。
:param feedback_value: 实际的反馈值
:return: 控制输出
"""
error = self.setpoint - feedback_value # 计算误差
self.integral += error # 更新积分项
derivative = error - self.last_error # 计算微分项
# 计算PID输出
output = (self.kp * error) + (self.ki * self.integral) + (self.kd * derivative)
# 更新上次误差为本次误差,以便下次调用使用
self.last_error = error
return output
def set_setpoint(self, setpoint):
"""
设置新的设定点。
"""
self.setpoint = setpoint
def reset(self):
"""
重置PID控制器的积分和微分项。
"""
self.integral = 0
self.last_error = 0
3. 2. 控制参数调整
在V-REP中,我们可以通过调整PID参数来优化控制效果。这需要通过多次试验和仿真来完成。
网上也有一些经验,个人认为核心是量纲尺度的把控,和pid控制调节周期的保障,应该是要50ms左右级别的周期有利于pid的快速反馈。
4.代码结构
采用下位控制+上位控制的结构,下位是lua脚本实现PID直立平衡,上位为获取小车的状态数据,进行监控。以及便于后续进行远程方向控制开发。
以下是V-REP中用于控制二轮平衡车的脚本代码的部分结构:
-
simRemoteApi.start(19999)
: 这行代码启动了远程API服务,允许外部程序与V-REP进行通信。
-
sysCall_init()
: 这是初始化函数,用于设置仿真开始时的环境,包括获取对象句柄、设置初始速度、定义控制周期和PID参数等。 -
calculateAngle()
: 这个函数用于计算两个向量之间的角度,是计算车身倾斜角度的关键部分。
-
sysCall_actuation()
: 这是仿真的主循环,包含了控制逻辑和电机速度的实时调整。
-
通信处理:一如前面所需,我们可以和python进行联合编程,通过通讯获取仿真环境和python环境的数据双向交互,但遗憾的是这种交互速度为秒级,无法满足用python直接控制小车的要求,脚本中还包含了处理外部通信的代码,如接收指令和发送状态信息,python可以作为上位机,实现对小车的状态监控,以及以后更高级的操控。
5.结论
通过在V-REP仿真环境中对二轮平衡车进行建模和控制,我们能够深入了解机器人动态行为和联合控制策略。这种仿真方法不仅节省了实际测试的时间和成本,还提高了研发效率。随着技术的不断进步,V-REP等仿真工具在机器人学领域的应用将越来越广泛。
配套环境和源代码
配套资料已经上传供深入二次开发,资源链接
【本篇完】
扩展阅读____________
————————————————————————————————————————
PS.扩展阅读
————————————————————————————————————————
对于python机器人编程感兴趣的小伙伴,可以进入如下链接阅读相关咨询
ps1.六自由度机器人相关文章资源
(1) 对六自由度机械臂的运动控制及python实现(附源码)
(2) N轴机械臂的MDH正向建模,及python算法
ps2.四轴机器相关文章资源
(1) 文章:python机器人编程——用python实现一个写字机器人
(2)python机器人实战——0到1创建一个自动是色块机器人项目-CSDN直播
(3)博文《我从0开始搭建了一个色块自动抓取机器人,并实现了大模型的接入和语音控制-(上基础篇)》的vrep基础环境
(3)博文《我从0开始搭建了一个色块自动抓取机器人,并实现了大模型的接入和语音控制-(上基础篇)》的vrep基础环境
(4)实现了语音输入+大模型指令解析+机器视觉+机械臂流程打通
ps3.移动小车相关文章资源
(1)python做了一个极简的栅格地图行走机器人,到底能干啥?[第五弹]——解锁蒙特卡洛定位功能-CSDN博客
(2) 对应python资源:源码地址
(3)python机器人编程——差速AGV机器、基于视觉和预测控制的循迹、自动行驶(上篇)_agv编程-CSDN博客
(4)python机器人编程——差速AGV机器、基于视觉和预测控制的循迹、自动行驶(下篇)_agv路线规划原则python-CSDN博客
对应python及仿真环境资源:源码链接