Category Archives: Uncategorized

Robocar控制器快速入门指南

图片发布

需求

在开始之前,您需要满足以下条件:

  • 具有iOS或Android的手机

安装移动应用

Robocar Controller在Apple的App Store和Google Play商店均可使用。只需在手机上安装此应用即可。

图片发布

用预先建立的映像刷新SD卡

  1. 下载Etcher
  2. 在此处下载我们的预制图像
  3. 将图像刷入SD卡
  4. 将卡插入Pi

将手机连接到热点

  1. 打开Raspberry Pi
  2. 等到绿灯停止闪烁。第一次可能最多需要2-3分钟。Pi会重新启动1-2次,直到准备就绪为止。
  3. 转到手机的Wifi设置屏幕。您将看到一个名为“ donkey-xxxxxx”的热点。在离开设置屏幕之前,请确保已连接到该热点。

首次设置

  1. 启动应用程序。首次使用时,请同意条款。
  2. 该应用程序将在网络中搜索汽车。您的汽车应显示IP 192.168.50.1。
  3. 点击显示的汽车。您将进入首次设置屏幕。
  4. 选择您正在使用的控制器类型。最有可能您将使用PCA9685。MM1用户请选择MM1。
  5. 选择您所在的国家。我们需要此信息,因为wpa请求者需要此信息以符合国家/地区特定的Wifi规则。如果选择了不正确的国家/地区,则可能会发生意外的wifi连接问题。
  6. 设置wifi连接。搜索附近的wifi网络,然后选择要让Pi连接的wifi网络。输入密码,然后点击完成。
  7. 查看设置。如果一切正常,请点按“完成”,然后Pi将禁用热点并连接到Wifi网络。此时,您会看到您的手机已从热点断开连接,因为Pi在成功连接到Wifi后会禁用它。您的手机很可能会回退并连接到原来用于连接的Wifi网络。确保您的手机与Pi连接到相同的网络。
  8. 您将被重定向回车辆搜索屏幕。您应该看到您的汽车随Wifi网络分配的IP一起出现。
  9. 点击汽车,然后转到汽车的控制面板。

图片发布

校准

完成首次设置后,您可能要做的第一件事就是校准汽车。点击进入校准屏幕。将显示两个选项卡以配置转向和油门:

图片发布

PCA9685的校准屏幕

驾驶

校准后,点击驾驶按钮以开始驾驶汽车。系统将询问您是否要使用虚拟游戏杆或物理游戏杆。现在选择虚拟游戏杆。此外,系统还会要求您分享您的当前位置。该应用程序将此位置(经度,纬度)添加到浴缸的meta.json文件中。

图片发布

图片发布

图片发布

数据

数据视图显示您在树莓派上收集的所有数据(数据桶)。

图片发布

图片发布

培养

截至今天,我们为移动应用程序用户提供免费的培训服务。

图片发布

图片发布

图片发布

自动驾驶仪

您可以通过两种方式启动自动驾驶仪。一种方法是在火车功能内启动自动驾驶仪。就像上面显示的屏幕截图一样,您可以直接从那里启动自动驾驶仪。另一种方法是使用控制面板上的“自动驾驶”功能。该应用程序将列出Pi内的所有型号。换句话说,您可以将模型复制到Pi中,但仍可以使用该应用程序启动自动驾驶仪。

图片发布

进阶设定

Doneky汽车软件带有多种配置,您可以进行试验。我们提供了一些您可能想要更改的常用选项。

  • 训练配置
  • 传动系设置

图片发布

结论

本文向您展示如何在不键入单个命令的情况下将Robocar控制器与Donkey汽车软件一起使用。我们希望这将简化并降低每个人尝试Donkey Car的技术障碍。感谢您阅读并访问Donkey Discord,以告诉我们您使用该应用程序的经验。

未来的增强功能和错误报告

如果您有任何建议或只是想报告错误,请随时在此处提交问题

商业用途

如果您打算使用此应用程序来赚钱,请遵循驴车指南,让我们知道

原文:https://medium.com/robocar-store/robocar-controller-quick-start-guide-bdf8cb16d7ce

DonkeySim挑战赛

如果不使用神经网络的参赛者仅需看第4与第5部分内容!
1.0 DonkeyCar的安装
1.1安装miniconda Python 3.7
安装miniconda Python 3.7 64位。
安装方法参见:Windows 10下安装Miniconda3

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

1.3创建项目目录
从开始菜单启动Anaconda Prompt
创建并更改为您希望用作项目的目录
C:\Users\adminitrator>d:
D:\>mkdir projects
D:\>cd projects
1
2
3
1.4从Github获取最新的Donkeycar
git clone https://github.com/autorope/donkeycar
cd donkeycar
git checkout master
1
2
3
1.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
1
2
3
1.6更新与删除
conda update -n base -c defaults conda
conda env remove -n donkey
1
2
1.7创建Python Anaconda环境
conda env create -f install\envs\windows.yml
conda activate donkey
pip install -e .[pc]
1
2
3
1.8安装Tensorflow GPU(可选)
如果你有NVidia卡,你应该更新到最新的驱动程序并安装Cuda SDK。

conda install tensorflow-gpu==1.13.1
1
1.9创建工作目录
donkey createcar –path D:/mycar
1
安装keras-vis

pip install keras-vis
1
2.0安装DonkeySim
d:
cd projects
git clone https://github.com/tawnkramer/gym-donkeycar
conda activate donkey
pip install -e gym-donkeycar
1
2
3
4
5
3.0修改相应文件
3.1修改dtypes.py
文件位置:D:\Miniconda3\envs\donkey\lib\site-packages\tensorflow\python\framework\dtypes.py。
修改dtpes.py文件的第526~530、535行。
原:

