差速巡线机器人设计-良好(80+)的报告-2023

news/2024/11/8 22:44:00/

如何提分?将一篇报告提升20分以上呢?

差速巡线机器人设计-及格(60+)的报告-2023_zhangrelay的博客-CSDN博客


姓名: 学号: 实践项目1名称:差速巡线机器人设计

60分:缺乏思考、没有对比、没有改进。

  1. 实验目的

简介:基于差速机器人底盘传感器,使用微处理器编程实现机器人快速巡线行驶。

详细描述:差速巡线机器人设计实验的目的是为了探索差速驱动技术在机器人巡线中的应用。通过设计和制作差速巡线机器人,可以测试其在不同地形和环境下的巡线能力和稳定性,同时也可以探索差速驱动技术在机器人运动控制中的优势和局限性。此外,该实验还可以促进自己对机器人控制和运动学的理解和应用能力的提升。

图1.1 差速巡线机器人场景设计

图1.2 差速巡线机器人仿真平台全景图

差速巡线机器人是一种能够自主巡线的机器人,其设计的实验目的是为了探究机器人在不同环境下的自主导航能力和巡线精度。通过对机器人的设计和实验,可以深入了解机器人的巡线原理和控制方法,进一步提高机器人的自主导航能力和巡线精度,为机器人在实际应用中的推广和应用提供技术支持。

  1. 实验意义或者动机

通过这个实验能够将自动控制原理的闭环控制,应用到巡线机器人案例上,真正理解并能够应用控制算法实现机器人的巡线任务。

差速巡线机器人设计实验的意义在于探索机器人在不同环境下的自主导航能力,特别是在复杂地形和障碍物较多的情况下。通过设计和实验,可以提高机器人的巡线精度和稳定性,同时也可以为机器人在工业、农业、医疗等领域的应用提供技术支持。

差速巡线机器人是一种能够自主巡线的机器人,其设计实验的意义在于探索机器人自主导航和控制的技术,以及应用于工业自动化、智能交通等领域。通过差速驱动和巡线传感器的结合,机器人能够实现精准的路径跟踪和避障,提高了机器人的自主性和智能化水平。此外,差速巡线机器人的设计实验还可以促进学生对机器人技术的理解和应用,培养学生的创新能力和实践能力。

表2.1 实验预期目标

巡线指标

稳定

速度

控制算法A

控制算法A+

控制算法A++

  1. 实验步骤

3.1底盘

差速巡线机器人地盘设计通常采用两个驱动轮和一个自由转动的支撑轮,驱动轮通过电机驱动,可以实现机器人的前进、后退、转弯等动作。此外,差速巡线机器人还需要配备差速装置,以便在行驶过程中能够灵活地调整两个驱动轮的转速,从而实现机器人的转向和平稳行驶。

在地盘的设计中,需要考虑机器人的重心平衡和稳定性,以及机器人的结构强度和耐用性。通常采用铝合金等轻质材料制作机器人的底盘和支架,同时采用橡胶轮胎和减震装置来提高机器人的稳定性和行驶平稳性。

此外,差速巡线机器人还需要配备传感器和控制系统,以便实现对机器人的自主导航和巡线功能。传感器通常包括红外线传感器、超声波传感器、光电传感器等,可以实现对机器人周围环境的感知和识别。控制系统则可以根据传感器的反馈信息,实现对机器人的运动轨迹和速度的控制和调整。

图3.1 机器人灰度传感器和两轮速度等可视化人机交互界面

图3.2 底盘左右轮和万向轮布局

3.2传感器

差速巡线机器人的传感器布局通常包括两个灰度传感器和两个轮速传感器。灰度传感器用于检测地面上的黑线,以便机器人能够沿着线路行驶。轮速传感器则用于测量机器人的轮子转速,以便控制机器人的速度和方向。这些传感器通常安装在机器人的底部,以便能够接触到地面并准确地检测黑线和轮子转速。

图3.3 灰度传感器布局

3.3 编程

1. 获取传感器的具体数值

simExtK3_getLineSensor(k3Handle,0)

