DonkeyCar树莓派版的实践
- 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应用程序
- 6.0 校准你的DonkeyCar
- 7.0 启动
- 8.0 训练自动驾驶
- 9.0 摇杆控制器(国产组装PS3)
- 10.0 树莓派命令的别名
- 11.0 安卓手机控制
- 12.0 场地标准
DonkeyCar树莓派版的实践
在DonkeyCar树莓派版的实践过程中,根据网上的各种资料操作经常会失败,其原因主要是有些资料很老久了,现在的技术领域发展太快,有些一年前的东西由于其他配套版本的升级与更新,使得已发表的内容已经无法在可靠的运行了,所以我这篇的内容会不断的跟踪DonkeyCar的发展,并在力所能及的范围内尽可能的同步更新,也希望DonkeyCar的实践者和爱好者共同参与一起来做这件事!
最新原版(英文)。
有兴趣的欢迎加入“DonkeyCar自动驾驶DIY” QQ群(913557234)交流讨论!
1.0 配置与组装
本DonkeyCar树莓派版的实践采用以下配置:
-
车体:HSP1/16 无限94186遥控车越野车(有刷裸车)
-
树莓派
- 树莓派3 B+ 或 zero w
- 16G 或 8G TF卡
- 摄像头(树莓派 500万像素摄像头)
- 树莓派3 B+ 或 zero w
-
读卡器
-
驱动板(16路PWM舵机驱动模块PCA9685)
-
电源模块(DC-DC 降压电源模块,6.5v12V~40V转5V/2A)
-
接插件(小田宫接插件 2位)
-
支架(donkey car 3D打印支架底板)
-
PS3蓝牙无线手柄
2.0 DonkeyCar组装
电机原连接在2.4G接收机的CH1、CH2通道上,如下图。
将CH1上的“白红黑”线(转向控制线)拔出,可看到,该线的另一端是连接到转向伺服电机上的,也就是控制小车转向的;CH2上的“白红黑”线(油门控制线)来自BEC(去电池电路)模块,该模块控制小车的电机,也就是控制小车速度的。
油门控制线接PWM驱动模块的0通道,转向控制线接1通道。
接线时,黑线对应驱动板上的黑排端子,红线对应红排端子,白线对应黄排端子。
接收机可以拆下来(原双面胶固定的)。
最后,还需要加一个移动电源(5V/2A输出),给树莓派供电。
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
python -m pip install --upgrade pip
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”的是树莓派。
树莓派的ssh默认登陆名称是:pi
登陆密码是:raspberry
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
打开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
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。
主机:sftp://192.168.1.31;用户名:pi;密码:xxx
此图像显示倒置,我们先不要管它,到后面运行小车应用程序时,再看图像是否正常。
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
6.0 校准你的DonkeyCar
所有汽车的设置都在运行命令时生成的脚本config.py和myconfig.py脚本中。
6.1 转向校准
确保您的汽车离地,以防止失控。
- 打开你的车,先打开车电源开关,再接通树莓派电源;
- 确认小车上的方向伺服控制线,它应该是PWM驱动板的1通道;
- 执行 donkey calibrate --channel 1 --bus=1;
- 输入360,小车的车轮略微移动。如果没有输入400或300;
- 接下来,从刚才开始输入值基础上增加或减少10(更准确时,增减量可以为2或1),找到最大左转向的最小PWM值(再增加PWM时,角度不会再改变了)和最大右转向的最大PWM值(再减小PWM时,角度不会再改变了),并记住这些值;
- 输入“q”或“Q”退出;
- 在myconfig.py脚本中输入这些值作为STEERING_RIGHT_PWM和 STEERING_LEFT_PWM。
6.2 油门校准
- 确认小车上的ESC油门控制线,它应该是PWM驱动板的0通道;
- 运行 donkey calibrate --channel 0 --bus=1;
- 提示输入PWM值时,输入370;
- 应该听到ESC蜂鸣声,表明它已经过校准;
- 输入400,应该看到小车车轮开始前进,如果没有,可能是反向,请尝试输入330;
- 继续尝试不同的值,直到找到合理的最大速度并记住此PWM值。
反转RC汽车有点麻烦,因为ESC必须接收反向脉冲,零脉冲,反向脉冲才能开始倒退。要校准反向PWM设置… - 使用与上述相同的方法将PWM设置为零油门(370);
- 先输入反向值(330),再输入零油门值(370),然后再输入反向值(330);
- 反向值增或减 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
7.0 启动
7.1 DonkeyCar操作
退出重启,并用PuTTY连接DonkeyCar的树莓派,输入下列命令:
python mycar/manage.py drive
7.2 PC电脑操作
PC上在浏览器输入:192.168.1.31:8887,在Web上控制DonkeyCar。
8.0 训练自动驾驶
8.1 收集数据
确保收集到的数据质量。
- 在赛道上多练习驾驶几次(不记录数据);
- 当你确信你可以无误地驾驶10圈时按开始录制;
- 如果碰撞或跑离赛道,请立即按Stop Car停止录制;
- 在收集了10-20圈的良好数据(5-20k图像)之后,可以在小车的ssh会话中使用Ctrl-c停止小车;
- 您收集的数据位于最近的TUB数据文件夹中。
8.2 将采集的训练数据传输到PC
由于Raspberry Pi不是很强大,我们需要将数据传输到PC计算机进行训练。
在PC上用FileZilla将raspberry pi中的/mycar/data/tub文件发送到PC的/mycar/data/下。
8.3 训练模型
在主机PC上打开一个终端Anaconda prompt,按下列步骤训练模型。
activate donkey
python d:mycar/manage.py train --model mycar/models/mypilot.h5
8.4 训练模型发送到小车实现自动驾驶
现在,再用FileZilla 将你的 model 发送到你的小车上。
现在可以再次启动小车,并将模型传递给自动驾驶仪。
python mycar/manage.py drive --model ~/mycar/models/mypilot.h5
启动DonkeyCar,选择Local Pilot模式,进行自动驾驶。
9.0 摇杆控制器(国产组装PS3)
为了在现场操作方便,最好使用无线手柄,从DonkeyCar的推荐上来看,性价比较好的是索尼的PS3,但DonkeyCar仅提供了支持索尼原装的PS3。原装PS3的价格还是比较高的,而且全新原装的很难买到,绝大部分为二手或翻新的,所以我这里提供国产组装PS3的驱动安装解决方案。
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
}
11.2 获取IP信息
树莓派连接上手机热点后,在手机上查看树莓派的IP信息。
这个树莓派的IP为:192.168.43.166
11.3 手机安装JuiceSSH
11.4 连接
12.0 场地标准
转载:https://blog.csdn.net/wujingyu67971348/article/details/100805938