二轮平衡小车的诞生

文章目录

  • 树莓派平衡小车仿真、设计与制作
    • 算法设计
      • 1.平衡车动力学建模
        • 1.1受力分析
        • 1.2运动学分析
        • 1.3动力学分析
      • 2. PID控制器参数计算
    • 结构设计
      • 1. CATIA设计小车结构
        • 1)结构件
        • 2)电子设备
          • a. 清单
          • b. 接线
        • 3)小车装配
    • 环境搭建
      • 1.树莓派系统安装
      • 2.网络问题与镜像源选择
      • 3.相关软件包安装与测试
        • 1) 安装启动I2C模块
        • 2) 安装git
        • 3) 安装wiringPi模块
        • 4) 测试MPU6050模块
        • 5) 安装Code::Blocks
    • 代码编写与调试(PID部分)
    • 运行效果

树莓派平衡小车仿真、设计与制作

算法设计

1.平衡车动力学建模

1.1受力分析

首先将问题简化为二维平面倒立摆问题,以下为小车的模型图:

二轮平衡小车的诞生_第1张图片

小车整体模型图

下面采用隔离法,分别对轮子部分及杆件部分进行分析,以下为轮子单独受力图:

二轮平衡小车的诞生_第2张图片

轮子部分单独受力分析

以下为杆件单独受力图:

二轮平衡小车的诞生_第3张图片

杆单独受力分析

1.2运动学分析

根据小车模型首先进行运动学分析,下面为轮子的速度分析:

二轮平衡小车的诞生_第4张图片

轮子速度分析

对杆件速度分析有:

二轮平衡小车的诞生_第5张图片

杆速度分析

在进行加速度分析轮子有:

二轮平衡小车的诞生_第6张图片

轮子加速度分析

而杆件的加速度分析结果如下:

二轮平衡小车的诞生_第7张图片

杆加速度分析

根据上面的分析结果列写方程如下:
V c x = V A − ω m l s i n θ V_{cx}=V_A-\omega _m l sin\theta Vcx=VAωmlsinθ

− ω m r = V A -\omega _m r =V_A ωmr=VA

− d ω m d t r = d V A d t -\frac{d\omega _m}{dt} r =\frac{dV_A}{dt} dtdωmr=dtdVA

1.3动力学分析

根据小车模型受力图进行动力学分析,对轮子列写受力方程如下:
x : − f + F x ′ = M a A x:-f+F_x'=Ma_A x:f+Fx=MaA

y : N + F y ′ − M g = 0 y:N+F_y'-Mg=0 y:N+FyMg=0

对轮子列写力矩方程如下:

对A点:

r为轮子半径。
M M − f r = J M d ω M d t M_M-fr=J_M\frac{d\omega _M}{dt} MMfr=JMdtdωM
对O点:
− F x ′ r + M M = J M d ω M d t -F_x'r+M_M=J_M\frac{d\omega_M}{dt} Fxr+MM=JMdtdωM
对杆件受力列写方程如下:
x : F x = m a C x = m d 2 x c d t 2 x:F_x=ma_{Cx}=m\frac{d^2x_c}{dt^2} x:Fx=maCx=mdt2d2xc

y : F y − m g = m a C y y:F_y-mg=ma_{Cy} y:Fymg=maCy

对杆件列写力矩方程如下:

对A点:
− m g l c o s θ = J m d ω m d t -mglcos\theta=Jm\frac{d\omega_m}{dt} mglcosθ=Jmdtdωm
对C点:
F x l s i n θ − F y l c o s θ = J m d ω m d t F_xlsin\theta-F_ylcos\theta=J_m\frac{d\omega _m}{dt} FxlsinθFylcosθ=Jmdtdωm
另外由轮子与杆件之间的相互作用力有:
x : F x = − F x ′ x:F_x=-F_x' x:Fx=Fx

y : F y = − F y ′ y:F_y=-F_y' y:Fy=Fy

2. PID控制器参数计算

化简合并以上运动学、动力学方程有以下结果:
m d x c 2 d t 2 r + M M = − J M r d x A 2 d t 2 m\frac{dx_c^2}{dt^2}r+M_M=-\frac{J_M}{r}\frac{dx_A^2}{dt^2} mdt2dxc2r+MM=rJMdt2dxA2

x c − x A = l c o s θ x_c-x_A=lcos\theta xcxA=lcosθ

