BEGIN
引入GPIO庫
將GPIO19設置爲輸出模式
創建PWM對象,並指定初始頻率
啓動PWM,並指定初始佔空比
等待輸入新PWM頻率
將PWM的頻率修改爲新頻率
DO FOREVER
等待輸入新LED亮度(PWM佔空比)
改變LED亮度(PWM佔空比)
ENDO
停止PWM
清理釋放GPIO資源
END
6.3.2 程序代碼
按照第4章介紹的方法新建一個項目,然後按照第五章的方法輸入運行以下代碼,程序的詳細說明見註釋。
import RPi.GPIO as GPIO # 引入GPIO模塊
if __name__ == '__main__':
LedPin = 19
freq = 100 # 存放PWM頻率變量,這裏初始值爲100,可以根據實際需要修改
dc = 0 # 存放PWM佔空比變量,這裏初始值爲0,可以根據實際需要修改
GPIO.setmode(GPIO.BCM) # 使用BCM編號方式
GPIO.setup(LedPin, GPIO.OUT) # 將GPIO19設置爲輸出模式
pwm = GPIO.PWM(LedPin, freq) # 創建PWM對象,並指定初始頻率
pwm.start(dc) # 啓動PWM,並指定初始佔空比
try:
freq = int(input("Please input the frequency of PWM(1-2000Hz): ")) # 等待輸入新PWM頻率
pwm.ChangeFrequency(freq) # 改變PWM頻率
while True:
dc = int(input("Please input the duty cycle(0-100): ")) # 等待輸入新PWM佔空比
pwm.ChangeDutyCycle(dc) # 改變PWM佔空比
finally:
pwm.stop() # 停止PWM
GPIO.cleanup() # 清理釋放GPIO資源,將GPIO復位
开发软件一般需要一个程序运行环境和一个集成开发环境(Integrated Development Environment,IDE)。Raspbian系统默认已经提供了Python 2和Python 3的运行环境,选择一款优秀的IDE,并采用合适的开发方法将有助于提高开发效率。本章将介绍一种Windows下远程开发树莓派程序的方法,主要内容如下:
Raspbian Stretch Lite 树莓派官网提供了NOOBS和Raspbian两个官方的操作系统镜像。NOOBS的全称为New Out Of Box System(全新开箱即用系统),实际上是一个图形化的操作系统安装工具,其中NOOBS自带完整版的Raspbian,而NOOBS Lite则仅仅是NOOBS本身,您只要在NOOBS中选择想要安装的系统,它就会自动下载安装。Raspbian才是树莓派官方真正的操作系统,基于Debian系统定制,官方提供了Raspbian Stretch with desktop and recommended software、Raspbian Stretch with desktop和Raspbian Stretch Lite三个版本的镜像,“Stretch”是Debian系统的版本代号,其中“Raspbian Stretch with desktop and recommended software”带有图形界面和一些推荐的应用软件,“Raspbian Stretch with desktop”仅提供图形界面,“Raspbian Stretch Lite”则仅提供命令行界面。由于NOOBS和系统安装包会占用一定的存储空间,且安装操作系统的时候需要外接显示器,因此NOOBS并不是最好的选择。另外,按照“简单”的原则,我们选择使用最为精简的Raspbian Stretch Lite版本,使用过程中再按需手工安装相应软件。 下载地址:https://www.raspberrypi.org/downloads/
Etcher Etcher是一款免费的U盘镜像制作工具,可以将镜像刻录到U盘,我们将用它将Raspbian系统安装到MicroSD卡上。类似的软件还有Win32 Disk Imager等,您可以根据习惯选择。 下载地址:https://www.balena.io/etcher/
网络扫描法 如图3.2所示,运行Advanced IP Scanner设置要扫描的地址范围,软件会自动识别出您的电脑所在的网段,您也可以根据实际修改,然后点击扫描(Scan)开始扫描,根据网络的规模和速率的不同,扫描的时间也会有所不同。扫描结束后,我们从结果中要到制造商(Manufacturer)为“Raspberry Pi Foundation”就是您的树莓派的网络信息,从中可以找到树莓派的IP地址。 图 3.2 获取树莓派网络信息
树莓派(Raspberry Pi,RasPi/RPi)是由英国的慈善组织“Raspberry Pi 基金会”开发,基于ARM的微型电脑主板,只有信用卡大小,但却具备一部个人计算机的基本功能。基金会开发树莓派的最初目的是为了提升学校计算机科学及相关学科的教学水平,培养青少年的计算机程序设计兴趣和能力,同时期望能有更多的应用被不断开发出来,并应用到更多领域。然而,树莓派自问世以来就受到众多计算机发烧友和创客的追捧,曾经一“派”难求。目前,具有树莓派生产许可的制造商主要有:
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.
模拟器中共有三个场景,但是网站【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/】上的解释: 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.
最后的安装 有了 sd 卡启动盘,插到 raspberry pi 板子上。通电启动就会进入系统安装界面,跟普通的 ubuntu 系统安装流程类似,不再赘述。
从 sd 卡启动是树莓派的标配,不过也可以从 USB 盘启动。基本方法也是通过 Etcher 将系统镜像文件写入 USB 盘。具体操作可以参考这里。对于最新版的树莓派 3B+,启动的时候只需要 USB 盘,对于旧版的树莓派,还需要 sd 卡做一下引导。 用 USB 做系统盘的好处是存储容量可能比 sd 卡大一些,缺点是暴露在外边,不小心碰到了就可能直接关机了。