树莓派智能小车(一)

  1. 通过了解智能小车组成,明确智能小车实训任务;

1. 通过了解智能小车组成,明确智能小车实训任务;

  1. 认识智能小车
    智能小车由三大部分组成:主控部分、感知部分、执行部分。
    主控部分:由树莓派完成,负责感知系统信息的采集与分析,并根据分析结果控制小车的运行方向;
    感知部分:由红外循迹、红外避障、超声波+舵机、摄像头+云台等组成,进行小车运行轨迹的识别以及障碍物的探测;
    执行部分:由直流电机和车轮来完成,控制小车的运行方向和速度。
    另外,智能小车的供电系统是电池,电压表可以实时监测电池的电压状态。智能小车主要部件如下图所示。
    在这里插入图片描述

2. 通过了解嵌入式系统开发,明确智能小车主控系统树莓派的特点。

  1. 智能小车开发任务
    2.1 了解嵌入式系统开发
    智能小车开发为一个典型的嵌入式系统开发。首先了解一下嵌入式系统概念及其组成。
    嵌入式系统是相对于通用计算机系统(PC机、笔记本)而言,其概念这样定义:嵌入式系统(Embedded system),是一种“完全嵌入受控器件
    用而设计的专用计算机系统”。
    嵌入式系统如下组成:
    硬件系统:主要由CPU及其外设组成;
    软件系统:主要有应用软件、操作系统(Kernel)、文件系统(Fs)和启动代码(Bootloader)组成。
    2.2智能小车开发任务
    智能小车的硬件系统即为树莓派和外设传感系统,软件系统为操作系统和应用软件,即智能小车开发的主要任务。
    本次实训智能小车主要实现如下任务:
    熟练掌握树莓派开发过程;
    小车循迹行驶;
    小车避障行驶,包括红外避障和超声波避障;
    红外遥控小车行驶控制;
    WIFI控制小车行驶控制,并实现图像采集;
    手机APP行驶功能控制;
    手机APP配置界面。

3.开发环境安装

  1. 下载烧写工具Pi Imager
    打开树莓派官方网站https://www.raspberrypi.org/software/,根据下图指示下载Pi Imager并安装
    在这里插入图片描述
    2.在线烧写
    ① 将配套SD卡放入读卡器插入到电脑的USB口;
    ② 打开烧录软件Pi Imager,在“operating system”选择“Raspberry Pi OS(32-bit)”(第一项);

在这里插入图片描述
③ 在"SD Card"选择SD卡,然后点击“write”,然后等待烧写完成。
3. 离线烧写
① 下载raspberry系统镜像
打开树莓派官方网站https://www.raspberrypi.org/software/,点击按钮“See all download options”
在这里插入图片描述
② 在“Raspberry Pi OS with desktop and recommended software”项点击“Download”,等待下载完成。
在这里插入图片描述
③ 烧录系统:
在Pi Imager中“Operating System”选择最后一项“use Custom”,在弹出对话框中选择刚刚下载的镜像。后续步骤同在线烧录。
在这里插入图片描述
4. 启动树莓派,验证系统
① 将SD卡插到树莓派SD卡插槽,如下图;
② 打开供电开关,给系统供电,指示灯点亮并闪烁,电压表实时显示电池电压(当电压低于6.8V以下,应及时给小车供电);
③ 二十多秒后,系统启动完成。正常启动完成后,红灯亮,绿灯闪烁,如下图所示。
在这里插入图片描述

4.登录智能小车

1.配置网络
① 将SD卡放入读卡器插入电脑的usb口(不是树莓派小车),
② 在windows系统中打开SD卡,在根目录下创建文本文件,名称为wpa_supplicant.conf,内容如下:

