智能小车案例:基于Raspberry Pi的自动巡航与避障系统

news2024/12/27 0:50:02

项目背景

        随着物联网技术的不断发展,智能小车成为了现代生活和工业自动化中的重要工具。为了实现智能小车的自动巡航与避障功能,我们采用了Raspberry Pi作为主控制器,结合传感器和执行器,构建了一个完整的系统。

 

所需材料

  • Raspberry Pi(树莓派)开发板
  • 电机驱动器(L298N)
  • 超声波传感器(HC-SR04)
  • 直流电机
  • 电源和数据线
  • Raspberry Pi的GPIO扩展板
  • Bash命令行环境

安装与配置

  • 首先,确保你的Raspberry Pi已经安装了操作系统并且可以通过SSH或VNC连接到它。

  • 连接所有硬件:将电机驱动器、超声波传感器连接到GPIO扩展板上,然后将直流电机连接到电机驱动器的输出端。

安装必要的软件包:通过SSH连接到Raspberry Pi并运行以下命令安装所需软件包: 
sudo apt-get update  
sudo apt-get install python3-pip wiringpi

代码实现

以下是一个简单的Python脚本,用于控制智能小车的自动巡航与避障功能:
#!/usr/bin/env python3  
import RPi.GPIO as GPIO  
import time  
import threading  
  
# 定义GPIO引脚编号模式  
GPIO.setmode(GPIO.BCM)  
  
# 定义电机引脚和传感器引脚  
MOTOR_LEFT = 23  # 左电机正转/反转引脚  
MOTOR_RIGHT = 24  # 右电机正转/反转引脚  
ECHO = 25  # 超声波传感器发射端引脚  
TRIG = 26  # 超声波传感器接收端引脚  
  
# 设置GPIO引脚为输出模式  
GPIO.setup(MOTOR_LEFT, GPIO.OUT)  
GPIO.setup(MOTOR_RIGHT, GPIO.OUT)  
GPIO.setup(ECHO, GPIO.IN)  
GPIO.setup(TRIG, GPIO.OUT)  
  
# 定义电机驱动函数  
def drive_forward():  
    GPIO.output(MOTOR_LEFT, GPIO.HIGH)  
    GPIO.output(MOTOR_RIGHT, GPIO.LOW)  
    time.sleep(1)  # 前进1秒  
    GPIO.output(MOTOR_LEFT, GPIO.LOW)  
    GPIO.output(MOTOR_RIGHT, GPIO.LOW)  # 停止电机  
  
def drive_backward():  
    GPIO.output(MOTOR_LEFT, GPIO.LOW)  
    GPIO.output(MOTOR_RIGHT, GPIO.HIGH)  
    time.sleep(1)  # 后退1秒  
    GPIO.output(MOTOR_LEFT, GPIO.LOW)  
    GPIO.output(MOTOR_RIGHT, GPIO.LOW)  # 停止电机  
  
def turn_left():  
    GPIO.output(MOTOR_LEFT, GPIO.HIGH)  
    GPIO.output(MOTOR_RIGHT, GPIO.LOW)  
    time.sleep(0.5)  # 左转0.5秒  
    GPIO.output(MOTOR_LEFT, GPIO.LOW)  
    GPIO.output(MOTOR_RIGHT, GPIO.LOW)  # 停止电机  
  
def turn_right():  
    GPIO.output(MOTOR_LEFT, GPIO.LOW)  
    GPIO.output(MOTOR_RIGHT, GPIO.HIGH)  
    time.sleep(0.5)  # 右转0.5秒  
    GPIO.output(MOTOR_LEFT, GPIO.LOW)  
    GPIO.output(MOTOR_RIGHT, GPIO.LOW)  # 停止电机  
  
def stop():  
    GPIO.output(MOTOR_LEFT, GPIO.LOW)  
    GPIO.output(MOTOR_RIGHT, GPIO.LOW)  # 停止电机和所有动作  
    time.sleep(1)  # 保持停止状态1秒,以便检查是否应该继续移动或避障  
    GPIO.cleanup()  # 清理GPIO设置,返回初始状态(低电平)  
    exit()  # 退出程序(可选)或执行其他操作(如循环检测等)以继续控制小车移动或避障。

避障逻辑实现

        为了实现避障功能,我们使用了多线程编程。一个线程用于控制小车的前进,另一个线程用于检测障碍物。当检测到障碍物时,避障线程会发送一个信号给主线程,主线程接收到信号后执行避障操作。

 

避障逻辑如下:
  • 启动避障线程,该线程会持续检测超声波传感器的值。
  • 如果检测到障碍物(超声波传感器值小于某个阈值),则发送一个信号给主线程。
  • 主线程接收到避障信号后,执行避障操作(例如停止、后退、左转或右转)。
  • 避障完成后,继续前进。

你可以根据需要调整避障逻辑,例如增加更多的避障策略或调整传感器阈值。

当然,以下是一个简单的Python代码示例,用于实现避障逻辑: 

