在DonkeyCar树莓派版的实践过程中,根据网上的各种资料操作经常会失败,其原因主要是有些资料很老久了,现在的技术领域发展太快,有些一年前的东西由于其他配套版本的升级与更新,使得已发表的内容已经无法在可靠的运行了,所以我这篇的内容会不断的跟踪DonkeyCar的发展,并在力所能及的范围内尽可能的同步更新,也希望DonkeyCar的实践者和爱好者共同参与一起来做这件事!
最新原版(英文)。
有兴趣的欢迎加入“DonkeyCar自动驾驶DIY” QQ群(913557234)交流讨论!
本DonkeyCar树莓派版的实践采用以下配置:
树莓派
PS3蓝牙无线手柄
电机原连接在2.4G接收机的CH1、CH2通道上,如下图。
将CH1上的“白红黑”线(转向控制线)拔出,可看到,该线的另一端是连接到转向伺服电机上的,也就是控制小车转向的;CH2上的“白红黑”线(油门控制线)来自BEC(去电池电路)模块,该模块控制小车的电机,也就是控制小车速度的。
油门控制线接PWM驱动模块的0通道,转向控制线接1通道。
接线时,黑线对应驱动板上的黑排端子,红线对应红排端子,白线对应黄排端子。
接收机可以拆下来(原双面胶固定的)。
最后,还需要加一个移动电源(5V/2A输出),给树莓派供电。
我是Win7,64位的系统,所以我安装的是miniconda Python 3.7 64位。
安装方法参见:Windows 10下安装Miniconda3
安装git 64 bit。
安装方法参见:GIT -2.18.0-64.bit 的安装与使用
(base) C:\Users\adminitrator>d:
(base) D:\>mkdir projects
(base) D:\>cd projects
git clone https://github.com/autorope/donkeycar
cd donkeycar
git checkout master
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
conda update -n base -c defaults conda
conda env remove -n donkey
此处有时下载很困难,自行想办法解决!!!
conda env create -f install\envs\windows.yml
conda activate donkey
pip install -e .[pc]
这一过程时间较长,请耐心点!!!
如果你有NVidia卡,你应该更新到最新的驱动程序并安装Cuda SDK。
conda install tensorflow-gpu==1.13.1
donkey createcar --path D:/mycar
安装SDCardFormatterv5_WinEN,格式化TF卡。
参见:还原 / 恢复 / 格式化安装过操作系统 (Raspbian) 的 microSD 卡
下载Raspian Lite(Stretch)(352MB)。
在Windows环境下使用Win32 Disk Imager(Image Writer)软件写入,把下载的zip包解压,打开软件,选择img文件,点击“写入”按钮,等待写入完成。
参见:树莓派3-系统安装-Windows下利用Win32DiskImager进行系统安装
在电脑上打开此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
打开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
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,下一步会让你输入想要保存的文件名。如果不需要修改文件名直接回车就行;若想要保存成别的名字(也就是另存为)则输入新名称然后确定。
sudo apt-get update
sudo apt-get upgrade
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。
输入命令如下:
raspistill -o image.jpg -rot 180
等这条命令执行完成后,下载安装并运行FileZilla。
主机:sftp://192.168.1.31;用户名:pi;密码:xxx
此图像显示倒置,我们先不要管它,到后面运行小车应用程序时,再看图像是否正常。
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
python3 -m virtualenv -p python3 env --system-site-packages
echo "source env/bin/activate" >> ~/.bashrc
source ~/.bashrc
以这种方式修改.bashrc将在每次登录时自动启用此环境。要返回系统python,您可以键入deactivate。
更改为您希望用作项目的目录。
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
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)
donkey createcar --path ~/mycar
sudo apt-get install i2c-tools
sudo i2cdetect -y 1
所有汽车的设置都在运行命令时生成的脚本config.py和myconfig.py脚本中。
确保您的汽车离地,以防止失控。
sudo nano /home/pi/mycar/myconfig.py
退出重启,并用PuTTY连接DonkeyCar的树莓派,输入下列命令:
python mycar/manage.py drive
PC上在浏览器输入:192.168.1.31:8887,在Web上控制DonkeyCar。
确保收集到的数据质量。
由于Raspberry Pi不是很强大,我们需要将数据传输到PC计算机进行训练。
在PC上用FileZilla将raspberry pi中/mycar/data/tub文件发送到PC的/mycar/data/下。
在主机PC上打开一个终端Anaconda prompt,按下列步骤训练模型。
d:
activate donkey
python d:mycar/manage.py train --model mycar/models/mypilot.h5
现在,再用FileZilla 将你的 model 发送到你的小车上。
现在可以再次启动小车,并将模型传递给自动驾驶仪。
python mycar/manage.py drive --model ~/mycar/models/mypilot.h5
启动DonkeyCar,选择Local Pilot模式,进行自动驾驶。
为了在现场操作方便,最好使用无线手柄,从DonkeyCar的推荐上来看,性价比较好的是索尼的PS3,但DonkeyCar仅提供了支持索尼原装的PS3。原装PS3的价格还是比较高的,而且全新原装的很难买到,绝大部分为二手或翻新的,所以我这里提供国产组装PS3的驱动安装解决方案。
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
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 退出)
cd /opt
git clone https://github.com/falkTX/qtsixa
cd /opt/qtsixa/utils
make
这里可以仅要utils目录的内容!!!
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
sudo reboot
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小车了,这样方便在手机上操作。
在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
}
树莓派连接上手机热点后,在手机上查看树莓派的IP信息。
这个树莓派的IP为:192.168.43.166