− m g l c o s θ = J m d θ 2 d t 2 -mglcos\theta=Jm\frac{d\theta^2}{dt^2} mglcosθ=Jmdt2dθ2

以上结果使用进行线性化处理并拉式变换得到:
θ ( s ) U ( s ) = m g s 2 + J m l 2 − J M r 2 M g s 4 + l s 3 − s 2 − s \frac{\theta(s)}{U(s)}=\frac{mgs^2+\frac{J_m}{l^2}-\frac{J_M}{r^2}}{Mgs^4+ls^3-s^2-s} U(s)θ(s)=Mgs4+ls3s2smgs2+l2Jmr2JM
实际系统测量参数为:

符号 物理意义 参数
M 轮子质量 1.215kg
m 杆件质量 0.403kg
l 轮子质心到杆件质心距离 3.24cm
J_M 轮子转动惯量 0.0023kg·m^2
J_m 杆件转动惯量 0.0109kg·m^2
g 当地重力加速度 9.8m/s^2
r 轮子半径 5cm

θ ( s ) U ( s ) = 3.95 s 2 + 9.46 11.91 s 4 + 3.24 s 3 − s 2 − s \frac{\theta(s)}{U(s)}=\frac{3.95s^2+9.46}{11.91s^4+3.24s^3-s^2-s} U(s)θ(s)=11.91s4+3.24s3s2s3.95s2+9.46

使用matlab的pzmap函数绘制原系统零极点如下:

二轮平衡小车的诞生_第8张图片

零极点图

可以看出以上系统不稳定所以需要设计PID控制器如下:

二轮平衡小车的诞生_第9张图片

仿真PID控制器

未调参时原系统阶跃响应:

二轮平衡小车的诞生_第10张图片

原系统阶跃响应

调参后系统阶跃响应

二轮平衡小车的诞生_第11张图片

系统阶跃响应

可以看到系统经过PID调节后稳定,下面我们通过实物进一步验证我们的模型。

结构设计

1. CATIA设计小车结构

二轮平衡小车的诞生_第12张图片
总装爆炸图

二轮平衡小车的诞生_第13张图片

总装图
### 2.材料准备与搭建

1)结构件

车体: 3mm层板

轮毂: 2mm层板

二轮平衡小车的诞生_第14张图片

车体搭建

2)电子设备

a. 清单

​ 树莓派3b+ X1

​ L298N电机驱动模块 X1

​ MPU-6050模块(三轴陀螺仪+三轴加速度) X1

​ 电机、小轮 X2 对

​ 18650锂电池 X2

​ 40cm母对母杜邦线若干、电源线、船形开关

b. 接线

二轮平衡小车的诞生_第15张图片

树莓派引脚

二轮平衡小车的诞生_第16张图片

接线图

二轮平衡小车的诞生_第17张图片

实物接线图

3)小车装配

二轮平衡小车的诞生_第18张图片

实物装配(1)

二轮平衡小车的诞生_第19张图片

实物装配(2)

环境搭建

1.树莓派系统安装

下载系统Raspbian系统和安装工具NOOBS (NewOut Of Box System)。 下载地址

二轮平衡小车的诞生_第20张图片

a. 将下载的系统文件解压后的镜像文件xxx-raspbian-jessie.img"拷贝进SD卡根目录。

**b. **将NOOBS 解压后的NOOBS_v1_9_1文件夹中的所有文件拷贝到SD卡根目录,注意要进入NOOBS_v1_9_1文件夹拷贝里面的所有文件,而不是直接拷贝文件夹。

c. 将SD卡装入树莓派。找个带HDMI接口的显示器,如果没有就买个HDMI转VGA的转接线使用常见VGA接口显示器作为树莓派的屏幕,连上USB鼠标键盘,一切就绪。连上电源线通电后树莓派将自动进入安装程序,稍等一会就系统就装好了,默认登录到图形界面。

2.网络问题与镜像源选择

**网络设置: **树莓派3b+自带无限网卡,可直接连接右上角的WLAN,若连接校园网,需使用浏览器任意打开一个网站,待跳出账号登陆界面后输入账号密码。

