【《基于Arduino的四轮驱动爬壁机器人运动方案的设计及软件设计案例》3000字】_第1页
【《基于Arduino的四轮驱动爬壁机器人运动方案的设计及软件设计案例》3000字】_第2页
【《基于Arduino的四轮驱动爬壁机器人运动方案的设计及软件设计案例》3000字】_第3页
【《基于Arduino的四轮驱动爬壁机器人运动方案的设计及软件设计案例》3000字】_第4页
【《基于Arduino的四轮驱动爬壁机器人运动方案的设计及软件设计案例》3000字】_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于Arduino的四轮驱动爬壁机器人运动方案的设计及软件设计案例目录TOC\o"1-3"\h\u31036基于Arduino的四轮驱动爬壁机器人运动方案的设计及软件设计案例 120422第1章运动方案的设计 1124551.1运动方式及实现的功能 1320551.2运动轨迹设计 213280第2章软件及程序控制设计 3156232.1编写前准备 3214112.1.1软件准备 334032.1.2库文件准备 3278512.1.3电机驱动模式选择 4230522.2控制程序 470332.3使用注意事项 7第1章运动方案的设计1.1运动方式及实现的功能运动方式采用的四轮驱动的方式进行运动,轮子采用的是麦克纳姆克轮,要能够实现的功能是调头,前进,后退,右转,可控制的角度转向的功能。如图1.1.1所示。采用麦克纳姆克轮的优点在于转向的时候轴不用任何径向角度,而且转向性能更好。图1.1.11.2运动轨迹设计运动轨迹设计就是电机的设置,先对驱动四轮子的直流伺服电机进行分组,四个电机分为左前,右前,左后,右后。当收到指令要实现前进的功能时,四个电机都是正转,且转速是相同的,后退也是一样的,四个电机,同样的速度反转,执行后退。当收到指令要实现的功能是左转,左前方转向,左后方倒车时,电机的转速是左边的两个电机转速小与右边的两个电机,同样的原理,右转,右前方转,右后方倒车,直流伺服电机的转向是右边的转速小于左边的转速,实现了转向的功能,可以把电机分为两组,左边电机,右边电机,因为同一边的两个电机转速,转向是一样的。对于控制直流伺服电机的转速所需要的信号需要进行一个映射,进行两个阶段的加速或者进行减速,第一阶段的加速或者减速,就是直接由y轴双轴摇杆进行加速或者减速,但是加速或者减速的速度波动范围很小,也就是可调节的范围很小,但是如果同时拨动z轴双轴摇杆的话,那么可调转速的范围将会变大,这样就能达到分阶段调节速度的目的,将电机分成两组之后,拨动x轴双轴摇杆,运动接收部分收到x轴的变化量,进行一个比例映射,得到一组数值。对左右两组的转速的控制信号进行加减,进而控制了转向,比如,想让它右转,拨动双轴摇杆向右,接收的数值变化进行一定比例的映射,这组数据加载到左边的电机上,右边的控制信号减去这个数值,这样左边的电机转速就会大于右边的,已达到向右转或者右前转的目的。同样的原理,进行左转也是如此,这组数据加载到右边的电机上,左边的控制信号减去这个数值,这样右边的电机转速就会大于左边的,已达到向左转或者左前转的目的。图1.2.1所示是具体的控制流程图,图中的判断z轴电压发生变化会,那么Arduinonano会对电压作出判断,判断是否属于人为拨动z轴摇杆所发生的变动范围,若是确定为操作人员进行的操作,那么就会在原来的数值上加上一个经过映射的数值,原来的数值也是经过映射的,这样就可以达到像手动挡汽车一样的加速效果。图1.2.41第2章软件及程序控制设计2.1编写前准备2.1.1软件准备编写前软件需要ArduinoIDE软件,利用ArduinoIDE软件进行程序的编写。2.1.2库文件准备在程序编写之前,还需要准备库文件,利用库,可以更方便地进行程序的编写,大大降低程序编写的难度,需要用到SPI.h,这个库文件是关于SPI通信的库文件,另外还有NRF24L01.h,RF21.h这两个库文件,数据才能正常的收发,库文件可以在软件库管理处下载,进行安装使用。2.1.3电机驱动模式选择直流伺服电机驱动器的驱动有很多种模式,由于手柄部分的双轴摇杆给的电压范围在0v-5v内,当不操作摇杆时,电压在2.5v,所以可以直接选择的直流伺服电机驱动器的控制模式为速度控制模式的外部模拟量输入控制,Arduinonano的模拟量整数范围在0-1023内,电压范围在0v-5v内,直流伺服电机驱动器的外部模拟输入信号电压在0v-2.5v电压时,驱动器控制直流伺服电机做反转,当直流伺服电机驱动器的外部模拟输入信号电压在2.5v-5v时,驱动器控制直流伺服电机做正转,输入信号整数范围为0-512时控制直流伺服电机反转,输入信号整数范围512-1023时控制直流伺服电机进行正转,当输入信号在512时,直流伺服电机不转,而且当输入的信号在0和1023,也就是电压在0v和5v时,直流伺服电机的转速最大。2.2控制程序程序分为两部分,分为发射部分与接收部分,手柄部分下载到发射部分程序,接收运动部分下载接收程序。发射程序的编写需要用到的主要函数有voidloop()为环,程序在无限循环,没有返回值。Serial.begin(9600)作用设定通信速度,RF24radio()作用是写CE,CSN的接引脚。Constbyteaddress(6)作用是传教一个通信地址,后面写六位二进制数,带表通信的通道数,radio.setPALevel作用设定通信的波特率,越小通信范围越广。radio.stopListening(),设定为信号发射端。radio.write作用为将数据发送。pinMode作用是设置引脚的功能,设置为输出或者输入模式,默认为输入模式。radio.startListening作用是设置为接收部分。radio.read作用为读取数据并且保存,radio.available()如果接收到现在,得到返回值1。analogWrite作用是输出模拟量。一下为发射和接受程序的部分编写说明,对于电机的控制不包含在内#include<SPI.h>,#include<nRF24L01.h>,#include<RF21.h>,表示所需要的三个库,constbyteaddress[6]="00001";表示地址通道,最多六通道。charxyzData[32]="";定义32位字符串,StringxAxis,yAxis,zAxis;定义x轴前进,y轴转向,z轴为油门三个变量voidsetup(){Serial.begin(9600);radio.begin();radio.openWritingPipe(address);radio.setPALevel(RF24_PA_MIN);radio.stopListening();}//定义通信速度9600,发送数据的地址adress,功率放大器,设置为最小,以获得最大的通信距离,设置为发送模块。voidloop(){xAxis=analogRead(A1);yAxis=analogRead(A0);zAxis=analogRead(A2);radio.write(&xyzData,sizeof(xyzData));//发送radio.write(&xyzData,sizeof(xyzData));//发送radio.write(&xyzData,sizeof(xyzData));//发送delay(30);}//将三个引脚的数据进行发送,按顺序发送,然后延时30毫秒,这是就发射部分的程序。#include<SPI.h>#include<nRF24L01.h>#include<RF21.h>#definein13#definein25#definein36#definein49//这一部分定义引脚3.2.6.9为wpm输出,以作控制驱动器使用。RF24radio(7,8);//为CE,CSN的引脚。constbyteaddress[6]="00001";charreceivedData[32]="";intxAxis,yAxis,zAxis;intmotorSpeedA=512;intmotorSpeedB=512;intmotorSpeedC=512;intmotorSpeedD=512;intv=512;//初始在512时,给的电压为2.5v,直流伺服电机不转。intv=512;//初始在512时,给的电压为2.5v,直流伺服电机不转。voidsetup(){pinMode(in1,OUTPUT);pinMode(in2,OUTPUT);pinMode(in3,OUTPUT);pinMode(in4,OUTPUT);把接口定义为输出模式。Serial.begin(9600);通信速度9600。radio.begin();radio.openReadingPipe(0,address);radio.setPALevel(RF24_PA_MIN);//最小时,通信范围最广。radio.startListening();//设定为接收方。}}voidloop(){if(radio.available()){//如果接收到发射的数据radio.read(&receivedData,sizeof(receivedData));//读取并保存xAxis=atoi(&receivedData[0]);//把接收到的值转换为整数delay(10);radio.read(&receivedData,sizeof(receivedData));yAxis=atoi(&receivedData[0]);delay(10);radio.read(&receivedData,sizeof(receivedData));zAxis=atoi(&receivedData[0]);delay(10);}三次延时共计30毫秒,这个数不能比发射部分的延时小,后者数据的读取出错。以上是发射和接收程序的详解。if(zAxis<470&&zAxis>0){v=map(zAxis,0,470,250,470);//速度转换,将z轴给的模拟量从0-470映射到250-470,}//降低速度时的转换if(zAxis>550&&zAxis<1023){v=map(zAxis,550,1023,550,800);//速度转换,将z轴给的模拟量从550-1023映射到550-800}//增大速度时的转换if(zAxis>470&&zAxis<550){v=512;//速度转换,将z轴给的模拟量范围470-550全部定义为512,因为有时候双轴摇杆给的电压不一定为2.5v,即整数512}这里主要是将油门进行映射,规定拨动摇杆范围在470-550时,不进行工作,以防止灵敏度导致的操作失误。对于数据的缩放和各种映射处理以及控制直流伺服电机的程序见附录一。双轴摇杆给的信号经过发送到接收部分,接收部分进行处理,接收到的信号需要按照一定的处理,接收到的信号x轴的范围为0-1023,主要控制的是方向,不操作是接收到的数据是512,但这只是在理想的前提之下,摇杆不可能没有发生偏转,设置接收到470-550之间的任意值时,不转向,所以这里需要map这个函数进行映射,将接收到550与470都等比映射到512上,再发生给伺服电机驱动器,同样的y轴,z轴也是如此,也都需要映射。同时这里因为x轴的控制速度的范围太大,所以加z轴的原因就是将速度控制在两个等级,类似与汽车的挂挡,有分级调速的效果,在不使用z轴时,接收到经过处理的数据范围为300-512-700,而使用z轴,那么接收经过处理后数据范围为0-512-1023。这样壁面了

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论