All posts by admin

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 运行了。

在Unity环境中用强化学习训练Donkey Car

作者:Felix Yu

编译:Bing

Donkey Car是一种为模型车开源的DIY自动驾驶平台,它利用一个带有相机的树莓派单片机,让模型车可在赛道上自动驾驶,Donkey Car会学习你的驾驶方法,在训练后懂得自动驾驶。对于那些没有背景知识的人来说,该平台能提供你所需要的必要细节,它既包含硬件也带有软件。阅读完这一教程,你也可以无需硬件背景知识组装一辆自己的自动驾驶汽车。

现在,训练汽车进行自动驾驶最常见的方法就是行为克隆和路线跟随。在高级层面,行为克隆是利用卷积神经网络学习汽车前方摄像机所拍摄的图像之间的映射,并通过监督学习控制角度和throttle values。而路线跟随是利用计算机视觉技术跟踪路线,并且利用一个PID控制器让小车跟着该路线。我尝试了两种方法,它们都很有用!

用行为克隆训练Donkey Car避开障碍物

用强化学习训练Donkey Car

重要的一点是,Donkey Car的目标是搭建一辆在比赛中跑的最快的车(能以最快速度跑完一圈)。我认为强化学习是训练的好方法,只需设计一种奖励,让汽车的速度达到最快,并且让它能一直保持在轨道内即可。听上去很简单对吧?但事实上,很多研究表示在实体目标上训练强化学习是很困难的。强化学习主要通过试错法训练,放在汽车身上,我们只能保佑车子不会在一次次的实验中撞碎。另外,训练时长也是一个问题,通常,强化学习智能体都要训练个几百回合才能掌握些许规律。所以,强化学习很少用在现实物体中。

模拟现实

最近有一些科学家们研究对现实进行模拟,即先用强化学习在虚拟模拟器上训练小车,然后将其迁移到现实世界里。例如,最近OpenAI就训练了一个灵活的机械手臂,可以做出多种动作,整个过程就是在虚拟中训练的。除此之外,谷歌大脑也曾训练过一个四足机器人,可以用模拟现实的技术学习灵活的动作。在虚拟器中学习控制策略,然后再将其部署到真正的机器人上。这样看来,若想用强化学习训练Donkey Car,一个可行方案就是先用模拟器训练,再把学到的策略用在真的小车上。

OpenAI训练的机械手

Donkey Car模拟器

第一步是先为Donkey Car建造一个高保真度的模拟器。幸运的是,Donkey Car社区里一位爱好者在Unity中创建好了一个模拟器。但是它设计的目的主要针对行为学习(即将相机中的图片保存在对应的控制角度和throttle values文件中以进行监督学习),但是和强化学习无关。我希望的是有一个类似OpenAI Gym那样的交互界面,可以用reset( )重置环境、对其进行操作。所以,我决定在现有的Unity模拟器基础上对其进行修改,让它更适合强化学习。

4.1 创建一种能用Python和Unity沟通的方法

因为我们要用Python书写强化学习代码,所以我们首先要找到一种方法能让Python在Unity环境中使用。结果我发现这现有的模拟器也是用Python代码进行沟通的,但它是通过Websocket协议进行的,Weosocket和HTTP不同,它支持服务器和客户端之间进行双向通信。在我们的案例中,我们的Python“服务器”可以直接向Unity推送信息(方向和油门),而我们的Unity“客户端”也可以反向对服务器推送信息(状态和反馈)。

除了Websocket,我还考虑使用gRPC,这是一种高性能服务器-客户端通信框架,用谷歌在2016年八月开源。Unity将其用于机器学习智能体接口通信的协议。但是它的设置有点麻烦,并不高效,所以我还是选择Websocket。

4.2 为Donkey Car创建一个定制化的环境

下一步是创建一个类似于OpenAI gym的交互界面,用于训练强化学习算法。之前训练过强化学习算法的人可能对各种API的使用很熟悉。常见的就是reset( )、step( )、is_game_over( )等。我们可以将OpenAI gym的种类进行扩展,然后用上面的方法创建自己的gym环境。

最终成果能和OpenAI gym相媲美,我们科用类似的指令与Donkey环境交互:

env = gym.make("donkey-v0")
state = env.reset()
action = get_action()
state, action, rewards, next_state = env.step(action)

环境同样可以让我们设置frame_skipping,并且用headless模式训练智能体(也就是无需Unity GUI)。

同时,Tawn Kramer还有3中Unity场景可用:生成道路、仓库和Sparkfun AVC,都可以用于训练。在我们开始运行自己的强化学习算法之前,我们要么自己搭建Donkey Car的Unity环境,要么下载预先搭建好的环境可执行程序。具体的环境设置和训练指导可以在我的GitHub中找到:github.com/flyyufelix/donkey_rl

4.3 用DDQN训练Donkey Car

准备好了对强化学习友好的环境,我们现在就可以搭建自己的强化学习算法啦!我采取的是用Keras书写的Double Deep Q学习算法,这是DeepMind开发的经典强化学习算法,易于测试,编写简单。我已经在OpenAI gym中的cartpole和VizDoom中测试了,所以如果有什么问题,应该是Unity环境的问题,算法没有问题。关于DQN的文章,大家可以参考我之前的博文。flyyufelix.github.io/2017/10/12/dqn-vs-pg.html

4.3.1 状态空间

我们用Donkey Car前方安装的摄像机所拍摄的像素照片,执行以下转换:

  1. 将尺寸从(120, 160)改为(80, 80)
  2. 变为灰度图像
  3. 框架堆叠:去前面几个步骤中的4个框架堆在一起

最后的状态维度应该是(1, 80, 80, 4)。

4.3.2 动作空间

现实和虚拟世界中的Donkey Car都是将持续的方向控制和油门数值作为输入。为了简介,我们将油门数值设为常量(例如0.7),仅仅改变控制方向。控制方向的值从-1到1,但是,DQN只能处理分离的动作,所以我将方向的值分为15个种类。

4.3.3 Q网络框架

我们的Q网络是一个3层卷积神经网络,以堆叠的框架状态为输入,输出表示方向值分类的15个值。

4.3.4 奖励

奖励是有关汽车偏离中线程度的函数,它由Unity环境所提供。奖励函数用以下公式表达:

其中max_cte是一个归一化常数,所以奖励的范围在0到1之间。如果abs(cte)大于max_cte,循环即终止。

4.3.5 其他重要变量

Frame skipping设置为2以稳定训练。Memory replay buffer的值为10000.Target Q网络在最终训练时会更新。CNN训练时的Batch size为64。贪婪函数用于探索。Epsilon初始值为1,逐渐在10000次训练后会成为0.02。

4.3.6 结果

经过上面的设置,在单个CPU和一个GTX 1080 GPU上,我训练了DDQN差不多100次。整个训练用了2到3个小时。可以从上面的视频中看到,小车跑得很好!