**更换国内镜像源: **树莓派系统安装后默认使用国外的镜像源,因为墙的原因,所以在安装模块的时候速度非常慢,因此需要将镜像源换成国内的。

  1. 首先确认自己的树莓派系统版本,可使用命令:

    lsb_release -a

    注意Codename后面的版本名称(stretch/jessis)

    ( 我的版本是stretch,若是其他版本可自行查询修改命令 )

  2. 更改镜像源(清华镜像源)

    执行如下语句,编辑/etc/apt/sources.list文件。

    $ sudo nano /etc/apt/sources.list

    用**#**注释掉原文内容,用以下内容取代:

    deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi
    deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi
    

    ( CTRL+O 确认并存盘CTRL+X 退出,如不确定是否保存成功,可以再次打开查看 )

    执行如下语句,编辑/etc/apt/sources.list.d/raspi.list文件。

    $ sudo nano /etc/apt/sources.list.d/raspi.list

    用**#**注释掉原文内容,用以下内容取代:

    deb http://mirror.tuna.tsinghua.edu.cn/raspberrypi/ stretch main ui
    deb-src http://mirror.tuna.tsinghua.edu.cn/raspberrypi/ stretch main ui
    

    ( 请采用相同方法保存 )

    编辑镜像站后,请使用$ sudo apt-get update命令,更新软件源列表。

    常用镜像站汇总

3.相关软件包安装与测试

1) 安装启动I2C模块

$ sudo apt-get install libi2c-dev
$ sudo nano /etc/modules 

​ 在该文件中添加代码:

`i2c-bcm2708 `

i2c-dev

$ sudo raspi-config

​ 点击Internationalisation Options ,使I2C模块enabled,并重启树莓派。

​ 开机后确认I2C是否正常启动

$ lsmod |grep i2c
i2c_dev                 6027  0
i2c_bcm2708             4990  0

2) 安装git

$sudo apt-get install git-core

3) 安装wiringPi模块

$ cd
$ git clone git://git.drogon.net/wiringPi
$ cdwiringPi
$ sudo ./build

4) 测试MPU6050模块

$ sudo apt-get install i2c-tools
$ sudo i2cdetect -y 1

若看到

0 1  2  3 4  5  6 7  8  9 a  b  c d  e  f
00:         — — — — — — — — — — — — —
10: — — — — — — — — — — — — — — — —
20: — — — — — — — — — — — — — — — —
30: — — — — — — — — — — — — — — — —
40: — — — — — — — — — — — — — — — —
50: — — — — — — — — — — — — — — — —
60: — — — — — — — — 68 — — — — — — —
70: — — — — — — — —

则树莓派已正常识别MPU6050了,之后尝试读取加速度计数据:

$ cd
$ git clone https://github.com/wennycooper/mpu6050_in_c.git
$ cd mpu6050_in_c
$ cat README.md

按照说明进行编译,并执行

$ gcc -o mpu6050_accl ./mpu6050_accl.c  -lwiringPi -lpthread -lm
$ gcc -o mpu6050_gyro ./mpu6050_gyro.c -lwiringPi -lpthread -lm
$ sudo ./mpu6050_accl

可看到X, Y, Z三轴加速度数据,可尝试将MPU6050各向反转,观察数据变化。

再读取陀螺仪数据:

$ sudo ./mpu6050_gyro

可以看到X, Y, Z三轴的角速度。

5) 安装Code::Blocks

执行如下命令:

$ sudo apt-get install codeblocks

代码编写与调试(PID部分)

完整代码见底部工程文件链接:

extern float angle_adj;

float PID_adjust(float err,PID *p)
{
    float Global_X_Measure=0.0f;
    
	p->ERROR=err;
	
//	p->ERROR=a*p->ERROR+(1.0f-a)*p->ERROR_LAST;
	
    p->Integral+=p->ERROR;
//	if(fabs(err)>2.0f)p->Integral=0;
	
	
    Global_X_Measure=	 p->Kp  *  p->ERROR
                        +p->Ki  *  p->Integral
                        +p->Kd  *( p->ERROR-p->ERROR_LAST) ;
    
   
    p->ERROR_LAST=p->ERROR;
   
	
	return Global_X_Measure;

}

运行效果

二轮平衡小车的诞生_第21张图片

测试现场

二轮平衡小车的诞生_第22张图片

视频预览图

[视频链接]https://pan.baidu.com/s/15WGSO0U7v27B9zIaILNTqA

[代码工程]https://github.com/STARK1117/Standcar.git

[CSDN博客]https://blog.csdn.net/ZHANGHAO1117/article/details/86472201

你可能感兴趣的:(电子爱好)