DonkeyCar

date
Sep 30, 2023
slug
Technology-Sharing-01
status
Published
tags
DonkeyCar
技术分享
summary
体验一下DonkeyCar小车。
type
Post

系统安装

下载烧录工具(RaspberryPi
请选择电脑相对应的版本进行下载
notion imagenotion image
服务器中选择donkeycar-pi-buster-2023-08-01.zip这个文件进行下载
notion imagenotion image
点击最后一项选择自己的系统,选择刚刚下载的系统进行烧录
notion imagenotion image

Wi-Fi连接

我们已安装了系统,但是没有显示器的情况下很麻烦,无法通过图形界面链接Wi-Fi,所有我们通过增加配置文件来链接Wi-Fi。DonkeyCar保持无线连接,更方便于我们在内网控制。
下载这个文件
在电脑上打开装有DonkeyCar的sd卡,将wpa_supplicant.conf文件复制到SD卡的根目录中即可
使用vscode文本编辑器,打开wpa_supplicant.conf文件
在ssid中输入Wi-Fi名称(第5行)
在psk中输入Wi-Fi密码(第6行)
notion imagenotion image
修改完成后点击保存,将系统sd卡放入小车即可,等待系统启动OLED屏幕就会显示IP地址。

OLED驱动

为了方便每次启动小车不需要连接显示器查看IP,在OLED上显示IP地址,方便ssh直连。因为系统更新,使用了Docker虚拟环境,所以文件的驱动配置目录也发生了改变,OLED因为没有驱动配置会显示乱码。
notion imagenotion image
首先使用cd命令,回到主页
cd
使用git命令GitHub上下载需要的屏幕驱动
git clone https://github.com/Nabaixin/TFOLED.git
下载完成后我们使用ls查看当前目录下的所有文件
此时我们会看到多出一个TFLOED的文件夹,这就是我们需要的驱动
ls
现在我们要将原本的驱动替换成我们的驱动,sudo进行提权,cp -p 进行复制,后面是我们要粘贴的文件目录
sudo cp -P TFOLED/NBX_OLED/OLED.py /var/lib/docker/overlay2/b 76aa24aae347fe87c4738d315c2f1224f1b248cca93eb27e1324c174aaf8ac2/merged/virtualen v/python3/1ib/python3.7/site-packages/Adafruit_SSD1306/SSD1306•py
完整命令如下图所示
notion imagenotion image
稍等30秒,驱动配置正常,OLED屏幕不再是花屏了,已正常显示
notion imagenotion image

启动小车

登陆小车后台
首先我们打开浏览器,根据小车的IP在浏览器的地址栏输入相对应的IP,记得在IP地址后面加8888端口
例:我的IP登陆地址为192.168.0.242:8888
根据自己小车IP地址改为相对应的IP地址
notion imagenotion image
后台的登陆密码为:
jupyter
成功登陆后会看到仪表板,我们需要使用到文件管理及终端
notion imagenotion image
创建mycar
打开终端进行以下步骤
notion imagenotion image
复制下方命令来创建mycar
pi@docker-raspberrypi:~$ ls
pi@docker-raspberrypi:~$ donkey createcar
pi@docker-raspberrypi:~$ cd mycar/
校准小车
因为校准小车的时候会跑起来,因此在操作时务必将其抬起
notion imagenotion image
首先执行校准并找到转向和油门值的PWM范围。
小车的信号适当范围约为250-500。
校准油门值
373值输入完之后打开小车的马达开关
pi@docker-raspberrypi:~$ donkey calibrate --channel 0 --bus 1
notion imagenotion image
校准完之后按q退出
校准方向值
pi@docker-raspberrypi:~$ donkey calibrate --channel 1 --bus 1
notion imagenotion image
校准完之后按q退出
修改配置文件
我们点击仪表板左侧的mycar文件夹下的myconfig.py文件,我们需要修改一些配置
notion imagenotion image
打开文件后,需要修改以下几行代码,删除#字符(注释)和一个空格
需修改行数53,54,55,63,64,65,66,143,146,291
最后一行代码(291行),需要加上注释,在代码前加上#号即可
修改后如下图所示
notion imagenotion image
notion imagenotion image
notion imagenotion image
所有修改完成后按command+s进行保存
启动小车
让我们回到终端输入下面这段代码,启动小车程序
pi@docker-raspberrypi:~$ python manage.py drive
notion imagenotion image
如果想要收集小车数据进行自动行驶的话需要执行这一条命令
pi@docker-raspberrypi:~$ python manage.py drive --js
在浏览器中输入小车的IP+8887端口即可访问
例如:我的访问地址是192.168.0.242:8887
notion imagenotion image
后台摄像头画面的右边是触摸板可以操作小车,可以愉快的跑小车了!
如果想要小车自动行驶的话需要跑至少一万条数据

数据训练

我们现在完成一系列的配置文件,已让小车跑起来了,现在我们想让小车通过摄像头学习驾驶路线,让小车通过数据学习,能够自动跑起来。
ZIP学习数据压缩
首先我们进入mycar文件夹
cd ~/mycar/
学习数据保存在mycar文件夹下data目录,选择最满意的一次数据,删除其余数据,这样可以保证数据的准确性
如果存在过去的data.zip文件使用rm命令删除
rm data.zip
使用zip命令将data文件夹进行压缩
zip -r data.zip data/
等待压缩完成后mycar文件夹下会有一个data.zip的压缩包
通过Colab学习(GPU);
我们进入Colab后新建一个.ipynb文件,添加代码列表将下方代码复制后运行
确认Colab OS
!cat /etc/os-release
卸载现有的 CUDA
由于我们不知道colab实例上安装了什么,所以这里出现错误也没关系。
!apt --purge remove "cublas*" "cuda*"
添加 CUDA-10.1 存储库
!apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/7fa2af80.pub !wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-keyring_1.1-1_all.deb !dpkg -i cuda-keyring_1.1-1_all.deb
CUDA-10.1安装,大约需要10分钟
!apt-get update !apt-get install -y cuda-10.0
CuDNN-7.6.5安装
!wget https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/libcudnn7_7.6.5.32-1+cuda10.0_amd64.deb !wget https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/libcudnn7-dev_7.6.5.32-1+cuda10.0_amd64.deb !wget https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/libnccl2_2.6.4-1+cuda10.0_amd64.deb !wget https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/libnccl-dev_2.6.4-1+cuda10.0_amd64.deb !dpkg -i \ libcudnn7_7.6.5.32-1+cuda10.0_amd64.deb \ libcudnn7-dev_7.6.5.32-1+cuda10.0_amd64.deb \ libnccl2_2.6.4-1+cuda10.0_amd64.deb \ libnccl-dev_2.6.4-1+cuda10.0_amd64.deb
安装TensorFlow
安装与 DonkeyCar的RaspberryPi3 上安装的 TensorFlow 版本相同的版本。 Google Colab 的默认tensorflow/cuda/pip 包版本将会更新。 由于Tensorflow不保持向后兼容性,Colab使用与Raspberry Pi版本DonkeyCar标准TensorFlow 1.13.1相同版本的Tensorflow。 Google Colab 不再支持 Tensorflow 1.x,因此无法再使用 pip 找到它。 因此,我们将使用 Miniconda 安装 Tensorflow 1.13.1。
%%bash MINICONDA_INSTALLER_SCRIPT=Miniconda3-4.5.4-Linux-x86_64.sh MINICONDA_PREFIX=/usr/local wget https://repo.continuum.io/miniconda/$MINICONDA_INSTALLER_SCRIPT chmod +x $MINICONDA_INSTALLER_SCRIPT ./$MINICONDA_INSTALLER_SCRIPT -b -f -p $MINICONDA_PREFIX
import sys _ = (sys.path.append("/usr/local/lib/python3.6/site-packages")) !pip install -U pip !pip uninstall -y tensorflow !pip install tensorflow-gpu==1.13.1 h5py==2.10.0 protobuf==3.19.6 numpy==1.19.5 pillow==8.4.0 cycler==0.11.0 decorator==4.4.2 python-dateutil==2.8.2 wcwidth==0.2.6
请执行一次RESTART RUNTIME。 即使重新启动后,已安装的 Tensorflow 1.13.1 也会保留。 重新启动后,您可以从下一步开始。
重启后重新添加Python PATH
import sys _ = (sys.path.append("/usr/local/lib/python3.6/site-packages"))
检查 TensorFlow 版本
!pip freeze | grep -i -e tensorflow
!python -c "import warnings;warnings.simplefilter(action='ignore', category=FutureWarning);import tensorflow as tf; print(tf.__version__)"
安装DonkeyCar
与 Raspberry Pi 上安装的 DonkeyCar 版本相匹配。
# 如果找不到 imageio,DonkeyCar 自动安装的 imageio 版本为 2.16.0,最新截至 2023/03/02。 这需要 numpy1.20.0 或更高版本。 # 截至2023/03/02,可与google colab一起使用的numpy最高为1.19.5,因此请指定imageio版本并安装。 !pip install imageio==2.15.0
!git clone https://github.com/autorope/donkeycar.git %cd donkeycar !git checkout be45ae038cb00d81c5450b9a481dbf5aaa03e688 !pip install -e .[pc]
创建 DonkeyCar 项目
!donkey createcar --path /content/mycar
编辑 myconfig.py
将 CACHE_IMAGES 设置为 False。 这是为了减少学习过程中的内存消耗而设置的。 注释掉 GYM_CONF["guid"]。 截至20200825,这似乎已启用,因为开发主要在虚拟比赛中进行,但在学习时则没有必要。
!sed -i 's/# CACHE_IMAGES = True/CACHE_IMAGES = False/g' /content/mycar/myconfig.py !sed -i 's/use_multiprocessing = False/use_multiprocessing = True/g' /content/mycar/train.py !sed -i 's/^GYM_CONF/# GYM_CONF/g' /content/mycar/myconfig.py
上传data.zip并解压数据
上传data.zip(用DonkeyCar收集的学习数据)。 如何通过浏览器将data.zip上传到colab并 通过 Google Drive 将 data.zip 上传到 colab 有两种方法。 如果使用浏览器方式通信速度太慢,请尝试使用 Google Drive 方式。
通过浏览器上传data.zip时
上传data.zip(用DonkeyCar收集的学习数据)。 当您运行下面的代码时,将出现一个文件上传表单。 文件被发送到 /content/mycar/ 并且 data.zip 正在解压缩。 数据集的目录结构为/content/mycar/data/tub_1_xxxx。
%cd /content/mycar/ import os import shutil from google.colab import files if(os.path.exists("/content/mycar/data.zip")): os.remove("/content/mycar/data.zip") if(os.path.exists("/content/mycar/data")): shutil.rmtree("/content/mycar/data") uploaded = files.upload() file_name = list(uploaded.keys())[0] file_path = "/content/mycar/" + file_name print("-----------------------------------------------------") print("【処理結果】%sにデータをアップロードしました。" % file_path) print("-----------------------------------------------------") !unzip -o data.zip
通过 Google 云端硬盘上传 data.zip 时
通过浏览器上传数据非常慢,因此如果您想通过Google Drive快速完成上传,请使用它。 通过执行下面的代码并进行身份验证,您将能够使用通过 Google Colab 上传到 Google Drive 的 data.zip 文件。
from google.colab import drive drive.mount('/content/drive') !ls '/content/drive/My Drive' | grep data
Google Drive 安装在 /content/drive/MyDrive。 将 data.zip 文件复制到 /content/mycar/ 并解压缩。 如果您上传到 Google 云端硬盘中的任何文件夹,请将其替换为“/content/drive/MyDrive/任意文件夹名称/data.zip”。
%cd /content/mycar/ import os import shutil if(os.path.exists("/content/mycar/data.zip")): os.remove("/content/mycar/data.zip") if(os.path.exists("/content/mycar/data")): shutil.rmtree("/content/mycar/data") !ls -l '/content/drive/MyDrive/data.zip' !cp '/content/drive/MyDrive/data.zip' /content/mycar/data.zip !unzip data.zip
双击或按 Enter 进行编辑
开始学习
现在我们已经创建了Colab环境,我们将学习DonkeyCar。
学习目标将是 /content/mycar/data/ 中存在的所有文件夹。
type = "linear" trained_mode = "/content/mycar/models/mypilot.h5" %cd /content/mycar !python manage.py train --model={trained_mode} --type={type}
确认学习成果
DonkeyCar 能够分析经过训练的模型并将其输出为视频。 检查训练模型的结果如何。 由于每个模型都有完全不同的层,因此 makemovie 只能用于线性模型。
安装模型可视化包
!pip uninstall -y keras-vis !pip install git+https://github.com/sctse999/keras-vis !apt install -y ffmpeg !pip install opencv-python==4.1.2.30
创建视频文件
不支持多个tub,因此您必须使用--tub=tub_xxxx 选项指定一个数据目录。
!ls /content/mycar/data
选择显示的数据目录之一并将其重写为tub_xxxx。 您可以轻松检查目录是否没有大量数据项。
%cd /content/mycar mp4_path = 'tub_movie.mp4' !donkey makemovie --tub=data/tub_xxxx --model models/mypilot.h5 --type linear --salient --out=$mp4_path
视频下载
将创建的分析视频下载到您的 PC。 通过在电脑上播放下载的视频,您可以检查模型的响应情况。 绿线:人为操作。 蓝线:AI判断。
from google.colab import files files.download('/content/mycar/'+mp4_path)
迁移学习成果
学习结果保存在/content/mycar/models/mypilot.h5中。 运行下面的单元格并下载 H5 文件。 将学习结果复制到RaspberryPi上的~/mycar/models/mypilot.h5中,DonkeyCar就能自动运行。
from google.colab import files files.download('/content/mycar/models/mypilot.h5')
这时候已两份文件经在本地下载了
notion imagenotion image
我的学习模型分析视频
 
 
If you have any questions, please contact me.