在这里插入图片描述
上图中第6,7行为热点的名称和密码,可修改。
③ 在SD卡根下创建一个文本文件,名称为ssh,内容空。
④ 将SD卡插入树莓派卡槽启动,自动连接热点并开启SSH服务。
小技巧:
建议在windows电脑上开启热点,树莓派连接后可以显示IP地址,如下图:
在这里插入图片描述
2. 远程登录树莓派
树莓派未连接显示器,首先应该使用网线将树莓派接入网络,然后用PC机远程登录树莓派进行后续开发工作。树莓派远程登录方法主要有两种:SS
是命令行方式,后者是图形界面方式。本手册采用SSH方式,有关VNC登录方式请自行安装配置登录。
2. SSH登录
SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。SSH由客户端和服务器端组成,智能小车树莓派为服务器端,PC机为客
持SSH协议的远程登录软件,本次实训使用putty;SSH登录步骤如下:
① putty是一个开源的支持SSH远程登录软件,首先下载并安装putty,下载页面为https://www.putty.org/。
② 双击putty图标,打开putty软件,连接树莓派,输入先前获取的树莓派IP地址,然后点击“open”,如下图所示。
在这里插入图片描述
③ 第一次连接较慢,会提示密钥验证界面,如下图所示。
在这里插入图片描述
④ 选择“YES”后将进入登录界面,默认账号为pi,密码为raspberry 。验证通过后将进入Raspbian命令行模式。如图所示。
在这里插入图片描述
此时SSH登录成功,可在命令行方式对树莓派进行配置和使用。即在pi@raspberrypi:~ $字符后面书写命令进行操作。如下所示。
在这里插入图片描述

以下的内容省略如下pi@raspberrypi:~,命令以“$”开始,如下所示
3. windows远程桌面登录
① 使用ssh登录树莓派开启XRDP服务:
在这里插入图片描述
② 在windows系统打开远程桌面,输入相应地址登录。
在这里插入图片描述

5.创建智能小车开发目录

1.Raspbian操作系统
树莓派Raspbian系统源自Debian操作系统。Debian操作系统以Linux为内核,其中绝大部分基础工具来自于GNU工程,因此“Debian”常指Deb

