机器人制作开源方案 | 扫地机器人
1. 功能描述
扫地机器人是现代家庭清洁的得力助手,能够自主规划清扫路径,避开障碍物,有效覆盖整个清洁区域。扫地机器人的出现极大地减轻了家庭清洁的负担,节省了时间和精力,它可以定期清理地面,确保家居环境的整洁和卫生,让家里变得更加舒适、无尘和宜居。
本文示例将实现R058a样机扫地机器人在行进过程中避障并清扫垃圾的功能。


2. 电子硬件
在这个示例中,我们采用了以下硬件,请大家参考:
| 主控板 | Basra主控板(兼容Arduino Uno) |
| 扩展板 | Bigfish2.1扩展板 |
| 传感器 | 触须传感器 |
| 近红外传感器 | |
| 电池 | 7.4V锂电池 |
3. 功能实现
编程环境:Arduino 1.8.19
下面提供一个实现扫地机器人在行进过程中避障并清扫垃圾的参考程序(sketch_sep14a.ino):
/*------------------------------------------------------------------------------------版权说明:Copyright 2023 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.Distributed under MIT license.See file LICENSE for detail or copy athttps://opensource.org/licenses/MITby 机器谱 2023-09-14 https://www.robotway.com/------------------------------*/#include <Servo.h>Servo left_wheel; // 左轮Servo right_wheel; // 右轮#define forward_speed_left 60 // 小车前进时,左轮速度#define forward_speed_right 120 // 小车前进时,右轮速度#define back_speed_left 120 // 小车后退时,左轮速度#define back_speed_right 60 // 小车后退时,右轮速度#define turnleft_speed_left 120 // 小车左转时,左轮速度#define turnleft_speed_right 120 // 小车左传时,右轮速度#define turnright_speed_left 60 // 小车右转时,左轮速度#define turnright_speed_right 60 // 小车右转时,右轮速度#define stop_left 90 // 小车停止时,左轮速度#define stop_right 90 // 小车停止时,右轮速度#define obstacle_threshold 500 // 触须传感器阈值#define ir_threshold 800 // 近红外传感器阈值int left_obstacle_sensor; // 左侧触须传感器int right_obstacle_sensor; // 右侧触须传感器int ir_sensor; // 近红外传感器void setup() {delay(50);Serial.begin(9600);left_wheel.attach(3); // 定义左右轮引脚right_wheel.attach(4);pinMode(A0, INPUT); // 左边触须传感器接口pinMode(A2, INPUT); // 右边触须传感器接口pinMode(A3, INPUT); // 前面近红外传感器接口}void loop() {left_obstacle_sensor = analogRead(A0); // 读取左边触须传感器值right_obstacle_sensor = analogRead(A2); // 读取右边触须传感器值ir_sensor = analogRead(A3); // 读取近红外传感器值// 如果左边传感器检测到障碍物,执行后退并向右转操作if (left_obstacle_sensor > obstacle_threshold) {backRight();}// 如果右边传感器检测到障碍物,执行后退并向左转操作else if (right_obstacle_sensor > obstacle_threshold) {backLeft();}// 如果前面近红外传感器检测到障碍物,执行后退操作else if (ir_sensor > ir_threshold) {back();}// 如果都没有检测到障碍物,执行前进操作else {forward();}}// 小车前进void forward() {left_wheel.write(forward_speed_left);right_wheel.write(forward_speed_right);}// 小车后退void back() {left_wheel.write(back_speed_left);right_wheel.write(back_speed_right);}// 小车后退左转void backLeft() {left_wheel.write(back_speed_left);right_wheel.write(turnleft_speed_right);}// 小车后退右转void backRight() {left_wheel.write(turnright_speed_left);right_wheel.write(back_speed_right);}// 小车停止void stop() {left_wheel.write(stop_left); // 停止right_wheel.write(stop_right); // 停止}
4. 扩展样机
本样机有一些简单的扩展案例,如下图所示将舵机更换为直流电机:

程序源代码及样机3D文件等资料详见 扫地机器人
相关文章:
机器人制作开源方案 | 扫地机器人
1. 功能描述 扫地机器人是现代家庭清洁的得力助手,能够自主规划清扫路径,避开障碍物,有效覆盖整个清洁区域。扫地机器人的出现极大地减轻了家庭清洁的负担,节省了时间和精力,它可以定期清理地面,确保家居环…...
10.2手动推导linux中file, cdev, inode之间的关系
是时候可以手动推导一下linux里面基类父类和子类的关系了 代码放最后把 简单说明版 详细流程 第一步注册驱动 cdev结构体能看做是一个基类,那么链表里面都是字符设备驱动的cdev连载一起,啥串口,lcd的,通过cdev->list_head连接 那cdev结构体里有主次设备号 第一步 使用r…...
JavaScript基础知识13——运算符:一元运算符,二元运算符
哈喽,大家好,我是雷工。 JavaScript的运算符可以根据所需表达式的个数,分为一元运算符、二元运算符、三元运算符。 一、一元运算符 1、一元运算符:只需要一个表达式就可以运算的运算符。 示例:正负号 一元运算符有两…...
异步使用langchain
文章目录 一.先利用langchain官方文档的AI功能问问二.langchain async api三.串行,异步速度比较 一.先利用langchain官方文档的AI功能问问 然后看他给的 Verified Sources 这个页面里面虽然有些函数是异步函数,但是并非专门讲解异步的 二.langchain asy…...
抖音开放平台第三方代小程序开发,授权事件、消息与事件通知总结
大家好,我是小悟 关于抖音开放平台第三方代小程序开发的两个事件接收推送通知,是开放平台代小程序实现业务的重要功能。 授权事件推送和消息与事件推送类型都以Event的值判断。 授权事件推送通知 授权事件推送包括:推送票据、授权成功、授…...
华为9.20笔试 复现
第一题 丢失报文的位置 思路:从数组最小索引开始遍历 #include <iostream> #include <vector> using namespace std; // 求最小索引值 int getMinIdx(vector<int> &arr) {int minidx 0;for (int i 0; i < arr.size(); i){if (arr[i] …...
二十五、【色调调整基础】
文章目录 1、亮度/对比度a、亮度b、对比度 2、曝光度3、阈值4、色阶5、反相6、黑白7、渐变映射 1、亮度/对比度 a、亮度 亮度是指画面的明亮程度 b、对比度 对比度指的是一幅图像中,明暗区域最亮和最暗之间不同亮度层级的测量,如下图所示࿰…...
Android Studio SDK manager加载packages不全
打开Android Studio里的SDK manager,发现除了已安装的,其他的都不显示。 解决方法: 设置代理: 方便复制> http://mirrors.neusoft.edu.cn/ 重启Android Studio...
[esp32-wroom]基础开发
1、点亮LED灯 int led_pin2; void setup() {// put your setup code here, to run once:pinMode(led_pin,OUTPUT);}void loop() {// put your main code here, to run repeatedly:digitalWrite(led_pin,HIGH);delay(1000);digitalWrite(led_pin,LOW);delay(1000); } 2、LED流…...
利用Docker 实现 MiniOB环境搭建
官方文档有,但是感觉写的跟shift一样(或者是我的阅读理解跟shift一样 下面是自己的理解 一.下载docker 这个去官网下载安装,没什么说的 Docker: Accelerated Container Application Development 二.用docker下载MiniOB环境 1.打开powershell ( win r ,然后输入powershell…...
【DB2】—— 数据库表查询一直查不出来数据
问题描述 近日,数据库的测试环境中有一个打印日志表,一共有将近50w的数据,Java程序在查询的时候一直超时。 在DBvisualizer中查询数据无论是使用select * 还是 select count(*)查询的时候都是一直在执行,就是查询不到结果。 排查…...
【教程】使用vuepress构建静态文档网站,并部署到github上
官网 快速上手 | VuePress (vuejs.org) 构建项目 我们跟着官网的教程先构建一个demo 这里我把 vuepress-starter 这个项目名称换成了 howtolive 创建并进入一个新目录 mkdir howtolive && cd howtolive使用你喜欢的包管理器进行初始化 yarn init 这里的问题可以一…...
python 机器视觉 车牌识别 - opencv 深度学习 机器学习 计算机竞赛
1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于python 机器视觉 的车牌识别系统 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:3分创新点:3分 🧿 更多资…...
Hadoop3教程(十二):MapReduce中Shuffle机制的概述
文章目录 (95) Shuffle机制什么是shuffle?Map阶段Reduce阶段 参考文献 (95) Shuffle机制 面试的重点 什么是shuffle? Map方法之后,Reduce方法之前的这段数据处理过程,就叫做shuff…...
MySQL为什么用b+树
索引是一种数据结构,用于帮助我们在大量数据中快速定位到我们想要查找的数据。 索引最形象的比喻就是图书的目录了。注意这里的大量,数据量大了索引才显得有意义,如果我想要在[1,2,3,4]中找到4这个数据,直接对全数据检索也很快&am…...
浅谈机器学习中的概率模型
浅谈机器学习中的概率模型 其实,当牵扯到概率的时候,一切问题都会变的及其复杂,比如我们监督学习任务中,对于一个分类任务,我们经常是在解决这样一个问题,比如对于一个n维的样本 X [ x 1 , x 2 , . . . .…...
MySQL 函数 索引 事务 管理
目录 一. 字符串相关的函数 二.数学相关函数 编辑 三.时间日期相关函数 date.sql 四.流程控制函数 centrol.sql 分页查询 使用分组函数和分组字句 group by 数据分组的总结 多表查询 自连接 子查询 subquery.sql 五.表的复制 六.合并查询 七.表的外连接 …...
Flink如何基于事件时间消费分区数比算子并行度大的kafka主题
背景 使用flink消费kafka的主题的情况我们经常遇到,通常我们都是不需要感知数据源算子的并行度和kafka主题的并行度之间的关系的,但是其实在kafka的主题分区数大于数据源算子的并行度时,是有一些注意事项的,本文就来讲解下这些注…...
总结:JavaEE的Servlet中HttpServletRequest请求对象调用各种API方法结果示例
总结:JavaEE的Servlet中HttpServletRequest请求对象调用各种API方法结果示例 一方法调用顺序是按照英文字母顺序从A-Z二该示例可以用作servlet中request的API参考,从而知道该如何获取哪些路径参数等等三Servlet的API版本5.0.0、JSP的API版本:…...
ChatGPT AIGC 完成Excel跨多表查找操作vlookup+indirect
VLOOKUP和INDIRECT的组合在Excel中用于跨表查询,其中VLOOKUP函数用于在另一张表中查找数据,INDIRECT函数则用于根据文本字符串引用不同的工作表。具体操作如下: 1.假设在工作表1中,A列有你要查找的值,B列是你希望查询的工作表名称。 2.在工作表1的C列输入以下公式:=VLO…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建
【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...
0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化
是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可,…...
基于stm32F10x 系列微控制器的智能电子琴(附完整项目源码、详细接线及讲解视频)
注:文章末尾网盘链接中自取成品使用演示视频、项目源码、项目文档 所用硬件:STM32F103C8T6、无源蜂鸣器、44矩阵键盘、flash存储模块、OLED显示屏、RGB三色灯、面包板、杜邦线、usb转ttl串口 stm32f103c8t6 面包板 …...
深度解析云存储:概念、架构与应用实践
在数据爆炸式增长的时代,传统本地存储因容量限制、管理复杂等问题,已难以满足企业和个人的需求。云存储凭借灵活扩展、便捷访问等特性,成为数据存储领域的主流解决方案。从个人照片备份到企业核心数据管理,云存储正重塑数据存储与…...
python读取SQLite表个并生成pdf文件
代码用于创建含50列的SQLite数据库并插入500行随机浮点数据,随后读取数据,通过ReportLab生成横向PDF表格,包含格式化(两位小数)及表头、网格线等美观样式。 # 导入所需库 import sqlite3 # 用于操作…...