import RPi.GPIO as GPIO  
import time  
  
# 设定GPIO引脚  
GPIO.setmode(GPIO.BCM)  
GPIO_TRIGGER = 18  
GPIO_ECHO = 24  
  
# 初始化超声波传感器引脚为输出模式  
GPIO.setup(GPIO_TRIGGER, GPIO.OUT)  
GPIO.setup(GPIO_ECHO, GPIO.IN)  
  
# 定义避障逻辑函数  
def避障():  
    # 发送10微秒的脉冲信号触发超声波传感器  
    GPIO.output(GPIO_TRIGGER, True)  
    time.sleep(0.00001)  
    GPIO.output(GPIO_TRIGGER, False)  
    start_time = time.time()  
    end_time = time.time()  
    # 等待超声波传感器的返回信号  
    while GPIO.input(GPIO_ECHO) == 0:  
        start_time = time.time()  
    while GPIO.input(GPIO_ECHO) == 1:  
        end_time = time.time()  
    # 计算距离(单位:厘米)  
    distance = (end_time - start_time) * 34300 / 2  
    if distance < 20:  # 设定距离阈值为20厘米  
        print("检测到障碍物,执行避障操作")  
        # 这里可以添加避障操作的代码,例如停止、后退、左转或右转等  
        # 清理GPIO资源  
        GPIO.cleanup()

         这只是一个简单的智能小车案例,你可以根据需求进行更多的扩展和改进。例如,增加更多的传感器、实现更复杂的导航算法、加入Wi-Fi控制等。  使用GPIO引脚时需要注意安全问题,特别是对于初学者,建议在熟悉Raspberry Pi和GPIO操作之后再进行更深入的探索和开发。

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

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

相关文章

关于source批量处理sql命令建立数据库后发现中文乱码问题解决方案(Mysql)

今天在使用souce建表的时候发现自己表结构中的中文出现了乱码问题&#xff0c;那么具体的解决方案如下&#xff1a; 首先我们先使用命令行连接自己的数据库 mysql -u root -p 12345 然后使用show variables like "char%"; 如果说你的这个里面不是utf-8那么就是出现了…

Acrel-1200分布式光伏运维平台屋顶光伏工商业屋顶光伏应用

上海安科瑞电气股份有限公司 胡冠楠 咨询家&#xff1a;“Acrelhgn”&#xff0c;了解更多产品资讯 行业现状 “十四五”期间&#xff0c;随着“双碳”目标提出及逐步落实&#xff0c;本就呈现出较好发展势头的分布式光伏发展有望大幅提速。就“十四五”光伏发展规划&#xf…

大脑模型认知实验报告(脑与认知期末考核)

实验名称&#xff1a;大脑模型认知实验 实验目的&#xff1a; &#xff08;1&#xff09;对大脑的三部分、七层结构、区域划分有一个清晰的认识。 &#xff08;2&#xff09;对脑的各个区域的基本功能以及脑的工作方式有所了解。 实验环境&#xff1a;大脑模具、配有详细标…

vue3 + vite:打包部署后,动态组件渲染404问题解决

问题描述: 当需要渲染动态组件,动态的组件路径配置在数据库中时,如下图,本地运行能正常访问,用vite打包部署后,生产上改路径为404. 起初认为是,vite打包后的文件都是.js, 当页面加载后从数据库拿来的路径是.vue, 并且是src/xxx/xxx.vue 这种绝对路径形式的,所以就找不…

《Pandas 简易速速上手小册》第3章:Pandas 数据清洗基础(2024 最新版)

文章目录 3.1 处理缺失数据3.1.1 基础知识3.1.2 重点案例&#xff1a;客户数据分析3.1.3 拓展案例一&#xff1a;医疗问卷数据处理3.1.4 拓展案例二&#xff1a;零售店库存清单 3.2 数据类型转换3.2.1 基础知识3.2.2 重点案例&#xff1a;商品销售数据分析3.2.3 拓展案例一&…

热仿真中稳态与瞬态的区别

对于热仿真&#xff0c;根据是否随时间变化&#xff0c;可分为稳态&#xff08;steady&#xff09;仿真和瞬态&#xff08;transient&#xff09;仿真两类。 从数学计算的角度&#xff0c;所谓稳态是指物理量不随时间变化的定常过程&#xff0c;即计算域中所有物理量均满足关系…

华章杂志华章杂志社华章编辑部2023年第11期目录

专题论文 强化人才队伍发展 推动法治唐山建设问题研究 (0003) 李彬 文化论坛《华章》投稿&#xff1a;cn7kantougao163.com 乡村振兴背景下非物质文化遗产传承与发展探究 ——以黔西南州传统蓝染文化为例 (0006) 董天丽;何华杰;韦永吉;王芳琳 思政课视角下高职学生保护和继…

Git系列---远程操作

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 引用 1.理解分布式版本控制…