1.1 文件系统
Linux下,一切皆文件,对数据、硬件设备的管理都是以文件的形式呈献给用户进行管理。大树底下好乘凉:linux采用树状结构管理磁盘。
1.1.1 目录结构
女娲开天辟地造众生,“/”(根目录)是Linux系统中最顶层的目录,所有的文件夹、文件都是它的子目录。如下图所示。
在这里插入图片描述
各个目录内容如下:
/(根目录):在Linux下有且只有一个根目录。所有的东西都是从这里开始。当你在命令行里输入“/home”,时表示从/(根目录)开始,
目录。
/home:每个用户都有自己的用户目录:/home/用户名,用来存放用户的数据、设置文件等。
/root :这是系统管理员的目录。
/bin:这里存放了标准的linux的工具,比如像“ls”、“cat”、“mv”、“cp”等。
/sbin:存放涉及系统管理的命令,只有系统管理员才可执行,普通用户无权限执行这个目录下的命令。在系统其它目录下的sbin目录下包含
才能执行的命令。
/lib:主要用于存放应用程序所需的共享库,在Linux执行或编译一些程序的时候,用到的一些库,就在这个目录下。
/etc:存放了系统、软件的配置文件。如用户的账号与密码、系统的主要设定、所要开启的服务项目。
/boot:放置linux系统启动时相关的文件。如: linux的内核文件:/boot/vmlinuz ;系统引导管理器:/boot/grub。
/var系统执行过程中经常变化的文件。
/var/log:随时更改的日志文件;
/var/log/message:所有的登录文件存放目录;
/tmp存放用户或程序的临时文件,通常为空,任何人都可以访问,重要数据不可放置在此目录下。
/dev存放Linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备。例如:挂载光驱mount /dev/cdrom /mnt。
/usr系统存放程序的目录,比如命令、帮助文件等。在这个目录下,你可以找到那些不适合放在/bin或/etc目录下的额外的工具。当我们安装
提供的软件包时,大多安装在这里。如果软件有配置文件,会把配置文件安装在/etc目录中。例:
/usr/bin目录用于存放程序;
/usr/share存放共享的数据,比如音乐或者图标等;
/usr/lib存放许多程序运行所必需的一些函数库文件。
/proc:存放操作系统运行时,进程信息及内核信息(比如cpu、硬盘分区、内存信息等)。
/proc/cpuinfo 关于处理器的信息,如类型、厂家、型号和性能等;
/proc/devices 当前运行内核所配置的所有设备清单;
/proc/interrupts 正在使用的中断,和曾经有多少个中断;
/proc/ioports 当前正在使用的I/O端口,此文件夹一般挂载内存文件系统,即里面的内存一般存放于内存中,掉电丢失。
/opt:主机安装软件的额外目录,意思为可选择的,有些软件包也会被安装在这里。安装到/opt目录下的程序,它所有的数据、库文件等都
下。
/mnt用于存放挂载储存设备的挂载目录,不过并不是绝对的,只要愿意,可以随便找一个地方挂载。
/media有些Linux的发行版使用这个目录来挂载那些usb接口的移动硬盘(包括U盘)。
1.1.2 文件类型和文件权限
Linux下所支持的文件类型如下所示:
普通文件,以“-”表示;
目录文件,以“d”表示;
设备文件,以“b”表示块设备文件,以“c”表示字符设备文件;
链接文件,以“l”表示;
管道文件,以“f”表示;
套接口文件,以“s”表示。
文件或目录权限的控制分别以读取(r)、写入(w)、执行(x)3种权限来区分,以文件所有者、同一个组人、其他人3种身份来区分文件权限。
以ls –l命令查看当前目录下文件信息,如所示。
在这里插入图片描述
其中:
第1个字母代表文件的类型;
后9个字母分别代表:文件所有者、同组者、其他人拥有的权限,分别表达为:rwx(读、写、执行)。
1.2 命令
Linux刚开始没有图形界面,所有的操作全在命令行下以命令完成。
近几年来,linux发展的非常迅速,图形界面越来越友好,但是在真正的开发过程中,linux命令行的应用还是占有非常重要的席位的;
许多Linux功能在命令行界面要比图形化界面下运行的快,有些使用Linux的场合甚至没有图形化的界面;
可以说不会命令行,就不算会Linux。
基于Linux内核的操作系统上进行开发离不开系统提供的命令,因此,基于树莓派的智能小车的开发工作,首先应该熟知这些常用命令的用法。
1.2.1 命令分类
Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。
根据不同的功能,Linux常用命令有如下分类:
文件目录操作命令;
显示命令;
进程管理命令;
系统管理与配置命令;
网络管理命令。
1.2.2 命令格式
Linux命令格式:
在这里插入图片描述
说明如下:
command: 命令名:相应功能的英文单词或单词的缩写;
[-options]:选项:可用来对命令进行控制,也可以省略;
parameter1 …:传给命令的参数:可以是零个一个或多个;
示例:
在这里插入图片描述
1.2.3 man命令
Linux下,有问题找男人(man)。man是linux提供的一个手册,包含了绝大部分的命令、函数使用说明。该手册分成很多章节(section),使用
不同的章节来浏览。
示例:
在这里插入图片描述
2. 文件目录操作命令
常见目录操作的命令有:pwd、cd、ls、mkdir、rmdir、rm等。详细用法如下:
2.1 pwd
pwd命令以绝对路径的方式显示用户当前工作目录。命令将当前目录的全路径名称(从根目录)写入标准输出。全部目录使用/分隔。第一个/表示根
目录是当前目录。执行pwd命令可立刻得知您目前所在的工作目录的绝对路径名称。
语法:
在这里插入图片描述
选项:
在这里插入图片描述
示例:
在这里插入图片描述
2.2 cd
cd命令用来切换工作目录至dirname。其中dirname表示法可为绝对路径或相对路径。
“~”也表示为home directory的意思,“.”则是表示目前所在的目录,“…”则表示目前目录位置的上一层目录。
语法:
cd (选项) (参数)
选项:
-p 如果要切换到的目标目录是一个符号连接,直接切换到符号连接指向的目标目录;
-L 如果要切换的目标目录是一个符号的连接,直接切换到字符连接名代表的目录,而非符号连接所指向的目标目录;

  • 当仅实用"-“一个选项时,当前工作目录将被切换到环境变量"OLDPWD"所表示的目录。
    示例:
    cd 进入用户主目录;
    cd ~ 进入用户主目录;
    cd - 返回进入此目录之前所在的目录;
    cd … 返回上级目录(若当前目录为“/“,则执行完后还在“/”;"…"为上级目录的意思);
    cd …/… 返回上两级目录;
    cd !$ 把上个命令的参数作为cd参数使用。
    2.3 ls
    ls命令用来显示目标列表,在Linux中是使用率较高的命令。ls命令的输出信息可以进行彩色加亮显示,以分区不同类型的文件。
    语法:
    ls(选项)(参数)
    常用选项:
    -a:显示所有档案及目录;
    -l:以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名,文件类型、权限模式、硬连接数、所有者、组、文件大小和文件的最后修改时间等;
    -i:显示文件索引节点号(inode)。一个索引节点代表一个文件
    参数:
    目录:指定要显示列表的目录,也可以是具体的文件。
    示例:
    ls–l 输出长格式列表
    ls–al以长格式列表显示当前目录下包括影藏文件在内的所有文件列表
    2.4 mkdir
    mkdir命令用来创建目录。该命令创建由dirname命名的目录。如果在目录名的前面没有加任何路径名,则在当前目录下创建由dirname指定的目录
    个已经存在的路径,将会在该目录下创建一个指定的目录。在创建目录时,应保证新建的目录与它所在目录下的文件没有重名。
    语法:
    mkdir (选项)(参数)
    常用选项:
    -p或–parents 若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录;
    -m<目标属性>或–mode<目标属性>建立目录的同时设置目录的权限;
    参数:
    目录:指定要创建的目录列表,多个目录之间用空格隔开。
    示例:
    mkdir -m 700 /usr/meng/test在目录/usr/meng下建立子目录test,并且只有文件主有读、写和执行权限,其他人无权访问;
    2.5 rmdir
    rmdir命令用来删除空目录。注意:子目录被删除之前应该是空目录。
    语法:
    rmdir (选项)(参数)
    常用选项:
    -p或–parents:删除指定目录后,若该目录的上层目录已变成空目录,则将其一并删除;
    参数:
    目录列表:要删除的空目录列表。当删除多个空目录时,目录名之间使用空格隔开。
    示例:
    rmdir -p bin/os_1删除子目录os_1和其父目录bin;
    2.6 rm
    rm命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个
    有文件保持不变。
    注意:使用rm命令要格外小心。因为一旦删除了一个文件,就无法再恢复它。
    语法:
    rm (选项)(参数)
    常用选项:
    -d:直接把欲删除的目录的硬连接数据删除成0,删除该目录;
    -f:强制删除文件或目录;
    -i:删除已有文件或目录之前先询问用户;
    -r或-R:递归处理,将指定目录下的所有文件与子目录一并处理;
    参数:
    文件:指定被删除的文件列表,如果参数中含有目录,则必须加上-r或者-R选项。
    示例:
    #rm -i test example交互式删除当前目录下的文件test和example;
    Remove test ?n(不删除文件test)
    Remove example ?y(删除文件example)
    #rm -r *删除当前目录下除隐含文件外的所有文件和子目录;
    2.7 touch
    touch命令有两个功能:一是用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来;二是用来创建
    语法:
    touch (选项)(参数)
    常用选项:
    -a:或–time=atime或–time=access或–time=use 只更改存取时间;
    -t:<日期时间>使用指定的日期时间,而非现在的时间;
    参数:
    文件:指定要设置时间属性的文件列表。
    示例:
    touch ex2在当前目录下建立一个空文件ex2;
    2.8 cp
    cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在
    令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。
    语法:
    cp (选项)(参数)
    常用选项:
    -f:强行复制文件或目录,不论目标文件或目录是否已存在;
    -i:覆盖既有文件之前先询问用户;
    -l:对源文件建立硬连接,而非复制文件;
    -p:保留源文件或目录的属性;
    -R/r:递归处理,将指定目录下的所有文件与子目录一并处理;
    参数:
    源文件:制定源文件列表。默认情况下,cp命令不能复制目录,如果要复制目录,则必须使用-R选项;
    目标文件:指定目标文件。当“源文件”为多个文件时,要求“目标文件”为指定的目录。
    示例:
    cp …/mary/homework/assign .将指定文件复制到当前目录下
    cp file /usr/men/tmp/file1将文件file复制到目录/usr/men/tmp下,并改名为file1;
  1. 常用进程管理命令
    3.1 ps
    ps命令用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。
    语法:
    ps (选项)
    常用选项:
    -a:显示所有终端机下执行的程序,除了阶段作业领导者之外。
    x:显示所有程序,不以终端机来区分。
    u:以用户为主的格式来显示程序状况。
    示例:
    $ ps -a - 列出所有运行中/激活进程
    3.2 kill
    kill命令用来删除执行中的程序或工作。
    语法:
    kill (选项)(参数)
    常用选项:
    -a:当处理当前进程时,不限制命令名和进程号的对应关系;
    -l <信息编号>:若不加<信息编号>选项,则-l参数会列出全部的信息名称;
    -p:指定kill 命令只打印相关进程的进程号,而不发送任何信号;
    参数:
    进程或作业ID:指定要删除的进程或作业。
    示例:
    kill -l
    ps与kill一般用法是:先用ps查找进程,然后用kill杀掉。
    示例:
    #ps -ef | grep vim
    root 3268 2884 0 16:21 pts/1 00:00:00 vim install.log
    root 3370 2822 0 16:21 pts/0 00:00:00 grep vim
    kill 3268
    kill 3268
    -bash: kill: (3268) - 没有那个进程
  2. 其他指令
    4.1 tar
    tar:压缩与解压缩命令,针对gzip格式和bz2分别使用不同的参数和选项。
    gzip格式:
    压缩用法:tar cvzf 压缩包包名文件1 文件2 … ,示例如下。
    $ tar zcvf bk.tar.gz *.c
    解压用法:tar xvzf 压缩包包名,示例如下。
    $ tar zxvf bk.tar.gz
    解压到指定目录:-C ,示例如下。
    $ tar zxvf bk.tar.gz -C ./test /将bk.tar.gz解压到当前目录下的test目录下
    bz2格式:
    压缩用法: tar jcvf 压缩包包名文件1 文件2 … ,示例如下。
    $ tar jcvf bk.tar.bz2 *.c
    解缩用法: tar jxvf 压缩包包名,示例如下。
    $ tar jxvf bk.tar.bz2
    解压到指定目录:-C ,示例如下。
    $ tar jxvf bk.tar.gz -C ./
    4.2 apt-get
    apt-get命令是Debian Linux发行版中的APT软件包管理工具,如同Windows上的安装文件。
    示例:
    $ apt-get upgrade 更新所有已安装的软件包
    $ apt-get apt-get install packagename 安装新的软件包
    4.3 ifconfig
    ifconfig:查看或配置网卡信息。
    示例:
    $ ifconfig eth0: 查看网卡信息
    $ ifconfig eth0 192.168.220.xx :设置ip
    $ ifconfig eth0 hw ether 12:34:56:78:23:56 /设置mac地址,多用于开发板
    4.4 ping等其他命令
    ping:测试网络连通性ping 192.168.1.123 -c 5 -c 代表发送包的次数。
    sudo:以系统管理者的身份执行指令。
    su:切换用户。
    shutdown:关机。
    reboot:重启电脑。
    who:查看当前系统登录用户的信息,第一列显示登陆用户名,第二列显示终端名,第三列显示登陆时间。
    exit:如果是图形界面,退出当前终端;如果是使用ssh远程登录,退出登陆账户。
    chmod:改变文件权限。例如增加a文件可执行权限,使用命令chmod +x a。
    clear:清除终端上的显示。
  3. 创建智能小车开发目录
    5.1 创建新用户
    默认情况下,树莓派配置了两个用户账户:pi(普通账户)和root(拥有额外权限的超级账户)。pi用户默认密码为raspberry,root用户默认无设
    ① 首次设置root密码,使用命令如下。
    $ sudo passwd root
    将提示输入新密码,并进行确认,成功后将进行提示,如下图所示。
    在这里插入图片描述
    ② 切换到root用户,输入密码,如下图所示。命令提示符变为由“$”变为“#”。

在这里插入图片描述
③ 添加新用户,命令如下。
//# adduser xxx(用户名)
将会提示输入新用户密码,并创建新用户目录。如下图所示。
在这里插入图片描述
新的用户将会在/home/目录下创建自己的home文件夹。pi用户的home文件夹位于/home/pi/。
5.2 创建工作目录
① 查看pwd查看当前所处目录,命令如下。
$ pwd
结果如下图所示,假设目前用户为pi,则当前所处目录为/home/pi,为树莓派pi用户的家目录。
在这里插入图片描述
② 使用cd命令进入根目录,然后使用ls命令查看Raspbian系统根目录,命令如下。
$ cd /
$ ls
可见Raspberry系统根目录下各个不同功能的目录,如下图所示。
在这里插入图片描述
③ 使用cd命令进入用户目路,然后使用mkdir创建code目录。也可根据实际情况创建个人工作目录。命令如下。
$ cd /home/pi
$ mkdir code
结果如下图所示,可见创建code目录成功。
在这里插入图片描述
以下的任务中可以使用code目录为工作目录,不再描述创建过程。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