机器人制作开源方案 | 货物输送小车

news2024/11/16 21:37:01

作者:周展鹏 黄万森 彭军铭 吕会权 聂文俊

单位:柳州工学院

指导老师:蔡洪炜 王一波

1. 场景调研

      目前货物输送已成为人们生活中必不可少的部分,加之国内近年来有因快递配送导致疫情迅速传播的事件常有发生,因此在疫情期间,如何高效便捷的完成快递的收派工作,是当前快递行业亟需解决的问题。目前在国内的市场上正式投入使用的此类小车并不是很多,这些快递小车的造价过于昂贵,并不适用于例如学校送餐和送快递、居民生活派送物品等,为了降低病毒传播风险,减少人与人之间的接触,本项目设计了一款货物输送小车。

      该小车是一种基于探索者平台设计并制作的小车,可以在减少人与人接触、降低人口聚集的情况下完成输送工作,降低病毒传播风险,并且具有路径规划、自动循迹、红绿灯检测、货物输送、超声波测距等功能。系统以Basra控制板为控制核心,感知系统主要以触须模块为主,配合循迹模块、电机驱动模块、超声波测距模块、颜色识别等模块形成完整的感知系统,小车底盘结构主体部分采用刚性柔性组合方式轮式驱动和辅助部分采用轮腿式驱动相结合的方式,在山路或者陡坡中,该小车可表现出强大的适应力和优越的抓地力。

2. 结构设计

2.1 作品结构简图及装配图

 2.2机器结构说明图示

2.3小车实物图 

3. 控制设计

3.1 控制系统设计思路

      该小车的系统框图如下所示,本次设计以Brsra主控芯片为控制核心,另外由电源模块、电机驱动模块、超声波测距模块、避障模块、颜色识别模块共同完成该系统设计。

系统方案框图

      首先由电源模块给整个系统供电,然后通过主控板控制电机驱动小车运行;避障模块通过相关的传感器感知周围环境自动驾驶,在遇到障碍物时将遇障信号传递给主芯片,主芯片通过CPU发出信号使电机改变不同的状态和速度,从而实现智能小车的避障以及跨越不同的障碍;通过路径规划,超声波测距模块及电机驱动模块,通过颜色识别模块识别红绿灯,当红灯时小车停下来,当绿灯时小车继续行驶。

3.2各模块设计及关键代码说明

① 获取循迹传感器输出函数

//获取循迹传感器输出函数

int GetTraceDate()

{

  int Data_Out;//定义数据输出变量

  int Left_AD,Right_AD,Mid_AD;//定义左右中传感器AD值变量

 

  Left_AD=analogRead(A0);

  Mid_AD=analogRead(A2);

  Right_AD=analogRead(A3);

  Data_Out=(Left_AD-Right_AD+D_AD_VALUE);

  Serial.print(Data_Out);

  Serial.print("   ");

  if(Left_AD > _H && Mid_AD > _H && Right_AD > _H)

    stop = 1;

  else

    stop = 0;

  if(Mid_AD>200)

  {

    flag = 0;

  }

  if((Mid_AD <= LEFT_THERSH) && (Data_Out < -20))

  { //left

    Data_Out= (1.5*LEFT_MAX-Data_Out);

    flag--;

  }

  else if((Mid_AD <= RIGHT_THERSH) && (Data_Out > -10))

  { //right

    Data_Out= (2*RIGHT_MAX+Data_Out);

    flag++;

  }

  if(Left_AD < _L && Mid_AD < _L && Right_AD < _L)

  {

       Serial.print("---");

       if(flag<0)

       {//left

          Data_Out = LEFT_MAX*2;

       }

       else

       {//right

          Data_Out = RIGHT_MAX*2;

       }

  }

  return Data_Out;

}

② 自动跟随函数

void   followDrive()//自动跟随

{  

    getDistance_on();   // 获取当前的距离

    if ((inches >= followDist - followBalance) && (inches <= followDist + followBalance))

    {

      if (inches > followDist) // 当两者间的距离大于设定值时,小车前进

      {  

        step_forword();   // 小车前进

       

      }

      else if (inches < followDist) // 当两者间的距离大于设定值时,小车后退

      {  

        noline_back();   // 小车后退

       

      }

      else

      {

        _stop();   // 小车停止

      }

    }

    else

    {

      _stop();

    }

}

 ③ 颜色识别和存储函数

void card_color_detection()