simExtK3_getLineSensor(k3Handle,1)

说明,0,1分别代表左和右两个传感器。

  1. 设置左右轮速度

simExtK3_setVelocity(k3Handle,velLeft,velRight)

3.4 巡线算法

依据左右灰度传感器与黑线的偏差值调整机器人左右轮速度。

算法a- bang-bang控制

if (simExtK3_getLineSensor(k3Handle,0)>0.5) then

velLeft=maxVel

else

velLeft=maxVel*0.5

end

if (simExtK3_getLineSensor(k3Handle,1)>0.5) then

velRight=maxVel

else

velRight=maxVel*0.5

end

将状态空间划分为两个区域(空白和黑线),一个区域对应于控制变量取控制量最大值maxVel,另一个区域对应于控制变量取控制量最小值maxVel*0.5,稳定范围(0.0-0.5)。这两个区域的分界面称为开关面(simExtK3_getLineSensor(k3Handle,0)>0.5),而决定砰-砰控制的具体形式的关键就是决定开关面。

算法a+ 线性控制器

PID(仅用P控制)

velLeft=maxVel*simExtK3_getLineSensor(k3Handle,0)

velRight=maxVel*simExtK3_getLineSensor(k3Handle,1)

简要介绍:

算法a++ 非线性控制线

PID(仅用P控制)

velLeft=8.0*maxVel*simExtK3_getLineSensor(k3Handle,0)*simExtK3_getLineSensor(k3Handle,0)

velRight=8.0*maxVel*simExtK3_getLineSensor(k3Handle,1)*simExtK3_getLineSensor(k3Handle,1)

简要介绍:

3.5 调试

需要自己补充的。

  1. 实验结果和分析

在环境中配置图表,显示机器人速度控制量,以左轮为例:

图4.1 添加图显示机器人左轮速度

将如下黑色背景,调整为白色:

图4.2 默认图表为黑色

选择adjust background color:

图4.3 设置背景为白色

算法a控制量不平滑,导致机器人巡线晃动较大。

图4.4 bang-bang控制-控制量变化大导致机器人晃动

图4.4上图不带环境,下图带环境,依据需要选择合适的。

算法a+控制量如下,平滑度大幅提升,但是峰值速度下降到24以下,参数还有优化空间。

图4.5 改进后的控制曲线克服抖震(以左轮为例)

算法a++控制量如下,平滑度小幅下降,但是峰值速度可以提高到35+。

图4.6 改进后的控制曲线提升最大速度(以左轮为例)

  1. 总结和展望

依据实验目标实现了移动机器人巡线,但是控制不平滑,机器人运动过程中晃动明显,需要后续继续完善。

  1. 参考文献

1 V-Rep参考手册

2 移动机器人巡线原理与实践

3 自动控制原理