去除背景噪声

我们想让我们的强化学习智能体只根据路线的位置和方向进行决策输出(即方向控制),不要受环境中的其他因素影响。但是,由于我们的输入是全像素的图像,它可能对背景模式过度拟合,而无法认出行进路线。这在现实中尤其重要,因为旁边的车道可能会有障碍物(例如桌子、椅子、行人等)。如果我们想从虚拟世界将学习策略进行迁移,我们应该让智能体顾略背景中的噪音,只关注于车道。

为了解决这个问题,我创建了一个预处理通道,可以将行车路线从原始像素图像中分离出去,再输入到CNN中。分割过程受@ldesegur/a-lane-detection-approach-for-self-driving-vehicles-c5ae1679f7ee” title=”这篇博文”>这篇博文的启发。这一过程概括如下:

  1. 用Canny Edge检测器检测并提取所有边框
  2. 用Hough直线转换确定所有直线
  3. 将直线分成positive sloped和negative sloped两类
  4. 删除所有不属于车道的直线

最终转换出的图片应该有最多2条直线,具体情况如下:

接着我把分割后的图像重新调整到(80, 80)的,将4个连续的框架堆叠在一起,用它们作为新的输入状态。我使用新状态再次训练了DDQN,生成的强化学习智能体可以学习良好策略进行驾驶!

然而,我注意到不仅仅训练时间会变长,学习策略也会变得不稳定,车子会经常在转弯的时候摇晃。我想可能是因为在训练的时候丢掉了有用的背景信息。不然的话,智能体应该不会过度拟合。

下一步

在这篇文章中,我们介绍了一种能和OpenAI gym相比的环境,用来训练Unity模拟器中的Donkey Car。还用DDQN训练它自动成功地自动驾驶。接下来,我计划让小车通过训练加速到最大值,并且将这一策略迁移到现实中。

新手学堂之电池选购常识

任何模型车,都不可避免的需要使用电池,本文介绍一些常见模型车用的主流电池知识。
FunRC Studio原创资料,只发RCFANS,如需转载务必注明出处。

本文旨在为新手解决电池的常识问题。

电池的选购不外乎几个方面:
电池类型 / 电压 / 容量 / 放电C数 / 外形尺寸 / 插头类型

电池类型常见的有: NiCd / NIMh / LiPo / LiFe

    NiCd,镍镉电池,老掉牙的类型,造价低廉,容量低,污染大,带记忆效应,现在只能在一些廉价的套装车上找到,强烈不推荐
    NiMh,镍氢电池,在AA和AAA电池中,nimh绝对是主流,但是在遥控模型的电池中,绝对有廉颇老矣的感觉
    LiPo,锂聚合物电池,是现在模型中的主流类型,使用广泛,各种型号琳琅满目,是本文需要介绍的重点
    LiFe,锂铁电池,不算太主流,一般用在遥控器,或者油车接受电,很少用做电车的动力电

NiCd由于太老了,已经没有介绍的必要。不建议玩家选购。
NiMh则还有用武之地,例如油车接受电,很多都还是6V的电压,单节电压1.2V的镍氢电用5节串联起来,就组成了6V电池组刚好。
    而电车上,NiMh则是6节串联,成为7.2V电池组。也有一些大脚车是使用7节串联组成8.4V的。
LiFe使用场合目前不多,单节电压3.3V,多数为圆柱形,2S封装成6.6V的情形多见,主要用于遥控发射电,或者油车接受电。

本文重点介绍模型车上用的最广泛的LiPo 锂聚合物电池。

LiPo,全称Lithium-Polymer Battery,锂聚合物电池外壳为软包,由Li-ion锂离子电池进化而来。
    锂离子单节电压3.6V,由于活性太高,爆炸几率较大,目前已几乎让LiPo取代,现在我们手机使用的几乎都是LiPo。

电压:LiPo单节电芯标称电压为3.7V,充满电时,目前主流电芯均为4.2V单节,目前模型上高压电芯开始逐渐显现,高压电芯充满为4.35V单节。
    每节电芯的电压3.7V我们称之为1S,但是我们的车子往往3.7V是不够的,主流电池电压都是需要7.4V,于是把电芯串联起来,提高电压就行了。
    而多少S则是把多少个3.7V串联起来,电压就是3.7V乘以多少S,例如2S就是3.7*2=7.4V;3S就是3.7*3=11.1V,以此类推。

锂电池还涉及到封装的问题,买电池时会看到有些写着2S1P,有些写着2S2P,这又是什么意思呢?
    2S就是上面说过的了,2S=3.7*2=7.4V,那么2P又是什么呢?
    由于工艺/体积/成本等限制,每个电芯的容量有限,如何最简单地提升容量呢?就是把2个同型号的电芯并联起来,就是多少P的概念。
    例如2个电芯并联起来组成1个3.7V,就称之为2P;而假如用3个电芯并联起来组成一个3.7V,那么就是3P了。
    于是,2S2P,可以理解为有4个一样的电芯,先把其中2块并联起来,组成1S,然后把另外2块并联起来,组成另外1S,再把这2个1S串联起来,成为2S,这个电池就称为2S2P
    例如一个电芯只有3.7V,2000MAH,那么就可以通过2S2P的形式,组成7.4V 4000MAH的电池。
    至于购买时,我们是建议购买1P的产品,例如2S1P,3S1P之类的。这样的电池出现问题的几率相对低一些。但是对于一些极限顶级电池来说,可能没有1P的选择,因为1P受限于技术/工艺限制,未必做得出来。于是2P之类的就成为了不得已的选择。

容量:每个电池都有自己的额定容量,电池的容量就像汽车的油箱大小,容量越高,能使用的时间就越长,条件允许的情况下,当然是买容量大的。
    但是也不是必须都选择容量大的,因为有些时候我们会特意选择容量小的以对车架进行减重,提升车架性能。因为容量小意味着重量一般都会轻一些。

容量的鉴定:电池的容量,往往只是产品外壳的一个标签。实际里面有多少我们如何得知?
    有些玩家在使用电池后,拿电池进行充电,例如一个5000MAH的电池,玩完之后,一充,怎么只有3000MAH?
    这个未必是电池容量不足,这可能只是因为你只用掉了3000MAH而已。

    电池的容量,如上面所写,就像汽车的油缸,如果一个5000MAH的电池,你只用掉了3000MAH就拿去充电,那么你肯定只能充进去3000MAH。极端的例子就是假设你刚充满,用都没用,你又拿去充电,那么你可能只能充0MAH。

    容量的鉴定方法:需要一台带放电功能的充电器。先将电池充满电,然后使用充电器的放电功能,将放电截止电压设置为3.0V/cell(每节3.0V),然后开始放电。
        到放电完成,看充电器上显示放出了多少容量,基本就是电池容量的90~95%左右。很少可以达到100%,因为按照电池厂的正常标法,大部分都是指充满到2.75V/cell(单节2.75V)下测出的容量,加上电池用过之后都会有损耗。所以如果要测量电池容量,最好在新买的时候就测量。
        (充电器显示放出多少容量,最终也只能大概参考,因为充电器本身也未必100%准确,但是误差一般不会太大。如果经过这个方法测量的数值与你电池的标签相差太远,那么这个标签就是很有水份的了,一些杂牌常见。而好的品牌很少会这样砸自己招牌,所以好的品牌往往都会贵一些,因为不会怎么虚标)