_np_qint8 = np.dtype([(“qint8”, np.int8, 1)])
_np_quint8 = np.dtype([(“quint8”, np.uint8, 1)])
_np_qint16 = np.dtype([(“qint16”, np.int16, 1)])
_np_quint16 = np.dtype([(“quint16”, np.uint16, 1)])
_np_qint32 = np.dtype([(“qint32”, np.int32, 1)])
np_resource = np.dtype([(“resource”, np.ubyte, 1)])
1
2
3
4
5
6
修改为:

_np_qint8 = np.dtype([(“qint8”, np.int8, (1,))])
_np_quint8 = np.dtype([(“quint8”, np.uint8, (1,))])
_np_qint16 = np.dtype([(“qint16”, np.int16, (1,))])
_np_quint16 = np.dtype([(“quint16”, np.uint16, (1,))])
_np_qint32 = np.dtype([(“qint32”, np.int32, (1,))])
np_resource = np.dtype([(“resource”, np.ubyte, (1,))])
1
2
3
4
5
6
3.2修改train.py文件
文件位置:D:\projects\gym-donkeycar\examples
\supervised_learning\train.py
修改train.py文件的第29行:
原:

matplotlib.use(‘Agg’)
1
修改为:

matplotlib.use(‘TkAgg’)
1
4.0 DonkeySim模拟器的使用
4.1下载DonkeySim模拟器
从Donkey Gym Release下载并解压主机PC平台上可运行的模拟器(DonkeySimWindows.zip)。
将模拟器放在合适的位置。如:~/projects/DonkeySimWindows。

可使用游戏杆/键盘手动驾驶、自动驾驶还可使用训练好的神经网络驾驶,运行界面如下:

选择窗口大小,点击“Play!”进入。

点击“Log dir”可设置记录数据目录。

在主界面点击“Generated Track”,进入我们挑战赛的赛道环境。

可以选择右侧的各种驾驶模式。

这是速度、转向和PD参数设置界面,在自动驾驶时,要设置这些参数,取得好成绩。

4.2设置验证
打开Anaconda Prompt。
使用示例模型来验证设置。

conda activate donkey
d:
cd projects\gym-donkeycar\examples\supervised_learning
python evaluate.py –model=models/example_model.h5
1
2
3
4
启动“DonkeySim”环境。单击“NN Control over Network”按钮。

4.3获取自己的训练数据
现在,你可以尝试根据自己的数据来训练自己的模型。
在模拟器中,按“Exit”进入主菜单。
单击“log dir”按钮并指定一个日志目录以保存数据。例如,你可以选择d:/projects/gym-donkeycar/examples/supervised_learning/log文件夹。
选择Generated Track环境。
单击“Auto Drive w Rec”或“Joystick/Keyboard w Rec”。记录约1万个样本(一圈以上)。查看左下角以查看日志计数。
完成后,单击“Stop”。