-- This script runs in a thread. You can also use a non-threaded script instead-- Following commands are implemented:
--
-- k3Handle=simExtK3_create(table_2 wheelMotorHandles,table_2 colorSensorHandles,table_9 IrSensorHandles,table_5 usSensorHandles,table_6 armMotorHandles,table_3 fingerMotorHandles,table_2 gripperDistSensHandles,table_2 gripperColSensHandles,number uiHandle) 
-- boolean result=simExtK3_destroy(number k3Handle)
-- distance_inMeters=simExtK3_getInfrared(k3Handle,index_of_ir_sensor_0_to_8)
-- distance_inMeters=simExtK3_getUltrasonic(k3Handle,index_of_us_sensor_0_to_5)
-- intensity_0_to_1=simExtK3_getLineSensor(k3Handle,index_of_line_sensor_0_to_1)
-- distance_inMeters=simExtK3_getGripperProxSensor(k3Handle,index_of_finger_prox_sensor_0_to_1)
-- boolean result=simExtK3_setVelocity(k3Handle,velocityLeft_radPerSec,velocityRight_radPerSec)
-- boolean result=simExtK3_setArmPosition(k3Handle,position_300_to_900)
-- boolean result=simExtK3_setGripperGap(k3Handle,gap_0_to_170)threadFunction=function()while simGetSimulationState()~=sim_simulation_advancing_abouttostop doif (simExtK3_getLineSensor(k3Handle,0)>0.5) then velLeft=maxVel         -- left sensor intensity > 0.5elsevelLeft=maxVel*0.5    -- left sensor intensity <= 0.5endif (simExtK3_getLineSensor(k3Handle,1)>0.5) then velRight=maxVel        -- right sensor intensity > 0.5elsevelRight=maxVel*0.5    -- right sensor intensity <= 0.5endsimExtK3_setVelocity(k3Handle,velLeft,velRight) -- Set desired left and right motor velocitiesif (simExtK3_getGripperProxSensor(k3Handle,0)<0.015)or(simExtK3_getGripperProxSensor(k3Handle,1)<0.015) then-- Something was detected between the fingerssimExtK3_setGripperGap(k3Handle,0) -- close the fingerssimExtK3_setArmPosition(k3Handle,900) -- move the arm upendend
end-- Initialization:
-- Check if the required extension module is there:
-- ************************************************
moduleName=0
moduleVersion=0
index=0
kheperaModuleNotFound=true
while moduleName domoduleName,moduleVersion=simGetModuleName(index)if (moduleName=='K3') thenkheperaModuleNotFound=falseendindex=index+1
end
if (kheperaModuleNotFound) thensimDisplayDialog('Error','Khepera3 plugin was not found. (v_repExtK3.dll)&&nSimulation will not run properly',sim_dlgstyle_ok,true,nil,{0.8,0,0,0,0,0},{0.5,0,0,1,1,1})
end
-- ************************************************-- Create the K3 object:
local wheelMotorHandles={simGetObjectHandle('K3_leftWheelMotor'),simGetObjectHandle('K3_rightWheelMotor')}
local colorSensorHandles={simGetObjectHandle('K3_colorSensorLeft'),simGetObjectHandle('K3_colorSensorRight')}
local irSensorHandles={}
for i=1,9,1 doirSensorHandles[#irSensorHandles+1]=simGetObjectHandle('K3_infraredSensor'..i)
end
local usSensorHandles={}
for i=1,5,1 dousSensorHandles[#usSensorHandles+1]=simGetObjectHandle('K3_ultrasonicSensor'..i)
end
local armMotorHandles={-1,-1,-1,-1,-1,-1}
armMotorHandles[1]=simGetObjectHandle('K3_gripper_armJoint1')
armMotorHandles[2]=simGetObjectHandle('K3_gripper_armJoint2')
armMotorHandles[3]=simGetObjectHandle('K3_gripper_armAuxJoint1')
armMotorHandles[4]=simGetObjectHandle('K3_gripper_armAuxJoint2')
armMotorHandles[5]=simGetObjectHandle('K3_gripper_armAuxJoint3')
armMotorHandles[6]=simGetObjectHandle('K3_gripper_armAuxJoint4')
local fingerMotorHandles={-1,-1,-1}
fingerMotorHandles[1]=simGetObjectHandle('K3_gripper_fingers')
fingerMotorHandles[2]=simGetObjectHandle('K3_gripper_fingersAux')
fingerMotorHandles[3]=simGetObjectHandle('K3_gripper_fingersAux0')
local gripperDistSensHandles={simGetObjectHandle('K3_gripper_leftDistanceSensor'),simGetObjectHandle('K3_gripper_rightDistanceSensor')}
local gripperColSensHandles={simGetObjectHandle('K3_gripper_leftColorSensor'),simGetObjectHandle('K3_gripper_rightColorSensor')}
local uiHandle=simGetUIHandle('K3_stateVisualization')k3Handle=simExtK3_create(wheelMotorHandles,colorSensorHandles,irSensorHandles,usSensorHandles,armMotorHandles,fingerMotorHandles,gripperDistSensHandles,gripperColSensHandles,uiHandle)simExtK3_setVelocity(k3Handle,6,6) -- set target velocity to 6 rad/sec for each wheel
simWait(5) -- Wait 5 seconds
simExtK3_setVelocity(k3Handle,0,0) -- stop
simWait(1) -- Wait 1 second
simExtK3_setGripperGap(k3Handle,0) -- close the fingers
simWait(2) -- Wait 2 seconds
simExtK3_setGripperGap(k3Handle,170) -- open the fingers
simWait(2) -- Wait 2 seconds
simExtK3_setArmPosition(k3Handle,300) -- put the arm down
simWait(6) -- Wait 6 seconds-- Now follow the black line and grasp an object:
maxVel=2*math.pi-- Here we execute the regular thread code:
res,err=xpcall(threadFunction,function(err) return debug.traceback(err) end)
if not res thensimAddStatusbarMessage('Lua runtime error: '..err)
end-- Clean-up:
-- Destroy the K3 object:
simExtK3_destroy(k3Handle)

附加参考:自动评分如下


http://www.ppmy.cn/news/42768.html

相关文章

企业推广常用的网络推广方法有哪些?

网络推广是指通过互联网向目标用户推广产品、服务或品牌的过程&#xff0c;其主要目的是为了扩大业务范围&#xff0c;提高企业知名度&#xff0c;增加销售额。在当今的数字化时代&#xff0c;网络推广已经成为了企业不可或缺的一部分。本文将介绍一些常见的网络推广方法和途径…

Android双目三维重建:Android双目摄像头实现双目测距

Android双目三维重建&#xff1a;Android双目摄像头实现双目测距 目录 Android双目三维重建&#xff1a;Android双目摄像头实现双目测距 1.开发版本 2.Android双目摄像头 3.双目相机标定 (1)双目相机标定-Python版 (2)双目相机标定-Matlab版 4.相机参数配置 5.Android 双…

4.13实验 加测试题目

今天是个好日子,要搞栈的实验 没啥就是链栈和顺序栈 和出栈入栈,强大都是从最基本开始的 来和我一起写写吧 //顺序栈 typedef struct node{int *base;int *top;int sizer; }shed;//链栈 typedef struct Node{ int data; struct Node* next; }*stact,link; //顺序栈的初始化…

Linux系统对文件及目录的权限管理(chmod、chown)

1、身份介绍 在linux系统中&#xff0c;对文件或目录来说访问者的身份有三种&#xff1a; ①、属主用户&#xff0c;拥有者&#xff08;owner&#xff09;文件的创建者 ②、属组用户&#xff0c;和文件的owner同组的用户&#xff08;group&#xff09;&#xff1b; ③、其他用…

【前端工具】使用真机在chrome远程调试

手机端需要做的事 手机上下载chrome浏览器 手机开启“开发者模式” 具体步骤各个品牌手机不太一样&#xff0c;华为手机为例&#xff1a; 打开手机上的 “设置” 图标&#xff0c; 进入最下方 “系统” 选项&#xff0c; 再点击最上方 “关于手机”&#xff0c; 接着连续点击 …

【数据结构】顺序表(上)

所属专栏&#xff1a;初始数据结构 博主首页&#xff1a;初阳785 代码托管&#xff1a;chuyang785> 感谢大家的支持&#xff0c;您的点赞和关注是对我最大的支持&#xff01;&#xff01;&#xff01; 博主也会更加的努力&#xff0c;创作出更优质的博文&#xff01;&#x…

Centos Stream 9 图文详细安装记录

1. 下载镜像文件ISO 官方&#xff1a; https://mirror.stream.centos.org/9-stream/BaseOS/x86_64/iso/ 清华&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/centos-stream/9-stream/BaseOS/x86_64/iso/ 阿里云&#xff1a;https://mirrors.aliyun.com/centos-stream/9-st…

【C++STL精讲】vector的模拟实现

文章目录&#x1f490;专栏导读&#x1f490;文章导读&#x1f337;定义vector类&#x1f337;各成员函数的实现&#x1f33a;构造函数&#x1f33a;迭代器&#x1f33a;size与capacity——求大小与容量&#x1f33a;reserve——扩容关于reserve中的深浅拷贝问题&#x1f33a;r…