放电C数:也就是放电能力。C数越大,表示电池能在越短的时间内放完自身的容量。
    1C,就是在1个小时内放完自身容量。多少C,就是在多少份之一的小时内放完自身容量。例如60C就是1/60小时,也就是1分钟内,放完自身容量。
    C数越大的电池,其性能越高,价格越贵。
    对于同一台车来说,C数大的电池,与C数小的电池使用上的区别是:C数越大,其起步越暴力,尾速高一些,电池玩完之后发热越小。

    如何鉴定电池C数:一般玩家没有办法鉴定,因此网上很多虚标的电池,就是冲着新手去的。那些便宜,容量大,C数高,却很便宜的电池,往往就是为新手准备。很简单:新手没用过好的电池,他们不知道有什么区别。
        以下是比较简单的(对比法)鉴定方法:使用大品牌的电池进行对比。同C数接近容量,操作的手法与动力相同的情况下,发热大的电池,C数低,发热小的电池C数高。如果某杂牌40C玩起来发热比一些大品牌的30C还要热,那么并不是这个大品牌故意标低C数,而是杂牌恶意标高C数而已。

    放电C数的小猫腻:正常品牌标C数,都是标电池能长期持续工作的C数。但是一些小品牌,可能会标瞬间电流(常见是持续3~5秒),瞬间电流往往能达到持续电流的1.5~2倍。玩家在选购时应该注意。

说完C数,说一下放电电流:C数可以理解为一个单位,并不是电流。电流还要跟容量搭配。C数乘以容量才是放电电流。
    例如5000MAH 30C的电池,其放电电流为5000*30=150000MA,也就是150A,同理,一个3000MAH 50C的电池,放电电流也是一样的,150A。区别是:3000MAH能用的时间会更短。

    有些玩家可能会问:我的电调只有120A,或者60A,我买个有150A电流的电池,我的电调会烧掉吗?答案当然不会了。你家外面的供电线动辄有几千千瓦,你的电脑可能只有300瓦,你把300瓦的电脑接到几千千瓦的线上,电脑有烧掉了吗?

    因此,电池的放电电流只是电池具备的能力,但是实际使用时,消耗的电流大小则是由电调和马达决定的。只要买比你电调和马达消耗的电流大的电池就可以了,大多少都可以,只要你资金足。

外形与尺寸:玩家只要按照自己的要求去购买对应尺寸和形状的就可以了。LiPo大部分都是长条形,但是有一些旧车型则是圆柱形的,那么只能选择镍氢电或者圆柱形容量较低的锂电型号。

插头类型:主流是T插头,田宫插,JST插头,XT60插头,JST插头,香蕉插头(99%的4MM香蕉插加1%的5MM香蕉插),其他如小田宫,XT90之类的也有,但相对很少
    插头的选择,就根据自己动力设备的插头去选择对应的就可以了,记住目前主流是T插,如买错插头,则会造成用电设备与电池无法连接。

关于LIPO电池的保养:
    为什么一些比赛玩家或者老手的电池怎么玩都不涨,新手的很容易就发涨了呢?
        可能的原因有:新手可能被误导或者被无良商家瞒骗买了虚标的产品,或者不懂搭配的商家给搭配了不符合使用条件的电池,甚至是玩家自己根本不懂然后乱买这几种情况,都可能造成电池发涨之类的问题。

    最大的原因在于:保养。

        主要有充电,使用,以及存放三种情况

        充电:锂电池,除1S外,2S及以上的电池,都一定要使用锂电平衡充电器,插上锂电上的白色平衡小插头,使用平衡充电模式。多个S的电池,多少都会因为生产时,造成每片电芯的容量会有少许误差,这些误差就会造成电池在用过之后,电压出现不平衡,少则0.01V,多则可能有1V之大,越好的电池,差别越小,越差的电池,差别越大。而锂电平衡冲,则是在充电时平衡电压,让电压高的不要超电压,让电压低的迅速补充电压。

            充电涉及到充电电流的问题,建议电流是电池容量的一半至2倍的电流为妥,也就是0.5C~2C之间,例如5000MAH的电池,0.5C就是5000*0.5=2500MA=2.5A,2C就是5000*2=10000MAH=10A,那么这个电池最好使用2.5A~10A之间的电流。完全不用担心电流大了对电池有什么负面影响,现在的大品牌电池随便都能支持5C~6C的电流,区区10A 8A对于好的电池来说根本微不足道。

        使用:使用时,无论何时,都一定要记得设置好锂电保护电压,不要让单节电芯的电压低于2.75V这个极限电压。低于这个电压,会对电池容量和放电能力产生负面影响。一般建议将锂电保护电压设置到3.0V~3.2V之间就可以了。多数电调的保护电压都是指电池在短时间内达到保护值,就会切断输出。因此电调保护之后,电压是会有回升的。假设设置了3.0V,保护之后我们测量电压可能有3.4V也不奇怪。
            网上一些玩家说电池电压不要低于3.7V,这个是毫无必要的。对于模型电池来说,因为C数大,容量大,其极限也更高,玩到3.0V每节对电池来说毫不足道。重点是后面说的存放。

        存放:存放状态对于一个电池来说至关重要。锂电不使用,或者不充电,都是处于存放状态,占一个电池寿命的最多时间。只要做到存放时,电池的单节电压处于3.85V左右,那么对电池来说就是最佳的。也就是说,如果你的电池不是在车上使用,也不是在充电器上充放电的时候,都要尽快让电池的电压变成3.85V每节,这样的电池寿命最长。
            尽快要多快?用完之后,等电池凉快了就充电到3.85V就可以了。然后到你下次要使用之前,再把电池充满。3.85V的电池要充满也很快的,不要贪方便提前一晚就充好电。可能你今晚充满的电池,到明天中午想用的时候,发现电池已经微涨了,也毫不奇怪的。
            但是如果我刚充满了,今天又不用了,怎么办?这还要问吗?马上放电啊,放到3.85V每节,然后等下次要使用的时候再充满吧。如果这点保养都做不好,那电池提前说88就不是电池的错了。

            友情提示:如果电池用完了,一定要记得从电调上拔掉插头哦,不然电调会偷偷的把电池的电压榨干的。

                如果不小心过放(电压低于2.75V)了咋办?如果充电器还能正常识别,那没问题,赶紧充到保存电压。但是如果充电器不认这个电池了,说电压低,那就要人肉加电压让电池起死回生了。操作方法:把锂电池的平衡插头不接到充电器,只接电池的正负极那2根粗线,然后用镍氢或者镍镉电模式,小电流冲几分钟,仔细看电压变化,当电压高于3V每节的时候(假如2S就是总6V),就可以用回正常的锂电平衡冲啦!
                    如果是简易平衡充电器,没有镍氢电模式,但是又无法识别了怎么办?那就要暴力加电压了。假设2S 7.4V的无法识别了,要让电池电压回升到6V以上,不超过8.4V,那么就找个直流电压器,电压在6~8.4V之间的,如果没有,就用几个五号电池串起来变成这个电压值,然后直接正极对正极,负极对负极接到你的锂电池上等片刻就OK了。注意正负极对准啊,接反后果不堪设想。

