当前位置:首页 > 机器人开发 > 会走迷宫的机器人需要的材料:主控制器,地面灰度检测传感器模块4块,红外避障传感器1个,黑色胶带1卷
 

会走迷宫的机器人需要的材料:主控制器,地面灰度检测传感器模块4块,红外避障传感器1个,黑色胶带1卷

来源:机器人的天空    时间:2026/3/11

要用黑胶带制作一幅迷宫地图,如图10-3所示。在迷宫的出口处 用一个障碍物当作“宝藏”。然后,我们机器人的任务就是顺利通过迷宫并且停在“宝藏” 前面。这里先来处理一个简化的问题,假设迷宫的地图是已知的,也就是说,机器人知道应该向什么方向,转几次弯才能走出迷宫。

实 验 器 材

· 已经组装好的机器人;

· 计算机及软件编程环境;

·USB 下载线;

· 主控制器;

· 地面灰度检测传感器模块4块;

· 红外避障传感器1个;

· 黑色胶带1卷;

· 作为宝箱的浅色立方体1个。

实验步骤

1.连接机器人

先将机器人、扩展板和地面灰度检测传感器模块连接好。其中,地面灰度检测传感 器连接到A0~A3 端口。红外避障传感器连接到D3 端口。

2.调试灰度阈值

同样,像以前一样通过实验确定机器人所采用的灰度阈值。因为4个传感器的电路 和安装上可能会出现微小的差别,所以这里比较稳妥的处理方式是不要嫌麻烦,为它们每 个都测量一个灰度阈值。

3.编写程序

假设在已知的地图中,机器人只要在碰到路口时先进行两次左转弯,再进行一次右转 弯,就能走出迷宫了。用我们刚刚学习过的函数知识,这个程序可以写成下面示例中的样 子。同样,这个示例中与上节课示例程序有很多重合的地方,用省略号将之略去。

函数如何封装的问题,是没有一个固定答案的,示例程序中给出的可能也不是Z好的解决方案。总之,良好的函数封装可以让你的程序变得更简洁、更可读以及更容易维护和 修改,同学们在慢慢积累编程经验的过程中就会摸索出如何封装函数的窍门了。

const int InfraPort=3;

int counter=0;

//函数声明

void turn_left();

void turn_right();

void stop();

void go_straight();

void setup(){

pinMode(InfraPort,INPUT);


} void loop(){

if(digitalRead(InfraPort)==HIGH){ stop();

while(1);


//避障传感器连接D3 端口

//用于计数通过路口数目的变量

//找到宝藏,停下来

}

if(leftValueThreshold&&leftValuego_straight();

}else if(leftValue>Threshold II rightValue>Threshold){ //遇到路口

if(counter<2){

turn_left();

}else if(counter==2){

turn_right(); }else{

stop();

while(1); }

counter++;

)else if(leftMiddleValue>Threshold){

analogWrite(LeftSpeedPort,TurnHighSpeed);

analogWrite(RightSpeedPort,TurnLowSpeed); )elsef

analogWrite(LeftSpeedPort,TurnLowSpeed);

analogWrite(RightSpeedPort,TurnHighSpeed); }

delay(100);

//前两次遇到路口左转

//第3次遇到路口右转

//再遇到路口就停止,有可能地图出错了

//向右转弯

//向左转弯

//左转90°的函数实现

void turn_left(){

digitalWrite(LeftDirPort,LOW);

analogWrite(LeftSpeedPort,Forwardspeed);

analogWrite(RightspeedPort,ForwardSpeed);

delay(DelayTime);

digitalWrite(LeftDirPort,HIGH);

}

//右转90°的函数实现

void turn_right(){

digitalWrite(RightDirPort,LOW);

analogWrite(RightSpeedPort,ForwardSpeed);

analogWrite(LeftSpeedPort,Forwardspeed);

delay(DelayTime);

digitalWrite(RightDirPort,HIGH); }

//直行函数

void go_straight(){

analogWrite(LeftSpeedPort,ForwardSpeed);

analogWrite(RightSpeedPort,ForwardSpeed); }

//停止函数

void stop(){

analogWrite(LeftSpeedPort,0);

analogWrite(RightSpeedPort,0);



 
 
 
相关推荐
» 机器人的舵机:对电机转动位置的精确控制
» 机器人舵机的控制:PWM信号,周期是20ms, 脉冲的宽度从1~2ms 秒之间
» 机器人挥舞手臂需要的器材:机器人,USB下载线,主控制器 ,舵机
» 机器人巡线挑战赛的器材与步骤:机器人,绝缘胶布1卷,制作货仓和卸货塔的硬纸板,检测传感器
» 灭火机器人的技能:接近火源和灭火装置
» 灭火机器人的开发过程:连接机器人,驱动风扇,寻找火源
» Arduino机器人的主控制板接口使用说明
» 移动机器人同时定位和地图创建(SLAM)原理:机器人的位姿和地图信息
» 基于多机器人协作的关键问题:有限带宽和地图拼接
» 迎宾机器人的位置传感器:电位器、光电编码器
 
 
 
  » 联系我们
X 关闭  
 
网站首页
关于创泽 公司简介   资质荣誉   企业文化
新闻资讯 公司新闻 [机器人新闻 董事长新闻 比赛与荣誉类]  行业动态
解决方案 商用服务机器人   陪护机器人   安防机器人   智能医疗机器人  党建机器人
服务支持 常见问题   下载
人才招聘 招聘信息   精彩瞬间
党群建设 党建活动   工会活动   其他活动
商务合作 招募支持   报名提交
联系我们 售后服务   留言咨询
   
   
 
联系我们  
北京·清华科技园C座五楼
山东省日照市开发区太原路71号
版权所有 © 创泽智能机器人集团股份有限公司           中国运营中心:北京·清华科技园C座五楼       生产研发基地:山东日照太原路71号       电话:4008-128-728