第九篇【传奇开心果系列】Python的OpenCV技术点案例示例:目标跟踪

传奇开心果短博文系列 系列短博文目录Python的OpenCV技术点案例示例系列 短博文目录前言二、常用的目标跟踪功能、高级功能和增强跟踪技术介绍三、常用的目标跟踪功能示例代码四、OpenCV高级功能示例代码五、OpenCV跟踪目标增强技术示例代码六、归纳总结 系列短博文目录 Pytho…

绝地求生:地铁逃生模式从哪里进入游戏模式的讲解

地铁逃生模式是绝地求生&#xff08;PUBG&#xff09;中的一种游戏模式&#xff0c;玩家需要在地铁车厢中寻找武器并战胜其他玩家。如果你还不知道在哪里进入地铁逃生模式&#xff0c;本文闲游盒将为您进行详细的讲解。 进入地铁逃生模式的步骤&#xff1a; 打开绝地求生游戏客…

C++关键词auto详解

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、小思考 随着我们对于C的不断学习&#xff0c;遇到的程序越来越复杂&#xff0c;程序中用到的类型也越来越复杂…

麒麟V10 mate-indicator进程占用内存过高问题

给客户新划的5台虚拟机&#xff0c;操作系统是麒麟V10&#xff0c;用户反映什么软件都没装系统内存占用就达到80%。 百度了一下是麒麟的bug&#xff0c;内存泄漏。官方分析报告。 解决方法&#xff1a;下载相应rpm包并安装即可解决。 1.确定麒麟版本 cat /etc/*release Ter…

npm淘宝镜像过期解决办法

npm淘宝镜像过期解决办法 因为npm 官方镜像&#xff08;registry.npmjs.org&#xff09;在国内访问很慢&#xff0c;我们基本上都会选择切换到国内的一些 npm 镜像&#xff08;淘宝镜像、腾讯云镜像等&#xff09;。由于淘宝原来的镜像&#xff08;registry.npm.taobao.org&am…

肉食食材大数据平台(附源码)

目录 一.需求分析 1.项目背景 2.用户简介 3.术语定义 4.功能概述 二.概要设计 1.概要设计流程图 2.流程图详细说明 三.数据库设计 1.软件名称 2.概念结构设计 2.1电商模块 2.2猪肉今日价格模块 2.3大屏展示模块 2.3.1舆论舆情 2.3.2 省均价模块 2.3.3进出口模块…

Pyecharts绘制多种炫酷气泡图

Pyecharts绘制多种炫酷气泡图 引言 数据可视化是数据分析中不可或缺的一环&#xff0c;而Pyecharts作为一款基于Echarts的Python图表库&#xff0c;提供了丰富的图表类型&#xff0c;其中气泡图是一种常用于展示三维数据的炫酷图表。本文将介绍如何使用Pyecharts绘制多种炫酷…

【CSS】css获取子元素的父元素,即通过子元素选择父元素(使用CSS伪类 :has() :not() )

这里写目录标题 一、:has获取第一个div获取包含 a.active 的 li获取第二个div 二、:not除了类名为active 的 a,其他的a的字体都为18px <div><h1>标题</h1></div><div><ul><li><a href"#" class"active">测…

基于YOLOv8的水下生物检测,多种优化方法---自研注意力BSAM助力涨点(一)

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文主要内容:详细介绍了水下生物检测整个过程&#xff0c;从数据集到训练模型到结果可视化分析&#xff0c;以及如何优化提升检测性能。 &#x1f4a1;&#x1f4a1;&#x1f4a1;加入自研注意力BSAM mAP0.5由原始的0.522提升至0.553…

【AG32VF407】国产MCU+FPGA,更新官方固件解决8Mhz内部晶振不准,Verilog实测7.9Mhz!

视频讲解 [AG32VF407]国产MCUFPGA&#xff0c;更新官方固件解决8Mhz内部晶振不准&#xff0c;Verilog实测7.9Mhz&#xff01; 实验过程 之前出现的双路pll不同频率的测试中&#xff0c;提出了内部晶振输出不准的问题&#xff0c;和官方沟通后得到极大改善&#xff0c;方法如下…

Excel技能——使用条件格式保护数据

1.选中需要保护数据的单元格 2.选择“条件格式”——“新建规则” 3.选择“使用公式确定要设置格式的单元格”——在条件单元格设置格式的位置&#xff0c;写“”——光标选中输入密码的单元格&#xff0c;此处是点击“123”处的单元格——输入“<>”&#xff08;意思是不…

Unity学习之Unity核心(一)2D相关

文章目录 1. 前言2 图片导入概述3 图片设置的六大部分3.1 纹理类型3.1.1 Default3.1.2 Normal Map 法线贴图格式3.1.3 Editor GUI and Legacy GUI3.1.4 Sprite3.1.5 Cursor 自定义光标3.1.6 Cookie 光源剪影格式3.1.7 LightMap光照贴图格式3.1.8 Single Channel 纹理只需要单通…