论坛也有些帖子,教导大家说锂电池新买的时候还要激活。其实这是毫无必要的,现在的锂电池容量大,C数高,寿命有限,每一次循环,就是电池少一次寿命。新到手的电池完全不会比所谓激活过的电池性能差。激活既无必要,又浪费时间。

帮助我每周五天学习Machine Learning的技巧

我每天学习 Machine Learning 9个月,然后找到了工作。怎么样?像这样…

男子戴着耳机,坐在电脑桌前

我退出了Apple。开始网络创业,失败了。我的心不在其中。

我想学习机器学习。它让我很兴奋。我要学习这一切。我不需要编写所有规则,机器会为我学习它。但我没有工作。

兴奋不会为事情付出代价。

我在周末开始驾驶优步来支付学费。

我喜欢结识新朋友,但我讨厌一直开车。交通,停止,启动,加油,我认为我有足够的燃料,空气,空调,换档,你不应该这样,你应该这样,所有这一切。

我研究过机器学习。一整天,一周五天。这很难。它仍然很难。

优步周末。本周机器学习。那是我的惯例。我必须学习。我必须学习这个,我不能继续开车,我不知道我的目标是什么,但我知道这不是开车。一个星期六晚上,我赚了280美元,罚款290美元。 – 晚上10美元。

在我自己创建的AI硕士学位 9个月后,我找到了一份工作。这是我有过的最好的工作。

我每天如何学习?

像这样。

1.减少搜索空间

机器学习很广泛。有代码,有数学,有概率,有统计数据,有数据,有算法。

并且不乏学习资源。拥有太多选项与没有选项相同。

如果你认真学习,那么就要为自己设置课程。 不要花费数周时间询问是否应该学习Python或R,而是选择Coursera或edX课程,从数学或代码开始,花一周时间计划一个粗略的计划,然后再遵循它。

对我来说,这是创建我自己的AI硕士学位。我决定先学习代码,Python就是我的语言。我搜索了不同的课程和书籍,并把我最感兴趣的书放在一起。我为每个人做的最好的道路是什么?可能不是。但这是我的,这就是为什么它有效。

一旦我有了课程,我就有了一条可以追随的道路,没有更多的浪费时间来决定什么是最好的方法。我可以起床,坐下来学习我需要(想要)学习的东西。

它也不严格。如果出现了引起我兴趣的事情,我会跟着它,并在我去的时候学习我需要的东西。

如果您是在线学习而不是通过大学学习,那么您应该走自己的路。

2.修复你的环境

你祖父的第一个橙色农场失败了。

土壤很好。种子在那里。所有设备也是如此。

发生了什么?

太冷了。橘子需要温暖的温度才能生长。你的祖父有种植橙子的技能,但他们没有机会在寒冷的气候中生长。

当他搬到一个温暖的城市时,他开始了另一个橙色农场。

12个月后,你的祖父正在镇上供应最好的橙汁。

学习就像种植橘子一样。

你可以拥有一台笔记本电脑,一个互联网连接,最好的书籍,但仍然没有动力去学习。

为什么?

因为你的环境已经关闭。

你的房间充满了分心。

你试着和朋友一起学习,但他们并不像你那样专注。

Whatsapp每7分钟一次。

你能做什么?

我把房间变成了一个研究天堂。清理它。把我的手机放在另一个房间的抽屉里,关掉所有地方的通知。

我告诉了我的朋友。我的电话一直持续到下午4点,我会跟你说话。他说没关系。

在朋友时间,朋友很棒,但学习时间是学习时间。没有你的手机不能一整天?试试一个小时。任何你看不到的抽屉都会起作用。请勿打扰默认。

修复您的环境,让知识流动。

3.设置系统,以便您始终获胜

问题13让我难过。我被卡住了。

我想昨天完成,但不能。

现在是时候学习,但我知道你昨天有多努力,无处可去。

我把它推迟了。我知道我应该读书。但是我把它推迟了。

这是一个循环。

Aghhhhhhh。我以前见过这个循环。我知道。但它仍然存在。

那堆书盯着我看。问题13.我设置了一个计时器。25分钟。我知道我可能无法解决问题,但我可以坐下25分钟尝试。

4分钟,这是地狱。燃烧地狱。我继续往前走。24分钟,我不想停下来。

计时器熄灭,我又设置了另一个。然后另一个。经过3次会议,我解决了这个问题。我告诉自己,我是世界上最好的工程师。这是谎言,但无关紧要。即使是一个小里程碑也是一个里程碑。

你不能总是控制你是否在学习上取得进步。但是你可以控制你花在一些东西上的时间。

可以控制:每天四个25分钟的会话。

无法控制:完成每天开始的每项任务。

设置系统,以便您始终获胜。

4.有时什么都不做

我得出结论。学习是最终的技能。如果我能学会更好地学习,我可以做得更好。我可以学习机器学习,我可以成为一个更好的程序员,我可以学习写得更好。我想,我必须改进我的学习。我立刻开始了。

我做了Coursera学习如何学习课程。其中一个主题是专注于扩散思维。

当你完成一项任务时,会集中思考

当你没有考虑任何事情时,就会出现分散思维

最好的学习发生在这两者的交叉。这就是为什么你在淋浴时有一些最好的想法。因为没有别的事情发生。

当你让分散的思维接管时,它会让你的大脑空间将所有吸收的东西联系在一起。

问题是,为了使它正常工作,你需要时间。

如果您已经设置了系统,那么您可以进行四次25分钟的重点工作,然后再去散步。小睡一会儿。坐下来思考你学到了什么。

一旦你开始不经常做任何事情,你会发现很多东西都是有价值的,因为空的空间。一个房间是四个围绕空间的墙,一个轮胎除了空气之外什么都没有,一艘船因空的空间而漂浮。

你的学习程序可以做更多的事情。

5.接受失败

学习很失败。

你学到了一件事,第二天就忘记了。

然后另一个忘了它。

另一个。

忘记了。

你整个周末都在学习,周一去上班,没有人知道。

有人问我如何深刻地记得书中的东西?我说我没有。如果我很幸运,我会记得我读过一本书的1%。当1%与另外1%的其他东西交叉时,神奇就会发生。这让我觉得自己像专家点连接器。