{

  uint16_t clear, red, green, blue; //分别定义用于存储红、绿、蓝三色值变量

  tcs.getRGBC(&red, &green, &blue, &clear); //将原始R/G/B值转换为色温(以度为单位)

  tcs.lock();   //禁用中断(可省略)

  uint32_t sum = clear;           //===========

  float r, g, b;                  // 计算红

  r = red; r /= sum;              // 绿、蓝

  g = green; g /= sum;            // 三色数

  b = blue; b /= sum;             // 值

  r *= 256; g *= 256; b *= 256;   //===========

   if((r>g)&&(r>b))

   {

    delay(40);

    if((r>g)&&(r>b))

      {

        color_detection_card=1;

        color_detection_card_last=color_detection_card;

        color_flag=5;

      }

   }

     if((g>r)&&(g>b))

     {

        delay(40);

        if((g>r)&&(g>b))

         {

          color_detection_card=2;

          color_detection_card_last=color_detection_card;

          color_flag=5;

         }

      }

    // if(color_detection_card=2)

    // {

    //   motor_control();

    // }

    // else

    // _stop();

  Serial.print("\t card = ");

  Serial.print(color_detection_card); // 色卡值

  Serial.println();//

}


④ 小车运动函数

void _stop()//小车停止

{

  Near_Infrared();

  analogWrite(leftA_PIN, 0);

  analogWrite(leftB_PIN, 0);

  analogWrite(righA_PIN, 0);

  analogWrite(righB_PIN, 0);

}

void step_forword()//小车前进

{

    analogWrite(5, step_right_speed);

    analogWrite(6, 0);

    analogWrite(9, 0);

    analogWrite(10, step_left_speed);   

}

void noline_back()//小车后退

{

analogWrite(5, 0);

analogWrite(6, step_right_speed);

analogWrite(9, step_left_speed);

analogWrite(10, 0);

}

void setup() {

  Serial.begin(9600);//9600

  motor_pinint();

  //超声波端口

  pinMode(trigPin, OUTPUT);   //连接11引脚输出电压

  pinMode(echoPin, INPUT);   //连接12引脚输入电压

}

4. 作品难点及解决方法

4.1作品难点

      刚开始报名比赛时我们还是高兴的,可没想到从拼装到写程序调试,再到跑赛道都是磨难重重,但是每一个模块和障碍都充满着挑战。当我们拿回小车材料后,对于小车的结构还一窍不通,从网上参考了很多设计方案和方法,但是我们参考设计的方案都不能很顺利的自动循迹。我们不断的尝试,程序没有问题,但小车无视黑线,完全没有循线;即使循线时传感器检测到黑线,但小车发生“蛇行”;或紧接着识别黑线不灵,循迹转弯时直流电机卡顿等现象。

4.2解决方法

现象1:程序没有问题,但小车无视黑线,完全没有循线。可能原因是:

      ① 传感器坏了。

      ② 传感器安装位置不合适,导致传感器没有触发。

      ③ 程序中,直行时delay时间太长导致没能及时检测到传感器状态。

解决办法:

      ① 我们可以先单独测试一下传感器是否损坏,用串口测值或点亮LED的方法进行测试,如果确认传感器坏了,更换新传感器。

      ② 如果传感器是好的,那么可能是传感器的安装位置不合适,先不要将传感器固定在小车身上,而用手持的方法,利用用串口测值或点亮LED的方法进行测试,找到合适的安装位置,再进行安装。

      ③ 缩短delay()时长,提高检测频率。

现象2:循线时传感器检测到黑线,但小车发生“蛇行”;或紧接着识别黑线不灵。可能原因是:

      ① 可能是小车两侧轮子差速过大,导致转弯半径太小,从而“蛇行”。

      ② 可能是转弯动作delay时间过长,导致下次识别不灵。

      ③ 可能是小车速度太快,外加程序执行效率不高,导致未能识别到黑线。

解决办法:

      ① 转弯时减小电机转动差速,或用转向机构替代差速转向。

      ② 缩短delay时间,或不使用delay。

      ③ 更换转速慢的电机或提高程序执行效率。

现象3:循迹转弯时直流电机卡顿。

     主要原因是用数字量控制直流电机时,直接接的VIN电压,也就是电池实时电压,基本是当时的最大电压;而用模拟量控制时,电压值只是在255时才能达到最大,其余的电压值都比较小。

解决办法:

     用数字量,加大电压,要么改结构,想办法转弯时缩短轴距,或者减小转弯阻力。

5. 创新设计

5.1项目创新点

     ① 小车中采用Basra开发板为核心,各模块相互配合,形成了一个包括人机界面的半闭环系统,从而使小车能有效的完成各项任务。

     ② 小车自动行驶及避障,采用超声波避障模块等对环境数据进行采集,通过路径规划实时了解小车姿态并做出调整,实现其自动行驶及自动避障功能。

     ③ 小车底盘主要结构采用刚性与非刚性相结合,小车底盘结构主体部分采用刚性软性组合方式轮式驱动和辅助部分采用轮腿式驱动相结合。这种选择组合式的底盘,使它能够保持更加平稳的运动状态,而且承载能力较强。

     ④ 采用物体检测模块检测是否有人,然后利用超声波模块与人保持一定的距离,这样就可以减少接触,到达指定地点后取货物。

     ⑤ 采用颜色识别模块,识别红绿灯,这样就可以遵守交通规则。

     ⑥ 操作简便,便于维护,由于该小车采用结构化设计方法,它的每一个功能设计都是实用化、智能化。逐步细化的操作模式,使得操作简洁明了、易于使用。

