DonkeyCar树莓派版的实践

DonkeyCar树莓派版的实践

  • DonkeySim挑战赛群(QQ:913557234)
  • DonkeyCar树莓派版的实践
    • 1.0 配置与组装
    • 2.0 DonkeyCar组装
    • 3.0 在Windows上安装Donkeycar
      • 3.1 安装miniconda Python 3.7
      • 3.2 安装git 64 bit
      • 3.3 创建项目目录
      • 3.4 从Github获取最新的Donkeycar
      • 3.5 更换国内源
      • 3.6 更新与删除
      • 3.7 创建Python Anaconda环境
      • 3.8 安装Tensorflow GPU
      • 3.9 创建工作目录
    • 4.0 树莓派上环境配置与安装
      • 4.1 格式化TF卡
      • 4.2 下载树莓派系统镜像文件
      • 4.3 安装Win32DiskImager
      • 4.4 树莓派连接电脑
      • 4.5 更换国内软件源
      • 4.6 更新和升级
      • 4.7 配置设置
      • 4.8 摄像头测试
      • 4.9 安装依赖项
      • 4.10 设置虚拟环境
      • 4.11 安装Donkeycar Python代码
      • 4.12 安装Tensorflow
    • 5.0 创建DonkeyCar应用程序
      • 5.1 从模板创建Donkeycar
      • 5.2 配置I2C PCA9685
    • 6.0 校准你的DonkeyCar
      • 6.1 转向校准
      • 6.2 油门校准
    • 7.0 启动
      • 7.1 DonkeyCar操作
      • 7.2 PC电脑操作
    • 8.0 训练自动驾驶
      • 8.1 收集数据
      • 8.2 将采集的训练数据传输到PC
      • 8.3 训练模型
      • 8.4 训练模型发送到小车实现自动驾驶
    • 9.0 摇杆控制器(国产组装PS3)
      • 9.1 安装与设置
      • 9.2 操纵杆控制
    • 10.0 树莓派命令的别名
    • 11.0 安卓手机控制
      • 11.1 编辑wpa_supplicant.conf文件
      • 11.2 获取IP信息
      • 11.3 手机安装JuiceSSH
      • 11.4 连接
    • 12.0 场地标准

DonkeySim挑战赛群(QQ:913557234)

DonkeyCar树莓派版的实践

在DonkeyCar树莓派版的实践过程中,根据网上的各种资料操作经常会失败,其原因主要是有些资料很老久了,现在的技术领域发展太快,有些一年前的东西由于其他配套版本的升级与更新,使得已发表的内容已经无法在可靠的运行了,所以我这篇的内容会不断的跟踪DonkeyCar的发展,并在力所能及的范围内尽可能的同步更新,也希望DonkeyCar的实践者和爱好者共同参与一起来做这件事!

最新原版(英文)。

有兴趣的欢迎加入“DonkeyCar自动驾驶DIY” QQ群(913557234)交流讨论!

1.0 配置与组装

本DonkeyCar树莓派版的实践采用以下配置:

  • 车体:HSP1/16 无限94186遥控车越野车(有刷裸车)
    DonkeyCar树莓派版的实践_第1张图片
    DonkeyCar树莓派版的实践_第2张图片

  • 树莓派

    • 树莓派3 B+ 或 zero w
      DonkeyCar树莓派版的实践_第3张图片
      DonkeyCar树莓派版的实践_第4张图片
    • 16G 或 8G TF卡
      DonkeyCar树莓派版的实践_第5张图片
    • 摄像头(树莓派 500万像素摄像头)
      DonkeyCar树莓派版的实践_第6张图片
  • 读卡器
    DonkeyCar树莓派版的实践_第7张图片

  • 驱动板(16路PWM舵机驱动模块PCA9685)
    DonkeyCar树莓派版的实践_第8张图片

  • 电源模块(DC-DC 降压电源模块,6.5v12V~40V转5V/2A)
    DonkeyCar树莓派版的实践_第9张图片

  • 接插件(小田宫接插件 2位)
    DonkeyCar树莓派版的实践_第10张图片

  • 支架(donkey car 3D打印支架底板)
    DonkeyCar树莓派版的实践_第11张图片

  • PS3蓝牙无线手柄
    在这里插入图片描述