经过一年的学习,你会发现还有更多东西需要学习。

什么时候结束?

它没有。它总是第一天。

拥抱失败。

6.这个有3年历史的原则

前几天我在公园。

有一个小男孩跑来跑去度过他的生命。向上滑动,滑下,在树上,从树上,在泥土中,从泥土中,上山,下山。

他笑着跳起来然后又笑了起来。

他的妈妈过来接他。

“来吧,查理,我们得走了。”

当她把他带走时,他一直笑着挥舞着他的蓝色塑料铲。

是什么让他着迷?

他在玩。他很开心。整个世界都是新的。我们的文化在工作和娱乐之间存在严格的分歧。研究被认为是有效的。

你应该学习以获得更多的工作。你应该努力赚钱。这笔钱给你带来休闲时间。一旦你买了休闲时间,那么只有这样你才能像查理一样笑着跑来跑去。

如果你的头脑研究是有效的,那将是地狱。因为总有更多要学习。你知道它是怎么回事,所有工作都没有。

但是假设,你有学习的想法是经历一个主题然后到下一个主题的过程。

连接游戏等不同的东西。

如果你是查理走下幻灯片,你会开始对它有同样的感觉。

你学到了一件事,你用它来学习别的东西,你被卡住,你克服它,你学到了另一件事。然后你就跳出舞来吧。

我了解到,如果你有像表格,列或数据框架这样的结构化数据,像CatBoost,XGBoost和LightGBM这样的集合算法效果最好。对于非结构化数据,如图像,视频,自然语言和音频,深度学习和/或转移学习应该是您的首选模型。

我连接了点。我告诉自己我是专家点连接器。从点到下一个跳舞。

这样做,你将完成一个比你开始时更有活力的学习课程。

这是一个有3年历史的原则。把一切视为游戏。

这就足够了。

这是我睡觉的时间。

这是一个奖励。

7.睡觉

睡眠不好意味着学习不好。

你可能还不够。

我不是。驾驶优步的最佳资金是周五和周六晚上。人们出去吃饭,聚会,去夜总会,我没有,我开车。我要去,直到凌晨2点,凌晨3点,回家睡觉,直到太阳以7-8把我叫醒。我有两天的火车残骸。星期一会来,我会在不同的时区。周二变得更好,到了周三我回到了我需要的地方。那个周期将在周五重复。

这种破碎的睡眠时间表是不可接受的。我的目标是更好地学习。睡眠可以清洁大脑并使大脑中的新连接发生。我在晚上10点,晚上11点开车离开,回到家,得到了7-9个小时。更少的钱,更多的学习。

不要交换睡眠更多的学习时间。反其道而行之。

机器学习很广泛。

要好好学习,要好好学习,你需要提醒自己。

  • 减少搜索空间
  • 修复您的环境
  • 拥抱失败
  • 有时什么也不做
  • 将学习视为游戏
  • 良好的睡眠以便更好的学习

晚安。


有疑问或建议吗?我的Twitter DM是开放的。你也可以在mrdbourke.com上找到这样的帖子,以及我在YouTube上做这些事情的视频

PS如果你从这篇文章中获得了价值,你可能会喜欢这个视频。

关于自学机器学习的思考?提醒自己这6件事

我是一名自学成才的机器学习工程师,如果我重新开始,这就是我告诉自己的

我大部分自学的地方都在那里。照片来自:Daniel Bourke在YouTube上

视觉上学得更好?YouTube上有这篇文章的视频版本

我们在澳大利亚举办了一次关于机器人技术的聚会,这是一个问题时间。

有人问了一个问题。

“我如何从不同的背景进入人工智能和机器学习?”

尼克转身叫了我的名字。

“丹·伯克在哪里?”

我在后台与Alex交谈。我走了过来。

“他在这里,”尼克继续道,“Dan来自健康科学背景,他研究营养,然后驾驶Uber,在线学习机器学习,现在已经和Max Kelsen一起成为一年的机器学习工程师。”

尼克是布里斯班科技公司Max Kelsen的首席执行官兼联合创始人。

我站着不停地听着。

“他记录了他的在线旅程,如果你有任何问题,我相信他会很乐意提供帮助。”

问题结束了,我回到了食物。

Ankit过来了。他告诉我他正在努力利用机器学习来更好地理解学生学习的项目。他将讲座出勤率,在线学习门户上花费的时间,测验结果以及其他一些内容结合起来。他甚至建立了一个前端Web门户来与结果进行交互。

Ankit的作品激发了我的灵感。这让我想做得更好。

然后又有几个人开始过来并询问有关如何进入机器学习的问题。全部来自不同领域。

这是困难的部分。我仍然认为自己是初学者。

但最好的导师是在你面前1 – 2年的人。刚刚经历过你将要经历的事情的人。任何更长的时间,建议变得模糊。当它新鲜时你想要它。

我的兄弟正在进入机器学习。这就是我一直对他说的话(如果我重新开始的话,还有我自己)。

A)获得一些Python基础(3-4个月)

这种语言并不重要。它可能是R,Java,Python等等。重要的是挑选一个并坚持下去。

如果你刚开始,你会发现Python很难出错。

如果你想进入应用机器学习,代码是强制性的。

从网上挑选一个基础课程,并坚持几个月。奖励积分如果它同时适用于教授数据科学。DataCamp非常适合这种情况。

有时会变得很难,但这就是重点。学习编程语言就像学习另一种语言和另一种思维方式一样。

但你以前做过。记得你3岁的时候?可能不是。但是你身边的人都在使用你以前从未听过的文字和声音。过了一会儿,你也开始使用它们了。

B)当你还没有准备好时开始制作东西

尽快应用你所学到的知识。

无论你完成了多少门课程,你都永远不会100%准备好。

不要被引诱完成更多课程作为能力的标志。

如果我回去重新开始,这是我改变的一件事。

找到自己的项目,通过错误来学习和学习。

回到你3岁的自我。你说的每个第三个字都错了。没有句子结构,也没有语法。一切都刚刚出来。

C)那里有很多,所以减少杂乱

那里有很多课程。他们都很棒。

很难找到一个坏的。

但这就是事情。由于有这么多,很难选择。另一个可以阻挡你的陷阱。

为了解决这个问题,我获得了自己的AI硕士学位。我自己的定制跟踪。

如果需要,您可以复制它。但我鼓励你花几天时间研究自己,看看什么对你最好。

作为一个提醒,我发现的三个资源与我日常工作最相符的是,动手机器学习书fastai机器学习课程Coursera上应用数据科学与Python课程

在您有几个月的Python经验之后,为这些书签添加书签。

D)研究是必要的,但如果你不能应用它是毫无意义的

你会看到每天都有关于新机器学习方法的文章和论文。

别理他们。

没有办法跟上他们所有这一切,它只能阻止你回到基础设置。