5.2 创新点在实际中的应用

     ① 这种组合底盘小车在山路或者陡坡中,表现出强大的适应能力,而且成本低,效率高;从结构上看,两侧的刚性软性组合方式都有不少的齿,所以表现出更加优越的抓地能力,打滑的情况也不容易发生;和其它类型的小车相比,履带式小车的结构更加的复朵,并且体积较大,重量使得其惯性较大,所以更加的稳定,这种小车非常适用于灾难救援之中,它可以很高效的完成求援任务。

     ② 小车路径规划在实际应用中非常的广泛和实用,实际生活中非常多的小车都运用到了路径规划,例如在现在的智能快递派送之中,小车通过路径规划能非常高效的实现自动驾驶,所以路径规划能使小车更加有效的完成任务和功能。

     ③ 拥有了红绿灯检测功能,小车就能适用于社会上有红绿灯的场景了。

程序源代码及样机3D文件等资料下载详见 货物输送小车

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

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

相关文章

Mybatis3详解 之 全局配置文件详解

1、全局配置文件 前面我们看到的Mybatis全局文件并没有全部列举出来&#xff0c;所以这一章我们来详细的介绍一遍&#xff0c;Mybatis的全局配置文件并不是很复杂&#xff0c;它的所有元素和代码如下所示&#xff1a; <?xml version"1.0" encoding"UTF-8&…

精通Linux系列第二章:虚拟机安装Linux系统环境教程

文章目录 一、前言二、VMware Fusion安装教程2.1 说说安装虚拟机的好处2.2 安装VMware Fusion 三、环境搭建3.1 各种Linux发行版介绍与iso下载链接3.2 VMware Fusion安装Linux3.2.1 Ubuntu桌面版安装3.2.2 Debian桌面版安装3.2.3 Fedora桌面版安装3.2.4 CentOS桌面版安装3.2.5 …

RHCA礼品领取步骤

RHCA礼品领取步骤 1. 进入领取页面 考过RHCA的5门课程后会收到5份单科1份RHCA电子证书.其实还有一份玻璃证书笔记本A面贴纸红帽ID号短袖T恤可以领取. 领取地址如下: http://redhat.brandfuel.com 在第一框内填写红帽ID就是考试时填写的9位id号,每3位用-分割 第二个框填写姓,就…

图扑软件受邀亮相 IOTE 2023 国际物联网展

IOTE 2023 国际物联网展&#xff0c;作为全球物联网领域的盛会&#xff0c;于 9 月 20 日 - 22 日在中国深圳拉开帷幕。本届展会以“IoT构建数字经济底座”为主题&#xff0c;由深圳市物联网产业协会主办&#xff0c;打造当前物联网最新科技大秀。促进物联网与各行业深度融合&a…

Android studio “Layout Inspector“工具在Android14 userdebug设备无法正常使用

背景描述 做rom开发的都知道&#xff0c;“Layout Inspector”和“Attach Debugger to Android Process”是studio里很好用的工具&#xff0c;可以用来查看布局、调试系统进程&#xff08;比如setting、launcher、systemui&#xff09;。 问题描述 最进刚开始一个Android 14…

海贝造音强势登陆深圳 助力本土原创音乐升阶

海贝负责人&#xff1a;萧弘天先生 据媒体报导&#xff0c;全球音乐产业收入已恢复至疫情前水平&#xff0c;甚至比往年高出16%&#xff0c;值此佳机&#xff0c;在大湾区深耕娱乐行业30年之久的一众行业先锋&#xff0c;港澳资深传媒人在深圳成立了海贝造音。 深圳&#xff…

RFID资产管理系统应用助力企业实现高效资产运营管理

在企业运营中&#xff0c;资产以各种形式存在&#xff0c;包括生产物资、设备、车辆、办公桌、电脑、电缆等等&#xff0c;这些资产都具有价值高、流动性强、安全管理难等特点&#xff0c;而固定资产数量多、种类繁多、价值高、使用周期长、使用地点分散等特点使得其管理变得非…

增值税发票的Python代码快速识别

# 导入potencent这个库&#xff0c;下载命令&#xff1a;pip install potencent import potencent # 调用增值税识别的功能 potencent.ocr.VatInvoiceOCR(img_pathrC:\vx_CoderWanFeng\your_img.jpg)