2.0 DonkeyCar组装

DonkeyCar树莓派版的实践_第12张图片
DonkeyCar树莓派版的实践_第13张图片
DonkeyCar树莓派版的实践_第14张图片
DonkeyCar树莓派版的实践_第15张图片
电机原连接在2.4G接收机的CH1、CH2通道上,如下图。
DonkeyCar树莓派版的实践_第16张图片
将CH1上的“白红黑”线(转向控制线)拔出,可看到,该线的另一端是连接到转向伺服电机上的,也就是控制小车转向的;CH2上的“白红黑”线(油门控制线)来自BEC(去电池电路)模块,该模块控制小车的电机,也就是控制小车速度的。
油门控制线接PWM驱动模块的0通道,转向控制线接1通道。
DonkeyCar树莓派版的实践_第17张图片
接线时,黑线对应驱动板上的黑排端子,红线对应红排端子,白线对应黄排端子。
接收机可以拆下来(原双面胶固定的)。
最后,还需要加一个移动电源(5V/2A输出),给树莓派供电。
DonkeyCar树莓派版的实践_第18张图片
DonkeyCar树莓派版的实践_第19张图片

3.0 在Windows上安装Donkeycar

3.1 安装miniconda Python 3.7

我是Win7,64位的系统,所以我安装的是miniconda Python 3.7 64位。
安装方法参见:Windows 10下安装Miniconda3

3.2 安装git 64 bit

安装git 64 bit。
安装方法参见:GIT -2.18.0-64.bit 的安装与使用

3.3 创建项目目录

  • 从开始菜单启动Anaconda
  • 创建并更改为您希望用作项目的目录
(base) C:\Users\adminitrator>d:
(base) D:\>mkdir projects
(base) D:\>cd projects

3.4 从Github获取最新的Donkeycar

git clone https://github.com/autorope/donkeycar
cd donkeycar
git checkout master

3.5 更换国内源

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --set show_channel_urls yes

3.6 更新与删除

conda update -n base -c defaults conda
conda env remove -n donkey

此处有时下载很困难,自行想办法解决!!!

3.7 创建Python Anaconda环境

conda env create -f install\envs\windows.yml
conda activate donkey
pip install -e .[pc]

这一过程时间较长,请耐心点!!!

3.8 安装Tensorflow GPU

如果你有NVidia卡,你应该更新到最新的驱动程序并安装Cuda SDK。

conda install tensorflow-gpu==1.13.1

3.9 创建工作目录

donkey createcar --path D:/mycar

4.0 树莓派上环境配置与安装

4.1 格式化TF卡

安装SDCardFormatterv5_WinEN,格式化TF卡。
参见:还原 / 恢复 / 格式化安装过操作系统 (Raspbian) 的 microSD 卡

4.2 下载树莓派系统镜像文件

下载Raspian Lite(Stretch)(352MB)。

4.3 安装Win32DiskImager

在Windows环境下使用Win32 Disk Imager(Image Writer)软件写入,把下载的zip包解压,打开软件,选择img文件,点击“写入”按钮,等待写入完成。
参见:树莓派3-系统安装-Windows下利用Win32DiskImager进行系统安装

4.4 树莓派连接电脑

在电脑上打开此boot分区,在里面新建一个ssh的空文件,系统在启动的时候就可以识别出来,从而在开机的时候就开启ssh连接。
当你没有网线的时候,就算开启了ssh连接,由于无法与电脑处于同一局域网,此时电脑也无法通过ssh连接树莓派,此时就需要在树莓派开启的时候先连接上wifi。同样的,首先在内存卡中的boot分区中新建一个wpa_supplicant.conf的文件,并在里面写上树莓派的wifi配置命令。
配置如下:

country=CN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="shumeipai"
    psk="88888888"
    key_mgmt=WPA-PSK
    priority=1
}