大多数最好的机器学习技术已经存在了几十年。改变的是计算能力和数据可用性的增加。

不要被新的分心。

如果你刚开始,坚持先找到你的基础。然后根据您的项目需求扩展您的知识。

E)每天一点点

3岁你是一个学习机(机器学习者?)。

几年之后,你几乎没有言语,几十年来一直在说话的人。

怎么样?

因为你每天练习一点。

然后复利就开始了。

每天增加1%=年底增加3700%。

如果你错过了一天,无论如何,生活就会发生。尽可能恢复。

很快你就会开始讲数据语言了。

F)不要因为不知道某事而殴打自己

“你有没有建立过推荐引擎?”

“没有。”

“我们有一个项目需要一个作为概念证明,你认为你可以搞清楚吗?”

“当然。”

大多数人认为高中或大学后学习停止。它没有。

上面的情景发生在另一周。我从来没有建立过推荐引擎。然后我做了。

如果你以前做过的事情失败了,那么失败也不错。你一直在走路,但是当你自己绊倒时,你并没有打败自己。它发生了。你继续走路。

但是,在新事物上失败是很困难的。你以前从未这样做过。

学习机器学习类似这样。

第一年:你太烂了。

第二年:你比前一年好,但是你觉得你更糟糕,因为你意识到你有多少不知道。

第3年:???? (我不在那里)

拥抱吮吸。

不知道有什么东西可以帮助你学习更多东西会让自己多少钱?

零。

学习新东西需要时间。每一天都是第一天。

学习不是线性的。

你3岁的孩子如何反应不懂一个字?

你笑了 把手放在空中,然后爬一会儿。

现在一样。除了你可以走路。

¹如果没有所有创造过课程并分享他们所学知识的优秀人才,我所做的所有工作和我所学到的东西都是不可能实现的。

有更多问题吗?在TwitterLinkedInYouTube上联系

这篇文章最初作为Quora的答案出现。

DeepPiCar2:Raspberry Pi设置和PiCar组装

组装PiCar硬件并安装所有软件驱动程序。让它在客厅里运行

执行摘要

欢迎回来!在本指南中,我们将首先介绍要购买的硬件以及我们需要它们的原因。接下来,我们将对它们进行设置,以便在本文末尾我们将在客厅中运行PiCar。

硬件供应清单

  • 1 x Raspberry Pi 3型号B +套件,带2.5A电源(50美元)这是DeepPiCar的大脑。这款最新型号的Raspberry Pi配备1.4Ghz 64位四核处理器,双频wifi,蓝牙,4个USB端口和一个HDMI端口。我推荐这个套件(仅在Raspberry Pi板上),因为它带有一个电源适配器,你需要在进行非驱动编码和测试时插入,以及两个芯片散热器,这将阻止你的Raspberry Pi CPU过热。
  • 1 x 64 GB micro SD卡(8美元)这是Raspberry Pi操作系统和我们所有软件的存储位置。任何品牌的micro SD卡都应该可以正常工作。你可能只有一个人躺在你的房子周围。32GB也应该没问题。我选择了64 GB,因为我计划在我的汽车行驶时记录大量视频,以便稍后分析其行为,并使用视频在以后的项目中进行深度学习培训。
  • 1 x SunFounder PiCar-V套件(115美元)这是DeepPiCar的主体。确保你得到如上所示的Model V(又名Version 2.0)。除了Raspberry Pi和电池外,它还配备了机器人汽车所需的一切。市场上有很多Raspberry Pi车载套件,我之所以选择这款车载套件是因为它配备了开源python API来控制汽车,而其他供应商则拥有其专有的API或基于C的API。众所周知,python现在是机器学习和深度学习的首选语言。此外,开源很重要,因为如果我们发现API中的错误而不必等待制造商提供软件更新,我们可能会自己修改汽车API的内部。
  • 4 x 18650电池和1 x电池充电器(20美元)您可以获得任何18650电池和兼容充电器。这些电池适用于高耗电应用,例如驱动Raspberry Pi板和PiCar。PiCar只需要两个电池,但你总是想要另外一对新电池,这样你就可以随时保持你的车在轨道上运行。我建议晚上给两套充电,这样你就不必担心测试过程中电池没电了。
  • 1个Google Edge TPU USB加速器(75美元)每个英雄都需要一个伙伴。谷歌的边缘TPU(Edge意味着它适用于移动和嵌入式设备,而TPU代表Tensor处理单元)是Raspberry Pi板的绝佳附件。虽然Pi CPU在很小的捆绑中包含了大量的计算能力,但它并不是为深度学习而设计的。另一方面,Google新发布的Edge TPU(2019年3月)专门用于运行用TensorFlow编写的深度学习模型。在本系列的第6部分中,我们将在TensorFlow中构建一个实时交通标志检测模型。这个模型深200多层!仅在Raspberry Pi的CPU上运行此模型只能处理每秒1帧(FPS),这几乎不是实时的。此外,它消耗100%的CPU并使所有其他程序无响应。但在Edge TPU的帮助下,我们现在可以处理12个FPS,这对于实时工作来说已经足够了。我们的CPU保持冷却,可用于执行其他处理任务,如控制汽车。
  • 套迷你交通标志(15美元)和一些乐高小雕像。如果您的年轻人在游戏室中有一些玩具标志和乐高小雕像,您可能不需要购买它们。你可以使用你发现的任何标志来训练模型,只要确保它们不是太大了
  • (可选)1 x 170度广角USB相机(40美元)。这是一个可选配件。我买了它来取代SunFounder PiCar附带的相机,这样汽车就可以拥有广阔的视野。相机很棒,但不像我喜欢的广角,它不能看到前轮前面3-4英寸的车道线。我最初使用相机拍摄了第4部分中的代码。在尝试了几个镜头后,我发现这款广角相机的精度和稳定性大大提高了。控制硬件和软件(与在汽车模拟器中运行汽车相比)是很好的,因为如果单独通过软件无法轻易解决问题,您可以采用硬件修复。
  • USB键盘/鼠标和带HDMI输入的显示器。在Pi的初始设置阶段,您只需要这些。之后,我们可以通过VNC或Putty远程控制Pi。
  • 运行Windows / Mac或Linux的台式机或笔记本电脑,我将在此处称之为“PC”。我们将使用此PC远程访问并将代码部署到Pi计算机。

有时候,我的惊喜是Raspberry Pi,我们汽车的大脑只有30美元左右,比我们的许多其他配件便宜。事实上,随着时间的推移,硬件变得越来越便宜,而且软件完全免费且丰富。难道我们不是生活在一个伟大的时代吗?!

这是组装完成后的最终产品。我在这里使用广角相机。

Raspberry Pi设置

