二轮平衡车直立控制VREP仿真及python上位机监控实现基础环境

news2024/11/18 10:49:59

目录

  • 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及仿真环境资源:源码链接
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1863921.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

东南亚本地化游戏

通常,亚洲电子游戏市场首先与中国联系在一起。但最近,分析人士越来越关注一个邻近地区:东南亚。而且有充分的理由。 该地区包括中南半岛、马来群岛和邻近岛屿上的十一个国家。1967年,其中10个国家(除东帝汶外&#xf…

.NET C# 使用GDAL将mdb转换gdb数据

.NET C# 使用GDAL将mdb转换gdb数据 目录 .NET C# 使用GDAL将mdb转换gdb数据1 环境2 Nuget3 Code 1 环境 VisualStudio2022 .NET6 GDAL 3.8.5 2 Nuget 3 Code FeatureExtension.cs public static class FeatureExtension {[DllImport("gdal.dll", EntryPoint &…

各大广告商竞相厮杀下,诞生了一个偏门的副业方式

前段时间,想买摩托车,但是媳妇不让买,所以我打算偷偷买,然后萌生了去摆摊赚钱的想法,但是还没有实施就在网上接触到了“某赚”APP,于是一发不可收拾,用我的话来说,我做的不是副业&am…

从一万英尺外看libevent(源码刨析)

从一万英尺外看libevent 温馨提示:阅读时间大概二十分钟 前言 Libevent是用于编写高速可移植非阻塞IO应用的库,其设计目标是: 可移植性:使用libevent编写的程序应该可以在libevent支持的所有平台上工作。即使没有好的方式进行非…

多业态、多品牌企业,如何实现积分通积通兑?(附大会员方案)

2021年,龙湖升级珑珠为全业态通用积分,招商荟深度接入招商蛇口大会员体系建设;2022年,华润置地大会员“万象星”正式上线;2023年,“蒙牛生活家会员中心”全新上线…… 越来越多地产、零售等行业的集团品牌…

【学习】如何利用Python技术进行软件测试相关工作

Python是一种广泛使用的高级编程语言,它因其简洁的语法、强大的库支持和跨平台特性而受到开发者的喜爱。在软件测试领域,Python同样发挥着重要作用,它可以帮助测试人员编写自动化测试脚本、进行接口测试、性能测试、以及处理测试数据等。以下…

迅为RK3588开发板支持LVDS信号,标准 HDMI信号,IMIPI信号

性能强--iTOP-3588开发板采用瑞芯微RK3588处理器,是全新一代ALoT高端应用芯片,采用8nm LP制程,搭载八核64位CPU,四核Cortex-A76和四核Cortex-A55架构,主频高达2.4GHZ,8GB内存,32GB EMMC。 四核心…

2024第十三届中国PMO大会主持人介绍

全国PMO专业人士年度盛会 由PMO评论主办的2024第十三届中国PMO大会邀请了到十几位知名企业的PMO和项目管理专家来担任大会主持人。大会将于6月29-30日在北京举办,敬请关注! 主持人介绍 肖杨,国际知名组织级项目管理专家,微薄之力…

[深度学习] 自编码器Autoencoder

自编码器(Autoencoder)是一种无监督学习算法,主要用于数据的降维、特征提取和数据重建。自编码器由两个主要部分组成:编码器(Encoder)和解码器(Decoder)。其基本思想是将输入数据映射…

软考《信息系统运行管理员》-1.2信息系统运维

1.2信息系统运维 传统运维模式(软件) 泛化:软件交付后围绕其所做的任何工作纠错:软件运行中错误的发现和改正适应:为适应环境做出的改变用户支持:为软件用户提供的支持 新的不同视角下的运维 “管理”的…

【八股系列】Vue中的<keep-alive>组件:深入解析与实践指南

🎉 博客主页:【剑九 六千里-CSDN博客】 🎨 上一篇文章:【探索响应式布局的奥秘:关键技术与实战代码示例】 🎠 系列专栏:【面试题-八股系列】 💖 感谢大家点赞👍收藏⭐评论…

三、用户中心项目笔记----后端多环境实战+原始部署

后端多环境主要是修改: 依赖的环境地址 数据库地址 缓存地址 消息队列地址 项目端口号 服务器配置 后端怎么去区分不同的环境? 我们后端的SpringBoot项目,通过application.yml添加不同后缀来区分配置文件 application.yml就是公共的配置&a…

NeRF从入门到放弃6:两种OpenCV去畸变模型

针孔相机和鱼眼相机的去畸变模型是不一样的。 针孔相机的畸变参数有12个,k1~k6是径向畸变参数,p1 p2是切向畸变,s1s4;而鱼眼相机是等距模型,畸变参数只有4个k1k4。 针孔相机 畸变分为径向畸变和切向畸变。 把相机平…

链式结构二叉树练习

一.二叉树的前序遍历 想要输出所给值,就要先用数组将数据存储起来,所以这里我们单独创建一个前序遍历函数,将所要数据前序遍历并放入数组,代码如下: void preOrder(struct TreeNode* root, int* a, int* pi)//前序遍历…

新鲜出炉的信息化一机两用方案

在信息化日益发展的今天,网络安全问题愈发凸显其重要性。尤其是在政府和企事业单位中,如何在保证业务流畅和工作效率的同时,确保信息高安全性,成为了一个亟待解决的问题。而“一机两用”政策,正是针对这一需求而提出的…

如何理解:业务架构、应用架构、数据架构、技术架构与系统和复杂度

关于系统的理解 1.1 系统的概述 随着人类社会的发展,人们面对越来越多的规模巨大、关系复杂、参数众多地复杂问题,这些问题的复杂度已经远远超出人类的理解能力,系统论就是为了分析和解决这些问题而生。我们平时接触的计算机系统包括软件系统…

C语言 | 文件操作(下)【必收藏】

文件操作(下) 5、文件的顺序读写5.1 顺序读写函数介绍5.1.1 fputc与fgetc5.1.2 fputs与fgets5.1.3 fprintf与fscanf5.1.4 fread与fwrite 5.2 对比一组函数 6. 文件的随机读写6.1 fseek6.2 ftell6.3 rewind 7. 文件读取结束的判定7.1 被错误使用的feof 8.…

Python爬虫实战:利用代理IP批量下载哔哩哔哩美女视频

文章 目录 1.前言2.爬取目标3.准备工作3.1 环境安装3.2 代理免费获取 四、爬虫实战分析4.1 翻页分析4.2 获取视频跳转链接4.3 下载视频4.4 视频音频合并4.5 完整源码 五、总结 1.前言 粉丝们(lsp)期待已久的Python批量下载哔哩哔哩美女视频教程它终于来…

Java中File文件和IO流

File文件和IO流 概述 FIle是java.io.下面的包,用于代表当前操作系统的文件 可以获文件信息,判断文件类型,创建删除文件夹 注意:File只能对文件本身进行操作,不能读写文件里面存储的数据 …

Docker三分钟部署ElasticSearch平替MeiliSearch轻量级搜索引擎

👩🏽‍💻个人主页:阿木木AEcru (更多精彩内容可进入主页观看) 🔥 系列专栏:《Docker容器化部署系列》 《Java每日面筋》 💹每一次技术突破,都是对自我能力的挑战和超越。 目录 一、 …