可以先写到记事本中,然后另存为wpa_supplicant.conf,再将其放入内存卡boot目录中。注意,其中ssid里的“shumeipai”是wifi名称,psk里的“88888888”是wifi密码。
将内存卡插入树莓派中连接电源开启树莓派了,利用Advanced IP Scanner可以在电脑上查看树莓派的IP地址 。
参见:Advanced IP Scanner - 免费的网络扫描工具
查找到树莓派ip地址之后,在电脑上利用putty通过ssh来连接树莓派。有时一次扫不到,就再扫描一次。
也可在命令窗口,输入arp -a查找,一般物理地址开头为“b”的是树莓派。
DonkeyCar树莓派版的实践_第20张图片
DonkeyCar树莓派版的实践_第21张图片
DonkeyCar树莓派版的实践_第22张图片
DonkeyCar树莓派版的实践_第23张图片
DonkeyCar树莓派版的实践_第24张图片
DonkeyCar树莓派版的实践_第25张图片
树莓派的ssh默认登陆名称是:pi
登陆密码是:raspberry
DonkeyCar树莓派版的实践_第26张图片

4.5 更换国内软件源

打开sources.list文件

sudo nano /etc/apt/sources.list

将内容替换如下:

deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi

DonkeyCar树莓派版的实践_第27张图片
打开raspi.list文件

sudo nano /etc/apt/sources.list.d/raspi.list

将内容替换如下:

deb http://mirror.tuna.tsinghua.edu.cn/raspberrypi/ stretch main ui
deb-src http://mirror.tuna.tsinghua.edu.cn/raspberrypi/ stretch main ui

DonkeyCar树莓派版的实践_第28张图片
Linux下nano编辑器的使用:
保存 :Ctrl+O,使用来保存所做的修改。
退出 :Ctrl+X,如果你修改了文件,下面会询问你是否需要保存修改。输入Y确认保存,输入N不保存,按Ctrl+C取消,返回继续编辑。
如果输入了Y,下一步会让你输入想要保存的文件名。如果不需要修改文件名直接回车就行;若想要保存成别的名字(也就是另存为)则输入新名称然后确定。

4.6 更新和升级

sudo apt-get update
sudo apt-get upgrade

4.7 配置设置

sudo raspi-config

回车,并通过方向键和回车键来选择各项设置。
change default password for pi
Localisation Option | Change Locale | zh_CN.UTF-8 UTF-8 | zh_CN.UTF-8
找到zh_CN.UTF-8 UTF-8,通过空格选中,确认后再次选择zh_CN.UTF-8。然后重启机器,完成Raspbian中文环境配置。
Interfacing Options | Camera
Interfacing Options | I2C
Advanced Options | Exapand Filesystem
修改密码,确定打开摄像头功能,打开I2C功能,最后还要设置Advanced Options | Exapand Filesystem。

4.8 摄像头测试

输入命令如下:

raspistill -o image.jpg -rot 180

等这条命令执行完成后,下载安装并运行FileZilla。
DonkeyCar树莓派版的实践_第29张图片
主机:sftp://192.168.1.31;用户名:pi;密码:xxx
DonkeyCar树莓派版的实践_第30张图片
DonkeyCar树莓派版的实践_第31张图片
DonkeyCar树莓派版的实践_第32张图片
此图像显示倒置,我们先不要管它,到后面运行小车应用程序时,再看图像是否正常。

4.9 安装依赖项

sudo apt-get install build-essential python3 python3-dev python3-virtualenv python3-numpy python3-picamera python3-pandas python3-rpi.gpio i2c-tools avahi-utils joystick libopenjp2-7-dev libtiff5-dev gfortran libatlas-base-dev libopenblas-dev libhdf5-serial-dev git

4.10 设置虚拟环境

python3 -m virtualenv -p python3 env --system-site-packages
echo "source env/bin/activate" >> ~/.bashrc
source ~/.bashrc

以这种方式修改.bashrc将在每次登录时自动启用此环境。要返回系统python,您可以键入deactivate。

4.11 安装Donkeycar Python代码

更改为您希望用作项目的目录。

mkdir projects
cd projects

从Github获取最新的Donkeycar代码

git clone https://github.com/autorope/donkeycar
cd donkeycar
git checkout master
pip install -e .[pi]