4.4训练模型
conda activate donkey
d:
cd projects\gym-donkeycar\examples\supervised_learning
python train.py –inputs=log/*.jpg –model=models/model.h5
1
2
3
4
模型结构可根据自己需要进行修改。
取消train.py文件的第208行注释,显示模型信息。
修改models.py文件(可设置学习率):
在第7行增加:

from tensorflow import keras
1
第57行修改为:

model.compile(optimizer=keras.optimizers.Adam(lr=0.0001), loss=’mse’, metrics=[‘acc’])
1
4.5评估模型
conda activate donkey
d:
cd projects\gym-donkeycar\examples\supervised_learning
python evaluate.py –model=models/model.h5
1
2
3
4
启动模拟器。选择Generated Track环境。单击“NN Control over Network”。

5.0 DonkeySim挑战赛
5.1 DonkeySim挑战赛类别
参加DonkeySim挑战赛的车必须连续不间断跑3圈以上,小车不能压到草坪,不能撞到障碍物,挑战赛共分为三大类:

游戏杆/键盘驾驶(Joystick/Keyboard)
自动驾驶(Auto Drive)
神经网络驾驶(NN Control over Network)
5.2 DonkeySim参赛者提交文件
参加DonkeySim挑战赛的选手,参赛作品必须提交以下文件、数据和视频。

5.2.1选手与作品简介
年龄和性别要真实(便于以后进一步的赛果分类),其他介绍可自由发挥;
参赛者首先应根据已公开(如该类别没有人提交或提交数少于10个)的其他参赛者提交的文件自行进行测试对比,成绩在前十名之内的即可提交,否则请不要提交。
5.2.2数据文件
自行测试成绩以文本文件方式提交;
数据要真实,不得人为编辑修改;
游戏杆/键盘驾驶参赛者提交压缩的原始数据记录(log)文件;
自动驾驶参赛者提交压缩的原始数据记录(log)文件和速度/转向/PD参数截图;
神经网络驾驶参赛者提交文件:
压缩的原始训练数据记录(log)文件
D:\projects\gym-donkeycar\examples\supervised_learning目录下的conf.py和models.py文件
D:\projects\gym-donkeycar\examples\supervised_learning\models目录下的model.h5和model.h5loss.png文件
5.2.3视频文件
游戏杆/键盘驾驶与自动驾驶参赛者提交原始数据记录(log)文件转成的.mp4格式文件,转换方法如下:
首先将DonkeySim内要转换为视频的记录数据(log),复制到D:\mycar\logs文件夹下,并运行下列命令:
conda activate donkey
d:
cd mycar
donkey makemovie –tub=D:\mycar\logs\log –out=log_movie.mp4
1
2
3
4
输出文件名为log_movie,mp4
神经网络驾驶参赛者视频文件的提交是可选的,也必须是.mp4格式的视频文件,请自行用合适的办法解决(参赛者如有好的方法,请共享出来,让大家享用)。
5.3 DonkeySim挑战赛评比方式
DonkeySim挑战赛公开参赛者提交的所有文件,采用自测与公示的方式进行评比,比赛成绩及时更新。比赛规则根据实施情况,听取大家的意见,不定时的更新,所有的原始数据尽量可靠的保存。
————————————————
版权声明:本文为CSDN博主「平衡-JL」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wujingyu67971348/java/article/details/101982829

DonkeySim自动驾驶

选择“Auto Drive No Rec”或“Auto Drive w Rec”即可进入DonkeySim的自动驾驶模式,开始测试时用“Auto Drive No Rec”方式,不记录数据,等调试稳定后再用“Auto Drive w Rec”方式运行,并记录数据,记录数据时如“DonkeySim游戏杆/键盘驾驶”一文选择记录数据文件夹。

在自动驾驶方式中需要调节如下图所描述的PID控制参数。

自动驾驶“Auto Drive w Rec”方式如下图所示。

————————————————
版权声明:本文为CSDN博主「平衡-JL」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wujingyu67971348/java/article/details/102326899

DonkeySim游戏杆/键盘驾驶

下载DonkeySim:从Donkey Gym Release下载并解压主机PC平台上可运行的模拟器(DonkeySimWindows.zip)。
解压并将模拟器放在合适的位置。如:D:/projects/DonkeySimWindows。

运行DonkeySim:双击可执行文件DonkeySim.exe即可进入DonkeySim启动界面。

如果取消“Windowed”前面的“勾选”,点击“Play!”进入的是“全屏”界面,否则可在“Screen resolution”下拉列表中选择你想要的分辨率后再点击“Play!”进入。

点击“Log dir”选择记录数据文件夹。

点击“Generated Track”进入赛道环境。

点击“Joystick/Keyboard No Rec”进入“游戏杆/键盘”驾驶操作状态。

按键盘上的“A,S,D,W”键或“上,下,左,右”箭头键即可操控小车的运动,按下“Stop”停止小车的运动,按下“Exit”退出比赛环境。按下“Quit”退出DonkeySim程序。

等熟练操作小车运动后,点击“Joystick/Keyboard w Rec”进入“游戏杆/键盘”驾驶操并记录驾驶数据,录下视频,提交文件,参加DonkeySim挑战赛了。

左下角的“Log”后面的数值为记录的帧数。
————————————————
版权声明:本文为CSDN博主「平衡-JL」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wujingyu67971348/java/article/details/102312971

Donkeycar教程

摘要:本教程是基于Donkeycar的智能小车教程。DonkeyCar小车是基于树莓派和Python,利用Keras深度学习框架实现的自动驾驶小车。

一、简介

本教程是基于Donkeycar的智能小车教程。DonkeyCar小车是基于树莓派和Python,利用Keras深度学习框架实现的自动驾驶小车。
本文档参考和整合Donkeycar文档创客智造的中英文教程,以及安装可能碰到的问题,以“HSP无限94186 ——1比16有刷无控车型”为模型作详细演示,从硬件,软件,系统整合,模型修改等方面介绍Donkeycar智能小车的实现。
整体框架:

1) Vehicle – a container class to hold and manage all aspects of the vehicle.
2) Parts – modular components of the vehicle that read/write to the memory. This includes sensors, actuators, remote controlers and a datastore.
3) Memory – holds the state of the vehicle and is used to pass variables between parts.
4) Drive loop – a function of the vehicle that runs ensures each part interacts with the memory.

二、硬件

硬件清单

配件明细

模型要求:

我们需要选择:
①独立ESC(电子调速器)和接收机的RC小车
②选择三线连接器,三线舵机
③选择速度更慢的有刷小车模型更容易实现。

推荐配置参考:

1:16模型配置

1:10模型配置

参数解释:
motor是电机的参数,2040就是表示定子外径是20mm,定子高度是40mm,定子的外径和高度越多,定子的铁芯越大,线圈绕的匝数也越多,表现出来就是电机的功率越大。
无刷电机KV值定义为转速/V,意思为输入电压增加1伏特(V),无刷电机空转转速(转/分钟)增加的转速值。
ESC的25A是指持续电流25A,这个峰值电流是85A,BEC输出5V,1A。
Tcaction:四驱,双差速器。
Groung Clearance:小车底部离地面的距离。

购买配置清单(价格仅供参考,更新于2018-7-3)
名称淘宝地址价格(税点费+邮费)/元备注
小车主体https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-10687857697.2.14566a1aBpsYGj&id=524795742343329.8(+20)无限94182——1比16有刷无控车架(有刷不要遥控)电调(已包含)舵机(已包含)
USB电池https://detail.tmall.com/item.htm?spm=a230r.1.14.9.2c9e646ctC49zM&id=564303977283&cm_id=140105335569ed55e27b&abbucket=13&skuId=356336270079149(0.2)2A 5V输出,小米充电宝
树莓派3B+https://item.taobao.com/item.htm?spm=a1z10.5-c-s.w4002-14802299686.14.485c40da2EhCk5&id=527630316715354(21.64)3B E14中国版 套餐16G,包括SD卡及配件
广角摄像头https://item.taobao.com/item.htm?spm=a1z10.5-c-s.w4002-14802299686.26.54ba6ae1HJKd7d&id=537191521576100(6.72)树莓派摄像头5MP
树莓派杜邦线https://item.taobao.com/item.htm?spm=a1z10.5-c-s.w4002-14802299686.23.2fd00909E38MRt&id=181897932692树莓派连接线
电机驱动芯片 PCA 9685https://detail.tmall.com/item.htm?spm=a230r.1.14.1.3bc5178b59bMmJ&id=538283746663&cm_id=140105335569ed55e27b&abbucket=115(+5.4)资料下载https://pan.baidu.com/s/1miRuKti
3D打印架CAD Files: a360.co/2pf3Dam STL Files: thingiverse.com/thing:2260575x需要3D打印机

配件介绍

HSP无限94182

模型参数:

模型结构:

电调(Electronic Speed Control,ESC)

电子调速器,主要有两个作用,一是将电池降压,适合接收机和其他舵机的工作电压;二是从接收机获得油门信号,控制马达的转速,从而改变飞机的速度。
❤连接方式为:
1、电调的输入线与电池连接;
2、电调的输出线(有刷两根、无刷三根)与电机连接;(在我们用到的有刷模型中,是红色和黑色的两根比较粗的线)
3、电调的信号线(三根红色,白色和黑色的较细的线)与接收机(PCA驱动芯片)连接。

舵机

舵机的工作原理:舵机常用的控制信号是一个周期为20毫秒左右,宽度为1毫秒到2毫秒的脉冲信号。当舵机收到该信号后,会马上激发出一个与之相同的,宽度为1.5毫秒的负向标准的中位脉冲。之后二个脉冲在一个加法器中进行相加得到了所谓的差值脉冲。输入信号脉冲如果宽于负向的标准脉冲,得到的就是正的差值脉冲。如果输入脉冲比标准脉冲窄,相加后得到的肯定是负的脉冲。此差值脉冲放大后就是驱动舵机正反转动的动力信号。舵机电机的转动,通过齿轮组减速后,同时驱动转盘和标准脉冲宽度调节电位器转动。直到标准脉冲与输入脉冲宽度完全相同时,差值脉冲消失时才会停止转动。
❤连接方式:将输出的三线与对应的PCA驱动板引脚连接。电调和舵机都是标准3线母插头连接只要按照对应的引脚插入驱动板就可以了。(地线一般为黑色或棕色、信号线一般为黄色或白色)。

树莓派+miscro SD存储卡:

Raspberry Pi(中文名为“树莓派”,简写为RPi,(或者RasPi / RPI) 1 是为学习计算机编程教育而设计,只有信用卡大小的微型电脑,其系统基于Linux。
关于树莓派的详细教程参考7
Raspberry Pi 3B+主板图解:

树莓派主板图解

树莓派引脚GPIO定义
❤连接方式:
1、USB电源接口接入充电宝电源
2、摄像头接口连接摄像头
3、树莓派和PCA9685连接:只连四根线,3.3v,两根 I2C 引脚 (SDA 和 SCL),地线 ground。

PCA电机驱动芯片9685(舵机驱动板)

资料下载:https://pan.baidu.com/s/1miRuKti
详细教程参考9

PCA9685是一款基于IIC总线通信的12位精度16通道PWM波输出的芯片, 可用于控制舵机、led、电机等设备,i2c通信,节省主机资源。
❤连接和使用方式:
1、 连接树莓派:
GND -> RPi GND(9脚)
SCL -> RPi SCL1(5脚)
SDA -> RPi SDA1(3脚)
VCC -> RPi 3.3V (1脚)
V+ -> RPi 5V(本实验中PCA上的V+接口不需要接入电源)

树莓派和PCA9685连接图

2、 连接舵机和电调:电调和舵机都是标准3线母插头连接只要按照对应的引脚插入驱动板就可以了。(地线一般为黑色或棕色、信号线一般为黄色或白色,所以对应黑色的线要插在GND对应的针头)。

PCA9685连接图
在上图中,两股标准3线母插头分别连接舵机与电调。

广角摄像头

WARNING:不要在树莓派开机时插拔摄像头!
摄像头需要满足的参数:

购买的Camera 5MP广角摄像头参数:

充电宝

提供5v2A的usb输出和12V输出,主要给树莓派供电
❤连接方式:将充电宝的输出microusb输出连接到树莓派的电源输入端。

3D打印架

❤用螺丝和销钉固定在小车车架上。

杜邦线

杜邦线可用于实验板的引脚扩展,增加实验项目等。可以非常牢靠地和插针连接,无需焊接,可以快速进行电路试验。
本实验中,用来连接树莓派与PCA驱动芯片的对应引脚。

硬件组装

组装流程

1),2)两步为3D打印步骤,如果不适用3D打印,可以用纸板和小刀手工完成顶部结构。
1) 打印部件(3D打印)
用黑色PLA打印零件,层高2毫米,没有支撑。顶部翻转杆设计成倒置打印。
用黑色PLA打印零件,0.3mm层高,一个0.5mm喷嘴,没有支撑。顶部翻转杆设计成倒置打印。
打印的结构图:

2) 清理零件(手工修正)
几乎所有3D打印部件都需要清理。重新钻孔,并清理多余的塑料。

3) 组装顶板结构,树莓派电源充电宝
顶部结构手工完成后的图片:

4) 将PCA驱动板连接到树莓派
利用杜邦线连接,对应的针脚如下:
GND -> RPi GND(9脚)
SCL -> RPi SCL1(5脚)
SDA -> RPi SDA1(3脚)
VCC -> RPi 3.3V (1脚)
V+ -> RPi 5V(本实验中PCA上的V+接口不需要接入电源)
本实验只需要连接四个针脚即可。

5) 将树莓派和PCA驱动板附加到3D打印的底板上。

6) 安装摄像头
使用摄像头前,取下相机镜头上的塑料薄膜。
安装方式:将树莓派上摄像头插销扒开,插入相机电缆,注意触点的位置,随后按入插销即可。

7) 硬件整合
舵机与电调已经在小车上固定好,所以接下来只需用三线母插头把PCA驱动板连接舵机与电调。因为电调和舵机都是标准3线母插头连接只要按照对应的引脚插入驱动板就好。(地线一般为黑色或棕色、信号线一般为黄色或白色,所以对应黑色的线要插在GND对应的针头)。

组装完成

几种不同形态智能小车的完成体:

三、软件

软件清单

❤系统:
树莓派系统
Ubuntu系统
❤在linux下安装donkeycar
安装依赖:virtualenv build-essential python3-dev gfortran libhdf5-dev
https://github.com/wroscoe/donkey
❤在Windows下安装donkeycar
https://conda.io/miniconda.html
https://git-scm.com/download/win
git库https://github.com/wroscoe/donkey
❤在MAC下安装donkeycar
https://conda.io/miniconda.html
https://www.atlassian.com/git/tutorials/install-git
xcode-select —install
pip install https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.3.0-py3-none-any.whl
开源机器学习框架:
❤pip install keras==2.0.6
❤pip install tensorflow==1.3.0

软件安装

安装树莓派系统

将SD卡用读卡器连接到本地PC。
首先为树莓派安装固件,下载地址:
https://www.dropbox.com/s/wiudnm2dcsvoquu/donkey_v22.img.zip?dl=0
安装步骤:
方法1:使用6中的推荐步骤

方法2:利用安装软件Etcher。
安装方法参考教程(For ubuntu),(For windows)

设置wifi连接

我们需要让树莓派连接wifi热点,从而可以无线操控小车。方法有两种:
方法1:SD卡插入树莓派,显示屏,键盘和鼠标连入树莓派,开机后通过界面链接wifi。
方法2:(没有显示屏和键鼠条件下)
首先,新建一个无线热点。可以使用本地PC新建wifi热点。记录ssid和password。
接下来修改树莓派的系统文件:
在boot部分的根目录下,新建文件名为wpa_supplicant.conf的文件,文件内容为

1
2
3
4
5
6
7
country=US
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid=”<your network name>”
psk=”<your password>”
}

分别在ssidpsk设置自己的WiFi用户名和密码,注意不能有<>

设置主机名

如果网络中有多个树莓派,还需要修改本树莓派的用户名,以下命令需要将sd卡挂载到Linux上运行,由于创建本文档时只有一个树莓派,所以并没有修改用户名,本文档的所有用户名均为pi,若读者对树莓派的用户名有修改,登录时需要改成自己的用户名和密码。

1
2
sudo vi /media/userID/UUID/etc/hostname
sudo vi /media/userID/UUID/etc/hosts

注意用户名只能是小写。
然后把SD卡插进树莓派里,给树莓派上电。

设置SSH远程登录

首先查看网络环境,树莓派连接的网络是本地连接13创建的共享热点:

用抓包工具或者nmap扫描工具查找树莓派的ip地址:

或者可以用cmd自带的ARP命令查看相应地址的ARP缓存也可以找到小车地址,arp -a
从上图可以找到树莓派的ip地址是192.168.155.2,接着通过ssh登录树莓派,用户名pi,密码asdfasdf ,登录进去之后界面如图所示:

另外,可以通过win10自带的移动热点看到连接设备的IP地址:

推荐使用的ssh客户端登录软件比如Xshell。

在树莓派镜像安装,升级donkeycar

存储卡图像上的donkeycar Python代码可能比Github repo上的要早,所以一旦你运行了Pi,需要更新,在ssh客户端连接树莓派后,键入命令如下:

1
2
3
cd ~/donkeycar
git pull
pip install -e .

在本地PC安装donkeycar并创建本地工作目录

接下来是在本地笔记本电脑或服务器上设置相同的代码库,以便测试和训练智能小车。安装因平台而异。有如下三种方法,仅给出了windows上的安装结果。

Windows系统

❤安装miniconda Python 3.6 64 bit. https://conda.io/miniconda.html
❤确保选中该框以允许它修改您的系统路径变量以添加conda。
❤安装git 64 bit,https://git-scm.com/download/win
❤从开始菜单启动Anaconda
❤更改为您希望用作项目主管的目录

1
2
mkdir projects
cd projects

❤安装donkeycar

1
2
git clone https://github.com/wroscoe/donkey
cd donkey

❤创建Python Anaconda环境

1
2
conda env create -n donkeycar -f install\envs\windows.yml
activate donkey

❤安装代码源并创建您的本地工作目录:

1
2
pip install -e .
donkey createcar –path ~/d2 #本地工作目录名称设置为d2,可以自己定义

安装结果:

注意:在关闭Anaconda提示符后,当再次打开它时,您需要键入activate donkey以重新启用映射到特定于donkey的Python库。(关于anaconda的使用,可以参考10
项目主管目录示例:

创建的本地工作目录示例:

Linux系统

❤安装依赖和python环境

1
2
3
4
5
sudo apt-get install virtualenv build-essential python3-dev gfortran libhdf5-dev
virtualenv env -p python3
source env/bin/activate
pip install keras==2.0.6
pip install tensorflow==1.3.0

❤安装donkeycar

1
2
git clone https://github.com/wroscoe/donkey donkeycar
pip install -e donkeycar
Mac系统

❤安装miniconda Python 3.6 64 bit. https://conda.io/miniconda.html
❤安装git 64 bit,https://git-scm.com/download/win
❤启动终端
❤如果Xcode or gcc 没安装

1
xcode-select –install

❤创建项目根目录

1
2
mkdir projects
cd projects

❤下载donkeycar

1
2
git clone https://github.com/wroscoe/donkey
cd donkey

❤创建Python Anaconda环境

1
2
conda env create -f envs/mac.yml
source activate donkey

❤安装Tensorflow

1
pip install https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.3.0-py3-none-any.whl

❤安装donkey

1
2
pip install -e .
donkey createcar –path ~/d2

注意:关闭终端后,当您再次打开终端时,您需要键入

1
source activate donkey

来重新启用映射到特定于donkey的Python库。

四、运行智能小车

WARNING:先放置到安全地方并让轮子离地!

Windows系统

-打开Anaconda
-激活映射到donkey的Python设置:donkey

1
2
3
“`
-进入管理donkey的本地目录:
“`cd ~/d2

远程登录树莓派

-用Xshell登录,详细见3.2.4节。

启动和控制小车

-在Xshell连接成功后,打开你小车目录,并开启小车

1
2
cd ~/d2
python manage.py drive

-这个脚本将启动你的小车,其中包括一个作为Web服务器的部件,以便控制你的小车。
-现在可以通过以下网址从网络浏览器控制您的汽车:

1
<your car’s IP’s address>:8887

接下来在本地PC通过浏览器(推荐Chrome浏览器)登录上述网址,在web端控制智能小车:

校准小车

小车的配置信息是存在config.py脚本中的,这个脚本会在运行

1
donkey createcar –path ~/d2

这个命令之后出现在”./d2”这个目录下,如下所示:

其内容是各个部件的参数配置:

校准小车的目的就是将上述参数调整到合适的值,这样才能顺利的驾驶小车,以及共享同款小车的校准数据。

舵机校准(转向校准)

要填的数据有:

注意,此时应让小车离开地面,避免乱跑
1、打开小车,找到舵机伺服电缆插到了PCA的那个通道上了,应该是1或者0.
2、运行命令

1
donkey calibrate –channel <your_steering_channel>

3、输入 360’会看到小车的轮子轻微转动,如果没有的话就输入400或者300
4、左右调整 +/- 10,一直到轮子完全转向左边或者右边,记录此时的值,并填入config.py

马力校准(电机控制)

需要校准的参数:

1、找到ESC的电缆,看看它插到PCA的哪个位置,这就是马力通道。
2、运行命令

1
donkey calibrate –channel <your_throttle_channel>

当提示输入PWM值的时候输入370,此时应该能听到ESC发出哔哔声,表示已经经过校准。
3、输入400,这时小车应该就能往前走了,如果不能往前,则有可能是反向的,此时应该输入330
4、多尝试几次,直到找到你认为比较合适的最大速度,记下此时的PWM值。

校准微调

现在小车已经校准过了,可以开动小车查看是否按照预期运行:
1、运行

1
python manage.py drive

命令启动小车
2、在浏览器中访问

1
<your_cars_ip_address>:8887

3、按j,一直到小车的方向完全转向右边
4、按i,一直到小车的方向完全朝向前方
5、测量转弯直径,并将它记录在表格中
6、在不同的转向值下重复同样的测量
7、绘制表格看看小车在各个方向的转向是否相同(角度相同时)
如果你的转向在80%PWM和100%PWM相同时,将PWM值变为80%PWM,
如果你的车往一边偏,改变另一边的PWM值
经过微调之后你的表格大概会是这个样子

五、训练智能小车

赛道设置

可以用带颜色的胶带、丝带或者绳子,赛道最好宽4英尺,并且有2英寸的白色边框和黄色虚线中线。

数据收集

① 先不记录数据,在跑道上跑几圈,当熟练跑道之后(10圈以上不出错)点击按钮Start Recording

② 如果出错或者有意外发生时马上点击Stop Car停止记录
③ 至少收集10-20圈好的数据之后即可以停止收集,Ctrl-c即可,收集的数据在data文件夹里

需要注意的细节:

1.清除d2/data目录下的之前的数据
2.回到d2目录下python namage.py drive启动小车
3.到浏览器中model选择user,然后用电脑控制小车在场景下跑几圈
4.等到操作小车在场景下基本不出错之后点击start recording开始记录数据
5.记录大约半个小时的数据就可以了
注意在记录数据的过程中,可能会出现小车没电的情况,解决的办法就是,刚开始在config.py文件中把THROTTLE_FORWARD_PWM设置的小一点,本车是335或者330,过一会感觉小车跑的变慢了,停止记录,停下小车,关闭程序。调整THROTTLE_FORWARD_PWM变大一点到440,重启程序,记得保持小车的运行速度以及Throttle差不多一致。同理慢慢可以变为445和450
6.记录完数据,筛选数据。手动删除数据中撞墙等不好的数据
7.将数据考到电脑上装的donkey的d2/data目录下(小文件太多,速度会特别慢)
8.进入d2目录,运行命令 python manage.py train --model ~/d2/models/mypilot
9.等待训练结束,到到d2/models下将mypilot文件发送到小车的对应目录下
10.用命令python manage.py drive --model ~/d2/models/mypilot启动小车,然后到浏览器中选择local pilot模式启动自动驾驶

拷贝数据至本地PC

由于树莓派计算能力有限,需要将数据迁移到电脑上进行模型的训练,有两种方法:

方法1:新开一个SSH窗口用rsync命令从树莓派复制数据。命令如下:

1
rsync -r pi@<your_pi_ip_address>:~/d2/data/ ~/d2/data/

方法2:利用Xshell里面的新建文件传输直接复制粘贴。

利用keras训练模型

复制好数据之后就可以运行训练脚本:

1
python ~/d2/manage.py train –tub <tub folder names comma separated> –model ./models/mypilot

或者:

1
python ~/d2/manage.py train –model ~/d2/models/mypilot

拷贝模型至树莓派

训练好之后再讲pilot迁移回树莓派:

1
rsync -r ~/d2/models/ pi@<your_ip_address>:~/d2/models/

用自动驾驶模型启动小车

重新启动小车,将训练好的模型穿进去:

1
python manage.py drive –model ~/d2/models/mypilot

用模拟器训练小车*

用于生成训练用的图片,测试自动驾驶仪等。当然你也可以不用这种方法,根据网页【http://docs.donkeycar.com/guide/build_hardware/】的描述,你也可以先用手机控制小车在赛道上开10-20次来收集训练数据。
下载之后直接双击EXE文件运行,你可以在input里面看到控制按钮信息。

模拟器中共有三个场景,但是网站【http://docs.donkeycar.com/guide/simulator/】中只给了前两种的描述,第三种是sparkfun AVC机器人大赛的场景:
Generated Road Scene:通用场景
The purpose of this is to create a randomly generated road so that you can have miles of curves on different road surfaces. You can train on one road and test on something similar, or a totally different surface.
Warehouse Scene:专用场景
The purpose of this is to create a specific track that is somewhat similar to an actual course in use as the primary track for the Oakland DIYRobocars Meetup.

进入模拟器,右上角可以选择操作选项,根据网站【http://docs.donkeycar.com/guide/simulator/】的介绍,Joystick/Keyboard No Rec的意思就是摇杆或者键盘控制,但是数据不记录,其他选项意思类推。Next Track:在生成的道路场景中,这将改变路面和轨道宽度。Regen Track:使用当前的表面类型,但生成一个新的随机路径和路径。
下图为我用键盘控制时的截图,在网站【http://docs.donkeycar.com/guide/simulator/】的介绍中,有一个注意事项是这样描述的:Note: Keyboard data produces steering information that is stepped (ie. -1, 0, +1) and may be difficult to train with. See below for joystick setup.大意是说由于键盘控制并不像摇杆可以产生连续的转向信息,而只能是间断的,所以并不适合用来训练。

键盘控制页面
下图为自动驾驶页面,可以看到左下角一共有四个参数,目前并没有搞得很清楚这四个参数的具体含义,暂且先贴出网页【http://docs.donkeycar.com/guide/simulator/】上的解释:
Max Speed:这个应该就是决定了自动驾驶的最大速度
This setting determines the target speed during the PID auto drive. It will also affect the speed when driving by keyboard controls (not recommended).
Prop:转向角度
This is short for proportional. This is the P part of PID that attempts to adjust steering back to the path in proportion to the deviation.
Diff:为了防止角度调整过大
This is the D part of PID that attempts to limit steering back to the path as derivative to the trend of deviation, designed to limit overshoot.
Max Steering
Max steering can only be adjusted when using Auto Drive No Rec. It will also affect joystick and keyboard steering range, and should be saved and reloaded for you.
另外关于这个参数,原文中有一个注意事项: Max Steering is an important adjustment. This affects categorical training quite strongly. As the steering data is normalized when written, and multiplies after coming from Python, this angle should remain constant over training and simulation. Take care when changing this value. And separate data and models by max steering setting.

自动驾驶时的截图
训练结束后,在log目录中会有训练的图片,图片大小为160*120像素

贴一个网页【http://docs.donkeycar.com/guide/simulator/】上给出的典型用法,方便以后使用。

六、更新DonkeycarV2.5教程

  1. 用Etcher给SD卡写入树莓派系统镜像文件名为:donkey_2.5.0_pi3.img,新建并编辑boot目录下的wpa_supplicant.conf文件。
  2. SSH连接树莓派并登陆。1
    2
    用户名:pi
    密码:raspberry
  3. 在树莓派上安装Donkeycar V2.5.1环境1
    2
    pip install donkeycar[pi]
    donkey createcar ~/
  4. 在windows上安装DonkeycarV2.5.1
    (注意区分本地工作目录与本地代码目录)
    a)新建一个本地代码目录,存放代码库:1
    2
    mkdir projects
    cd projects

b)从github上clone最新的donkeycar代码库

1
2
git clone https://github.com/wroscoe/donkey
cd donkey

c)安装donkeycar资源环境,新建本地工作目录(mycar)

1
2
pip install -e .
donkey createcar C:\Users\WuFan\new_mycar(自己修改)
  1. 会遇到的问题:
    a)ModuleNotFoundError: No module named 'controller'
    解决办法:
    将文件
    (可直接复制粘贴word中的这个文件)
    拷贝至\donkey\donkeycar\parts对应的本地代码目录下。
    修改本地工作目录中文件manage.py中第24行,修改为:1
    from donkeycar.parts.controller import LocalWebController, JoystickController

b)训练后的数据存放在树莓派tub文件夹下,而不是data
训练的时候,把tub文件夹下所有数据复制到本地工作目录下的data文件夹下。再开始训练。
c)用训练的模型驾驶的时候,切换到local pilot时,可能会遇到类似摄像头框消失,树莓派报错的情况。
这是因为树莓派上有的python文件版本和本地电脑从github上面clone的文件不一致。如果有报这种错误,可以把本地代码库上面的对应文件覆盖到树莓派上解决。

七、参考创新方向

无人驾驶车障碍竞速

无人取件车/送餐车/领路车

无人捡球车


参考文献

————-本文结束感谢阅读————-

基于 ROS 的 Donkey Car 远程控制

引言

这次我们要实现的功能是用 g29 方向盘远程控制 Donkey Car 小车运动。

整个系统包括小车平台和 PC 端两部分:

  • 小车平台上的设置
    1. 安装 raspbian 操作系统
    2. 安装 ROS
    3. 安装 Donkey Car 相关的 ROS package
  • PC 端的设置
    1. 安装 ROS
    2. 编写程序提取 g29 方向盘控制命令并发布到 ROS topic 上

基于以上两个平台,设置它们之间的 ROS 通讯,就可以实现远程控制。

下边是具体操作步骤。

小车平台上的安装

虽然可以 ssh 到小车上进行远程设置,但是还是强烈推荐连接上显示器、鼠标、键盘,将 raspberry pi 板子当作一个普通的电脑主机使用,操作起来要方便很多。

以下的安装步骤都是假设已经给 raspberry pi 外接了显示器、鼠标和键盘。我们用的是 raspberry pi 3B+ 。

安装 raspbian 操作系统

第一步是将 sd 卡创建成一个系统启动盘。步骤如下:

  • 下载 raspbian 操作系统镜像
    目前 raspberry pi 官网提供了最新的 raspbian 版本 buster 。但是出于兼容性方面的考虑,我们选择用不那么新的 stretch 版本。
    下载地址 http://downloads.raspberrypi.org/raspbian_full/images/raspbian_full-2019-04-09/
    只需要下载那个 1.9 G 的压缩文件即可。
  • 创建启动盘
    官网提供了非常详细的安装说明。也可以参考这里,通过命令行的形式烧录和备份镜像文件。如果不习惯用命令行方式,推荐用 Etcher 。
  • 最后的安装
    有了 sd 卡启动盘,插到 raspberry pi 板子上。通电启动就会进入系统安装界面,跟普通的 ubuntu 系统安装流程类似,不再赘述。

从 sd 卡启动是树莓派的标配,不过也可以从 USB 盘启动。基本方法也是通过 Etcher 将系统镜像文件写入 USB 盘。具体操作可以参考这里。对于最新版的树莓派 3B+,启动的时候只需要 USB 盘,对于旧版的树莓派,还需要 sd 卡做一下引导。
用 USB 做系统盘的好处是存储容量可能比 sd 卡大一些,缺点是暴露在外边,不小心碰到了就可能直接关机了。

安装 ROS

在 raspbian 上安装 ROS 跟 ubuntu 有点区别。raspbian 系统中没有现成的已编译好的 ROS debian package,所以不能简单地用 apt install ros-kinetic-desktop-full 之类的命令安装。我们有两个选择:

  • 从源码编译
  • 直接用别人分享的 raspbian + ROS 镜像文件

这里我用了源码编译的方式。具体流程如官网所示. 这里不再赘述。

在安装过程中有几个问题需要注意

  1. 注意 raspbian 的版本,不同的版本安装命令有些区别。我们用的是 stretch 版本。
  2. 在最后进行如下编译时sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/kinetic 默认编译参数是 -j4 。我们在编译时系统完全卡死。尽管 raspberry pi 板子是 quad-core 的,但整体计算能力还是比较低。为了避免编译死机,可以添加参数 -j2,如果还死机,用 -j1,最终的编译命令为sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/kinetic -j2 # 或 -j1
  3. 设置完这一步就可以结束了echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc 后边的步骤不需要。

根据我们的经验,整个源码安装过程至少 3 个小时 (用了参数 -j1)。

安装 Donkey Car 相关的 ROS package

本项目用到的 package 都在这里。实际上我们只需要其中两个 package: donkey_car 和 ros-i2cpwmboard

只要前一步的 ROS 编译过程没有问题,后边在使用 ROS 时跟普通 ubuntu 上是完全一样的。
基本步骤是创建一个 workspace,把上述两个 package 放进去, catkin_make 编译一下,就可以了。

在编译 ros-i2cpwmboard 时如果出现如下错误

‘i2c_smbus_write_byte_data’ was not declared in this scop

则需要额外安装一个 i2c 工具包

sudo apt-get install libi2c-dev

以上所有流程结束之后可以测试一下:

roslaunch donkey_car keyboard_demo.launch

通过 rqt_graph 可以看到一个 topic /cmd_vel ,此时只要向该 topic 发送控制命令,就可以驱动小车移动了。可以在命令行用rostopic pub 命令向 /cmd_vel 发送数据测试一下。

这里可能有个问题,运行上述 roslaunch 命令之后,在没有任何 topic 信息输入的情况下,车轮的角度可能会偏向一边,而不是朝向正前方。这是因为 donkey_car/src/low_level_control.py 这个文件中设置的参数跟实际小车不太匹配。这个文件中默认 center_value 的 pwm 值为 333,我们的小车设置为 300 时车轮才会朝前。具体搜索 pwm 值的过程可以参考这里

下一步我们就在 PC 端将 g29 方向盘的操作发布到该 topic 上。

PC 端安装

安装 ROS

PC 端的 ROS 安装比较中规中矩,按照官网步骤安装即可。对于我们这个项目,安装 desktop 就足够了,不需要 desktop-full。当然,安装 desktop-full 肯定也是没有问题的。

转换 g29 操作指令到 ros topic

我们这里用 Node.js 与 g29 通讯,Node.js 既可以提取 g29 的操作输入 (方向盘转角、踏板),也可以反向控制 g29 方向盘。关于反向控制的部分,可以参考我们之前的文章

下面我们要基于 Node.js 编写 ROS node 文件 g29_pub.js,实现 g29 控制命令的提取:

#!/usr/bin/env node

'use strict';

const rosnodejs = require('rosnodejs');
const g = require('logitech-g29');

const Twist = rosnodejs.require('geometry_msgs').msg.Twist;

const options = {
  autocenter: true, 
  debug: false,
  range: 900
}

const wheel = {
  currentPos: 0, 
  moveToPos: 0,  
  moved: true
}

var connected = false;
// once g29 is connected, run this function
    g.connect(options, function() {
    connected = true;
    g.forceFriction(0.4);
})

function g29_pub_node() {
    rosnodejs.initNode('/g29_pub')
    .then((rosNode) => {
        if (!connected)
        return; 
        var pub = rosNode.advertise('/cmd_vel', Twist);
        const msg = new Twist();
        g.on('wheel-turn', function(val){
            msg.angular.z = -(val-50.0)/50.0;    # 可以按照实际需要,将 g29 转角转换成小车的转角
            pub.publish(msg);
        })
        g.on('pedals-gas', function(val){
            msg.linear.x = val * 5;  # 可根据需要修改
            pub.publish(msg);
        })
        g.on('pedals-brake', function(val){
            msg.linear.x = val * - 5;   # 可根据需要修改
            pub.publish(msg);
        })
    })
}


if (require.main === module) {
    // Invoke Main Function
    g29_pub_node();
}

上述命令创建了名了 g29_pub_node 的 ROS node,可以将 g29 的操作转化成 /cmd_vel上的命令。

Donkey Car 与 PC 的连接

有了以上两个平台,现在需要配置 ROS 环境,实现两个平台之间的通讯。假设现在两个平台连接到同一局域网里,互相能 ping 通。

我们选择在 PC 端运行 ROS master, 小车远程连到 PC。

  • PC 平台:
    在 ~/.bashrc 文件末尾添加如下变量定义:export ROS_IP=<PC IP addrss> 然后重开 terminal ,启动 ROS,运行刚才编写的 g29_pub.js 文件。这样就设置好了 g29 方向盘到 /cmd_vel 这一部分的连接。可以通过 rostopic echo /cmd_vel 查看一下方向盘转动时是否有数据输出。
  • 小车平台
    类似地,要在 ~/.bashrc 文件末尾添加如下变量定义:export ROS_IP=<donkey car IP addrss> export ROS_MASTER_URI=http://<PC IP address>:11311 这里不仅要设置本地 IP,还要设置要远程连接的 ROS master 的 IP。设置好以上内容之后,运行如下命令: roslaunch donkey_car keyboard_demo.launch 这就设置好了从 /cmv_vel 到小车这一部分的连接。

如果一切顺利,应该可以通过 g29 方向盘远程控制 Donkey Car 运行了。