你的游戏项目有这些问题吗?

在移动游戏对高品质画面的要求不断增加的背景下&#xff0c;我们一直专注于移动设备GPU性能的优化&#xff0c;以确保您的游戏体验得以最佳展现。然而&#xff0c;不同GPU芯片之间的性能差异以及由此可能引发的GPU瓶颈问题使得优化工作更加具有挑战性。 因此&#xff0c;在不久…

GM(1,1)应用案例1

北方某城市1986-1992年道路交通平均噪声级数数据如表&#xff08;1&#xff09;建立GM(1,1)模型。 表&#xff08;1&#xff09;城市交通平均噪声级数数据/db(A) 编号 1 2 3 4 5 6 7 年份 1986 1987 1988 1989 1990 1991 1992 Leq 71.1 72.4 72.4 72.1 7…

安卓:解决AndroidStudio导出Unity的Apk(APP)出现2个显示图标

用AndroidStudio打开该项目 实现只保留1个app图标 AndroidManifest.xml的改法如下&#xff1a; <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android" package"com.fru…

26055-2022 再生碳化钨粉 思维导图

声明 本文是学习GB-T 26055-2022 再生碳化钨粉. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件规定了再生碳化钨粉的分类、技术要求、试验方法、检验规则、标志、包装、运输、贮存、随行文 件及订货单内容。 本文件适用于以回收的硬…

C# 多态性

简单来讲&#xff0c;多态&#xff0c;就是派生类的对象可以隐式转化为基类对象。在派生类中可以重写基类中定义并实现的虚方法。 可以用基类声明&#xff0c;用派生类实例化&#xff0c;这样的变量调用方法时会调用运行时方法&#xff08;即派生类重写的方法&#xff09;。 …

基于Vue和Element UI实现前后端分离和交互

目录 前言 一、Element UI简介 1.Element UI是什么 2.Element UI的特点 二、项目搭建 1.创建一个SPA项目 2.安装 Element-UI 3.导入组件 4.创建登陆注册界面 登录组件---Login.vue 注册组件---Register.vue 定义组件与路由的对应关系 效果演示&#xff1a; 三、前…

激活函数总结(四十六):激活函数补充(Nipuna、StarReLU)

激活函数总结&#xff08;四十六&#xff09;&#xff1a;激活函数补充 1 引言2 激活函数2.1 Nipuna激活函数2.2 StarReLU激活函数 3. 总结 1 引言 在前面的文章中已经介绍了介绍了一系列激活函数 (Sigmoid、Tanh、ReLU、Leaky ReLU、PReLU、Swish、ELU、SELU、GELU、Softmax、…

Ros2 学习01-Ros2 VS Ros1

ROS最早的设计目标就是开发这样一款PR2家庭服务机器人&#xff0c;这款机器人绝大部分时间都是独立工作&#xff0c;为了让他具备充足的能力&#xff1a; 它搭载了工作站级别的计算平台和各种先进的通信设备&#xff0c;不用担忧算力不够&#xff0c;有足够的实力支持各种复杂…

【VUE复习·7】样式绑定:静态样式绑定、动态样式绑定(明亮模式 / 暗黑模式 切换的效果如何实现)

总览 1.静态样式绑定 2.动态样式绑定 一、静态样式绑定 1.正常写即可 <div><div class"basic" click"changeName">{{name}}</div> </div><style>.basic{...} </style>二、动态样式绑定 1.示例 这么写&#xff0…

K8s Kubelet 垃圾回收机制

前言 Kubelet 垃圾回收(Garbage Collection)是一个非常有用的功能,它负责自动清理节点上的无用镜像和容器。Kubelet 每隔 1 分钟进行一次容器清理,每隔 5 分钟进行一次镜像清理(截止到 v1.15 版本,垃圾回收间隔时间还都是在源码中固化的,不可自定义配置)。如果节点上已…

2023经典好用的图床网站推荐(站长必备)

图床一般是指储存图片的服务器&#xff0c;有国内和国外之分&#xff0c;国外的图床由于有空间距离等因素决定访问速度很慢影响图片显示速度。国内也分为单线空间、多线空间和cdn加速三种。同时允许你把图片对外连接的网上空间&#xff0c;图床有免费的&#xff0c;也有收费的。…

成都瀚网科技:抖音上线地方方言自动翻译功能

为了让很多方言的地域历史、文化、习俗能够以短视频的形式生产、传播和保存&#xff0c;解决方言难以被更多用户阅读和理解的问题&#xff0c;平台正式上线推出当地方言自动翻译功能。创作者可以利用该功能&#xff0c;将多个方言视频“一键”转换为普通话字幕供大众观看。 具体…