安装过程中有个别下载总是不成功,如下:
在这里插入图片描述
下载未完成(此例中3.5MB仅下载到3.1MB就进入下一步了),可以在此处看到这个文件的链接地址为:
https://www.piwheels.org/simple/h5py/h5py-2.10.0-cp35-cp35m-linux_armv6l.whl
可以用迅雷或其他办法下载下来进行离线安装(下载的文件放置到当前目录)

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple h5py-2.9.0-cp35-cp35m-linux_armv7l.whl

4.12 安装Tensorflow

pip install tensorflow==1.13.1

同样,安装过程中有个别下载总是不成功,可以用迅雷或其他办法下载下来进行离线安装(下载的文件放置到当前目录)。
安装过程中会出现下面这个问题:
Found existing installation: numpy 1.12.1
Not uninstalling numpy at /usr/lib/python3/dist-packages, outside environment /home/pi/env
Can’t uninstall ‘numpy’. No files were found to uninstall.
在此处要耐心等待完成,完成后用下述命令查看numpy版本:

pip list

(env) pi@raspberrypi:~ $ pip list
Package Version Location


numpy 1.17.2
使用下述命令卸载新安装的numpy版本

pip uninstall numpy

使用以下命令验证tensorflow的安装。

python -c "import tensorflow"

出现下述信息。
下述的警告是正常的:
/home/pi/env/lib/python3.5/importlib/_bootstrap.py:222: RuntimeWarning: compiletime version 3.4 of module ‘tensorflow.python.framework.fast_tensor_util’ does not match runtime version 3.5
return f(*args, **kwds)
/home/pi/env/lib/python3.5/importlib/_bootstrap.py:222: RuntimeWarning: builtins.type size changed, may indicate binary incompatibility. Expected 432, got 412
return f(*args, **kwds)

5.0 创建DonkeyCar应用程序

5.1 从模板创建Donkeycar

donkey createcar --path ~/mycar

5.2 配置I2C PCA9685

sudo apt-get install i2c-tools
sudo i2cdetect -y 1

DonkeyCar树莓派版的实践_第33张图片

6.0 校准你的DonkeyCar

所有汽车的设置都在运行命令时生成的脚本config.py和myconfig.py脚本中。

6.1 转向校准

确保您的汽车离地,以防止失控。

  1. 打开你的车,先打开车电源开关,再接通树莓派电源;
  2. 确认小车上的方向伺服控制线,它应该是PWM驱动板的1通道;
  3. 执行 donkey calibrate --channel 1 --bus=1;
    DonkeyCar树莓派版的实践_第34张图片
  4. 输入360,小车的车轮略微移动。如果没有输入400或300;
  5. 接下来,从刚才开始输入值基础上增加或减少10(更准确时,增减量可以为2或1),找到最大左转向的最小PWM值(再增加PWM时,角度不会再改变了)和最大右转向的最大PWM值(再减小PWM时,角度不会再改变了),并记住这些值;
  6. 输入“q”或“Q”退出;
  7. 在myconfig.py脚本中输入这些值作为STEERING_RIGHT_PWM和 STEERING_LEFT_PWM。

6.2 油门校准

  1. 确认小车上的ESC油门控制线,它应该是PWM驱动板的0通道;
  2. 运行 donkey calibrate --channel 0 --bus=1;
  3. 提示输入PWM值时,输入370;
  4. 应该听到ESC蜂鸣声,表明它已经过校准;
  5. 输入400,应该看到小车车轮开始前进,如果没有,可能是反向,请尝试输入330;
  6. 继续尝试不同的值,直到找到合理的最大速度并记住此PWM值。
    反转RC汽车有点麻烦,因为ESC必须接收反向脉冲,零脉冲,反向脉冲才能开始倒退。要校准反向PWM设置…
  7. 使用与上述相同的方法将PWM设置为零油门(370);
  8. 先输入反向值(330),再输入零油门值(370),然后再输入反向值(330);
  9. 反向值增或减 10输入,以找到合理的反向速度。记住这个反向PWM值。
    现在打开myconfig.py脚本并将小车的PWM值输入throttle_controller部分:
    THROTTLE_FORWARD_PWM =全油门前进的PWM值
    THROTTLE_STOPPED_PWM =零油门的PWM值
    THROTTLE_REVERSE_PWM =全反向油门时的PWM值
    使用下列命令修改校准值:
sudo nano /home/pi/mycar/myconfig.py

DonkeyCar树莓派版的实践_第35张图片

7.0 启动

7.1 DonkeyCar操作

退出重启,并用PuTTY连接DonkeyCar的树莓派,输入下列命令:

python mycar/manage.py drive

7.2 PC电脑操作

PC上在浏览器输入:192.168.1.31:8887,在Web上控制DonkeyCar。
DonkeyCar树莓派版的实践_第36张图片
DonkeyCar树莓派版的实践_第37张图片

8.0 训练自动驾驶

8.1 收集数据

确保收集到的数据质量。

  1. 在赛道上多练习驾驶几次(不记录数据);
  2. 当你确信你可以无误地驾驶10圈时按开始录制;
  3. 如果碰撞或跑离赛道,请立即按Stop Car停止录制;
  4. 在收集了10-20圈的良好数据(5-20k图像)之后,可以在小车的ssh会话中使用Ctrl-c停止小车;
  5. 您收集的数据位于最近的TUB数据文件夹中。

8.2 将采集的训练数据传输到PC

由于Raspberry Pi不是很强大,我们需要将数据传输到PC计算机进行训练。
在PC上用FileZilla将raspberry pi中/mycar/data/tub文件发送到PC的/mycar/data/下。
DonkeyCar树莓派版的实践_第38张图片
DonkeyCar树莓派版的实践_第39张图片

8.3 训练模型

在主机PC上打开一个终端Anaconda prompt,按下列步骤训练模型。

d:
activate donkey
python d:mycar/manage.py train --model mycar/models/mypilot.h5

DonkeyCar树莓派版的实践_第40张图片
DonkeyCar树莓派版的实践_第41张图片
DonkeyCar树莓派版的实践_第42张图片

8.4 训练模型发送到小车实现自动驾驶

现在,再用FileZilla 将你的 model 发送到你的小车上。
DonkeyCar树莓派版的实践_第43张图片
DonkeyCar树莓派版的实践_第44张图片
现在可以再次启动小车,并将模型传递给自动驾驶仪。

python mycar/manage.py drive --model ~/mycar/models/mypilot.h5

启动DonkeyCar,选择Local Pilot模式,进行自动驾驶。

9.0 摇杆控制器(国产组装PS3)

为了在现场操作方便,最好使用无线手柄,从DonkeyCar的推荐上来看,性价比较好的是索尼的PS3,但DonkeyCar仅提供了支持索尼原装的PS3。原装PS3的价格还是比较高的,而且全新原装的很难买到,绝大部分为二手或翻新的,所以我这里提供国产组装PS3的驱动安装解决方案。
DonkeyCar树莓派版的实践_第45张图片

9.1 安装与设置

  • 切换到root用户,并转到root用户的home目录下
sudo su -
  • 安装必备组件
apt-get update
apt-get install -y git pyqt4-dev-tools qt4-designer libjack-dev
apt-get install -y libusb-dev libdbus-1-dev libglib2.0-dev libudev-dev libical-dev libreadline-dev
  • 获取 bluez repo 补丁
cd /opt
git clone https://github.com/luetzel/bluez && cd bluez
  • 编译安装
./configure --prefix=/usr --mandir=/usr/share/man --sysconfdir=/etc --localstatedir=/var --enable-sixaxis
make -j3
make install
  • 重启蓝牙
hciconfig
systemctl daemon-reload
systemctl start bluetooth
service bluetooth status

返回下列信息:

  • bluetooth.service - Bluetooth service

    Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset: enabled)
    Active: active (running) since Fri 2019-09-06 17:38:40 BST; 7h ago
    Docs: man:bluetoothd(8)
    Main PID: 388 (bluetoothd)
    Status: “Running”
    CGroup: /system.slice/bluetooth.service
    └─388 /usr/lib/bluetooth/bluetoothd