Raspberry Pi操作系统设置(1小时)

  • 按照这个优秀的分步指南,将NOOBS Raspbian操作系统(各种Linux)安装到micro SD卡上。它需要大约20分钟和大约4GB的磁盘空间。安装并重新启动后,您应该看到如下所示的完整GUI桌面。这感觉就像你在Windows或Mac GUI环境中,不是吗?
  • 在安装过程中,Pi会要求您更改默认用户的密码pirasp例如,我们将密码设置为。
  • 初始安装后,Pi可能需要升级到最新的软件。这可能需要10-15分钟。

设置远程访问

设置远程访问允许Pi计算机无头运行(即没有显示器/键盘/鼠标),这使我们无需一直连接显示器和键盘/鼠标。该视频提供了有关如何设置SSH和VNC远程访问的非常好的教程。无论如何,这是步骤。

  • 打开终端应用程序,如下所示。终端应用程序是一个非常重要的程序,因为后面文章中的大多数命令都将从终端输入。
  • 通过运行找到Pi的IP地址ifconfig。在这种情况下,我的Pi的IP地址是192.168.1.120
pi @ raspberrypi:〜$ ifconfig | grep wlan0 -A1
wlan0:flags = 4163 <UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.120 netmask 255.255.255.0 broadcast 192.168.1.255
  • sudo raspi-config在终端中运行以启动“Raspberry Pi软件配置工具”。系统可能会提示您输入用户密码pi
  • 启用S​​SH服务器:选择5. Interface Options– > SSH– >Enable
  • 启用VNC服务器:选择5. Interface Options– > VNC– >Enable
  • 下载RealVNC Viewer并将其安装到您的PC上。
  • 使用Real VNC Viewer连接到Pi的IP地址。您将看到与Pi正在运行的桌面相同的桌面。
  • 此时,您可以安全地断开显示器/键盘/鼠标与Pi计算机的连接,只需插入电源适配器即可。

设置远程文件访问

由于我们的Pi将无头运行,我们希望能够从远程计算机访问Pi的文件系统,以便我们可以轻松地将文件传输到Pi计算机或从Pi计算机传输文件。我们将在Pi上安装Samba文件服务器。

pi @ raspberrypi:〜$ sudo apt-get update && sudo apt-get upgrade -y
获取:1 http://archive.raspberrypi.org/debian stretch InRelease [25.4 kB] 
软件包[45.0 kB] 
[省略...] 
解压缩lxplug-ptbatt(0.5)over(0.4)... 
设置lxplug-ptbatt(0.5)... 
pi @ 




raspberrypi :〜$ sudo apt-get install samba samba-common-bin -y读取包列表...完成构建依赖树        [省略...] 处理libc-bin的触发器(2.24-11 + deb9u4)... 处理触发器为systemd(232-25 + deb9u11)... pi @ raspberrypi :〜$ sudo rm / etc /samba/smb.conf pi @ raspberrypi:〜$ sudo nano /etc/samba/smb.conf

然后将以下行粘贴到nano编辑器中

[global] 
netbios name = Pi
服务器字符串= PiCar文件系统
工作组= WORKGROUP

[HOMEPI]
路径= / home / pi
comment =无评论
browsable = yes
writable =是
创建掩码= 0777
目录掩码= 0777
public = no

通过Ctrl-X保存并退出nano,单击是以保存更改。

然后设置Samba服务器密码。为简单起见,我们将使用与raspSamba服务器密码相同的内容。设置密码后,重新启动Samba服务器。

#create samba密码
pi @ raspberrypi:〜$ sudo smbpasswd -a pi
新的SMB密码:
重新输入新的SMB密码:
添加了用户pi。#re restart samba server
pi @ raspberrypi:〜$ sudo service smbd restart

此时,您应该能够通过Pi的IP地址(My Pi的IP为192.168.1.120)从PC连接到Pi计算机。转到您的PC(Windows),打开命令提示符(cmd.exe)并键入:

#将Pi主目录挂载到R:PC上的驱动器
C:> net use r:\ 192.168.1.120 homepi
命令成功完成。
C: Users dctia> r:C:> dir r:
驱动器R中的
卷是HOMEPI 卷序列号是61E3-70FF 目录R: 05/02/2019 03:57 PM <DIR>。
04/08/2019 04:48 AM <DIR> ..
04/08/2019 05:43 AM <DIR> Desktop
04/08/2019 05:43 AM <DIR> Documents
04/08/2019 05:43 AM < DIR>下载
04/08/2019 05:15 AM <DIR> MagPi
04/08/2019 05:43 AM <DIR> Music
05/02/2019 03:43 PM <DIR>图片
04/08/2019 05:43 AM <DIR> Public
04/08/2019 05:43 AM <DIR>模板
04/08/2019 05:43 AM <DIR>视频
0文件0字节
11 Dir(s )22,864,379,904字节免费

事实上,这是我们的Pi计算机文件系统,我们可以从它的文件管理器中看到。这将非常有用,因为我们可以直接从我们的PC编辑驻留在Pi上的文件。例如,我们可以使用PyCharm IDE首先在Pi上编辑Python程序,然后使用Pi的终端(通过VNC)来运行这些程序。

如果你有一台Mac,这里是如何连接到Pi的文件服务器。按Command-K打开“连接到服务器”窗口。输入网络驱动器路径(替换为Pi的IP地址),即smb://192.168.1.120/homepi,然后单击“连接”。输入登录名/密码,即pi / rasp,然后单击“确定”以安装网络驱动器。然后,驱动器现在将显示在桌面和Finder窗口侧栏中。有关Mac上更深入的网络连接说明,请查看此优秀文章

安装USB摄像头

USB摄像头的设备驱动程序应该已经配备了Raspian OS。我们将安装摄像机查看器,以便我们可以看到实时视频。

  • 将USB相机从PiCar套件中取出并插入Pi计算机的USB端口
  • sudo apt-get install cheese从终端运行安装“奶酪”,相机查看器。
pi @ raspberrypi:〜$ sudo apt-get install cheese -y
读取包列表...完成
构建依赖关系树
读取状态信息...完成
....
cheese是最新版本(3.22.1-1)。
  • 通过Raspberry Pi button(Top Left Corner)– > Sound & Video– > 启动奶酪应用程序Cheese您应该看到如上图所示的实时视频源。

SunFounder PiCar-V软件配置(偏离手册)

在组装PiCar之前,我们需要安装PiCar的python API。SunFounder发布了其Python API的服务器版本和客户端版本。客户端API代码用于远程控制PiCar,在您的PC上运行,它使用Python版本3.服务器API代码在PiCar上运行,遗憾的是,它使用的是Python版本2,这是一个过时的版本。由于我们编写的自驱动程序将专门在PiCar上运行,因此PiCar Server API也必须在Python 3中运行。幸运的是,SunFounder的所有API代码都是Github上的开源代码,我制作了一个分支并将整个仓库(服务器和客户端)更新为Python 3.(我将很快将我的更改提交给SunFounder,因此它可以合并回到主要回购,一经SunFounder批准。)