9月 06 17:38:40 raspberrypi systemd[1]: Starting Bluetooth service…
9月 06 17:38:40 raspberrypi bluetoothd[388]: Bluetooth daemon 5.43
9月 06 17:38:40 raspberrypi systemd[1]: Started Bluetooth service.
9月 06 17:38:40 raspberrypi bluetoothd[388]: Starting SDP server
9月 06 17:38:40 raspberrypi bluetoothd[388]: Bluetooth management interface 1.14 initialized
9月 06 17:38:40 raspberrypi bluetoothd[388]: Failed to obtain handles for “Service Changed” characteristic
9月 06 17:38:40 raspberrypi bluetoothd[388]: Sap driver initialization failed.
9月 06 17:38:40 raspberrypi bluetoothd[388]: sap-server: Operation not permitted (1)
9月 06 17:38:40 raspberrypi bluetoothd[388]: Failed to set privacy: Rejected (0x0b)
lines 1-18/18 (END)
#(按 q 退出)

  • 获取,修补和安装 sixaxis
cd /opt
git clone https://github.com/falkTX/qtsixa
cd /opt/qtsixa/utils
make

这里可以仅要utils目录的内容!!!

  • 用USB线插入PS3
cd /opt/qtsixa/utils/bins
sudo ./sixpair

返回:
Current Bluetooth master: b8:27:eb:8d:59:a3
Setting master bd_addr to b8:27:eb:8d:59:a3

  • 断开PS3的USB连接,树莓派重启
sudo reboot
  • 再用USB线插入PS3
  • 断开PS3的USB连接,按手柄的PS按钮

9.2 操纵杆控制

  • ‘select’ : self.toggle_mode,(切换模式)
  • ‘circle’ : self.toggle_manual_recording,(○:手动录制切换)
  • ‘triangle’ : self.erase_last_N_records,(△:擦除最后N条记录)
  • ‘cross’ : self.emergency_stop,(×:急停)
  • ‘dpad_up’ : self.increase_max_throttle,(↑:增加最大油门)
  • ‘dpad_down’ : self.decrease_max_throttle,(↓:减少最大油门)
  • ‘start’ : self.toggle_constant_throttle,
  • “R1” : self.chaos_monkey_on_right,
  • “L1” : self.chaos_monkey_on_left,
  • ‘left_stick_horz’ : self.set_steering,(左摇杆左右控制角度)
  • ‘right_stick_vert’ : self.set_throttle,(右摇杆前后控制油门)
  • ‘R2’ : AiLauncher is enabled,(实测功能)

10.0 树莓派命令的别名

DonkeyCar的小车操作命令后面还带参数,操作起来输入的字符很多,这在手机上操作起来很不方便,为了便于手机上的操作,我们给DonkeyCar的几个常用命令起个别名,便于记忆和输入。

sudo nano /etc/bash.bashrc

编辑bash.bashrc文件,在文件末尾插入:

alias dkcd='python mycar/manage.py drive'
alias dkcdj='python mycar/manage.py drive --js'
alias dkcmd='python mycar/manage.py drive --model ~/mycar/models/mypilot.h5'

保存并退出,再重启

sudo reboot

别名即可生效。
以后输入:dkcd即可运行手柄操作DonkeyCar小车了,这样方便在手机上操作。

11.0 安卓手机控制

11.1 编辑wpa_supplicant.conf文件

在PC上编辑wpa_supplicant.conf文件,并复制到TF卡的根目录下。

country=CN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="手机热点名称"
    psk="连接密码"
    key_mgmt=WPA-PSK
    priority=1
}

DonkeyCar树莓派版的实践_第46张图片

11.2 获取IP信息

树莓派连接上手机热点后,在手机上查看树莓派的IP信息。
DonkeyCar树莓派版的实践_第47张图片
这个树莓派的IP为:192.168.43.166

11.3 手机安装JuiceSSH

在这里插入图片描述

11.4 连接

DonkeyCar树莓派版的实践_第48张图片
DonkeyCar树莓派版的实践_第49张图片
DonkeyCar树莓派版的实践_第50张图片
DonkeyCar树莓派版的实践_第51张图片

12.0 场地标准

DonkeyCar树莓派版的实践_第52张图片

你可能感兴趣的:(DonkeyCar,自动驾驶,人工智能,树莓派)