暂时,运行以下命令(粗体),而不是SunFounder手册中的软件命令。您不必在本手册的第20-26页上运行命令。

#将所有对python(版本2)的调用路由到python3,
#pip(版本2)到pip3,即使在sudo模式下
#note:`sudo abcd`在管理员模式下运行`abcd`命令
alias python = python3
alias pip = pip3
alias sudo ='sudo'
#下载修补的PiCar-V驱动程序API,并运行它的设置
pi @ raspberrypi :〜$ cd pi @ raspberrypi:〜$ git clone https://github.com/dctian/SunFounder_PiCar.git
克隆到' SunFounder_PiCar'...
remote:枚举对象:9,完成。
remote:计数对象:100%(9/9),完成。
remote:压缩对象:100%(9/9),完成。
remote:总计276(delta 0),重用2(delta 0),pack-reused 267
接收物体:100%(276/276),53.33 KiB | 0字节/秒,完成。
解决增量:100%(171/171),完成。
pi @ raspberrypi:〜$ cd~ / SunFounder_PiCar / picar /

pi @ raspberrypi:〜/ SunFounder_PiCar / picar $ git clone https://github.com/dctian/SunFounder_PCA9685.git
克隆到'SunFounder_PCA9685'...
remote:枚举对象:7,完成了。
remote:计数对象:100%(7/7),完成。
remote:压缩对象:100%(5/5),完成。
远程:总计87(delta 2),重用6(delta 2),pack-
reused 80 Unpacking对象:100%(87/87),完成。pi @ raspberrypi:〜/ SunFounder_PiCar / picar $ cd~ / SunFounder_PiCar /
pi @ raspberrypi:〜/ SunFounder_PiCar $ sudo python setup.py install
将SunFounder-PiCar 1.0.1添加到easy-install.pth文件
中将picar脚本安装到/ usr / local / bin
[省略....] #下载修补后的PiCar-V应用程序
#并安装相关软件
pi @ raspberrypi:〜/ SunFounder_PiCar / picar $ cd
pi @ raspberrypi :〜$ git clone https://github.com/dctian/SunFounder_PiCar-V.git
克隆到'SunFounder_PiCar-V'...
remote:枚举对象:969,完成。
remote:总计969(delta 0),重用0(delta 0),pack-
reused 969 接收对象:100%(969/969),9.46 MiB | 849.00 KiB / s,完成。
解决增量:100%(432/432),完成。pi @ raspberrypi:〜$ cd SunFounder_PiCar -V pi @ raspberrypi:〜/ SunFounder_PiCar-V $sudo ./install_dependencies
将sunFounder-PiCar 1.0.1添加到easy-install.pth文件
中将picar脚本安装到/ usr / local / bin 安装/usr/local/lib/python2.7/dist-packages/SunFounder_PiCar-1.0.1- py2.7.egg
处理SunFounder-PiCar的依赖关系== 1.0.1
完成SunFounder-PiCar的处理依赖关系== 1.0.1
完成
将MJPG-Streamer复制到备用位置。完成
Enalbe I2C。完成安装结果:
django成功
python-smbus成功
python-opencv成功
libjpeg8-dev成功
你需要更改的东西可能需要重启才能生效。
你想立即重启吗?(是/否)是的

回答是,提示重启时。重新启动后,应安装所有必需的硬件驱动程序。我们将在汽车装配后测试它们。

PiCar大会

装配过程密切重新组装构建复杂的乐高套装,整个过程大约需要2个小时,手眼协调很多,并且很有趣。(您甚至可能在施工阶段让您的年轻人参与其中。)PiCar Kit附带一份印刷的逐步说明手册。但我推荐这两个额外的资源。

  • 教学手册的PDF版本。打印手册很小,图表可能打印得不是很清楚,而PDF版本非常清晰,可以搜索和放大以获得更多细节。我发现在组装阶段我的笔记本电脑上的PDF非常有帮助。
  • 由SunFounder发布的YouTube 4部分教学视频。不幸的是,这些视频适用于较旧版本的PiCar,因此某些部件(如伺服电机组件)不同。但大多数零件和装配技术都是一样的。因此,如果您对装配手册中的特定图表感到头疼,您可能需要查看视频的相关部分。我希望SunFounder能够为新的PiCar-V套件发布一组新的视频。

旧版PiCar的装配视频(4个部分),一个有用的参考

当橡胶遇上这条路!

现在PiCar的所有基本硬件和软件都已到位,让我们尝试运行它!

  • 通过VNC从PC连接到PiCar
  • 确保有新电池,将开关拨到ON位置并拔下micro USB充电线。请注意,您的VNC远程会话应该仍然有效。
  • 在Pi终端中,运行以下命令(以粗体显示)。你应该:
  1. 看到汽车行驶得更快,然后发出时减速 picar.back_wheel.test()
  2. 当发出时,看到前轮转向左,中间和右侧picar.front_wheel.test()。要停止这些测试,请按Ctrl-C。要退出python程序,请按Ctrl-D。
pi @ raspberrypi:〜/ SunFounder_PiCar / picar $ python3 
Python 3.5.3(默认,2018年9月27日,17:25:39)
[GCC 6.3.0 20170516]关于linux输入
“help”,“copyright”,“credits”或“许可证”了解更多信息。>>> 导入picar
>>> picar.setup() >>> picar.front_wheels.test()
DEBUG“front_wheels.py”:设置调试关闭
DEBUG“front_wheels.py”:设置轮调试关闭
DEBUG“Servo.py” :设置调试关闭
turn_left
turn_straight
turn_right >>> picar.back_wheels.test()
DEBUG“back_wheels.py”:设置调试关闭
DEBUG“TB6612.py”:

DEBUG“PCA9685.py”:设置调试关闭
前进,速度= 0
前进,速度= 1
前进,速度= 2
前进,速度= 3
前进,速度= 4
前进,速度= 5
前进,速度= 6
前进,速度= 7
前进,速度= 8
前进,速度= 9
前进,速度= 10
前进,速度= 11
  • 如果您遇到错误或看不到车轮移动,那么您的硬件连接或软件设置有问题。对于前者,请仔细检查您的电线连接,确保电池充满电。对于后者,请在评论部分发布一条消息,其中包含您遵循的详细步骤和错误消息,我将尽力提供帮助。

下一步是什么

恭喜你,你现在应该有一个PiCar,可以看到(通过奶酪),并运行(通过python 3代码)!它还不是一款深度学习车,但我们正在努力实现这一目标。每当你准备好的时候,请继续前进到第3部分,在那里我们将为PiCar提供计算机视觉和深度学习的超级大国。

以下是整个指南的链接:

第1部分:概述

第2部分:Raspberry Pi设置和PiCar组装(本文)

第3部分:让PiCar看到并思考

第4部分:通过OpenCV进行自主车道导航

第5部分:通过深度学习进行自主车道导航

第6部分:交通标志和行人检测和处理