JetBot 系列教程之自主避障

来自Waveshare Wiki
跳转至: 导航搜索

JetBot 例程使用教程

Collision-avoidance文件

  • 这里使用NVIDAI JetBot开源项目的collision-avoidance例程。JetBot 的自主避障功能分为三个步骤:收集数据,训练模型和自主避障

收集数据

  • 打开Notebooks/collision_avoidance/ 目录下的data_collection.ipynb文件
Jetbot web1.png
  • 创建摄像头连接,将摄像头画面显示在网页上,注意不要修改摄像头的分辨率设置
Jetbot web2.png
  • 创建一个dataset目录,用来存放我们接下来收集的图片。dataset目录下创建两个文件夹,分别是blocked和free。blocked文件夹将用来存放避障场景图片,而free文件将用来存放畅通场景图片。这里使用一个try/except的结构来避开文件覆盖,如果路径下已经有了这两个文件夹,程序会报错说文件夹已经存在了,并不会覆盖掉老的目录
Jetbot webs3.png
  • 创建两个按钮和两个显示框,按钮用来操作添加避障场景图片和畅通场景图片的。显示框分别显示的是当前已存放的图片数量,如果你是第一次运行脚本,那你的图片数量应该都是0。不用使劲按按钮,这里的按钮只是用来演示,还没有实际效果
Jetbotweb webs4.png
  • 编写按钮关联函数。其中,save_snapshot(directory), 这个函数是用来保存图片,会被按键触发程序调用,函数将当前的摄像头图像保存到对应的路径下;save_free()函数,对应到上面的add free 绿色按钮,函数中调用保存图片函数,将当前摄像头图像保存到free文件夹中,并更新free的图片数量;save_blocked()函数是将当前的图像保存到blocked文件夹中,并更新图片数量。
Jetbot webs5.png
  • 现在,可以收集避障场景和畅通场景图。当遇到障碍物小车需要转弯时,可以按add blocked红色按键,在畅通场景中按add free绿色按钮;至少各收集100张以上避障图和畅通图片
Jetbot webs6.png
  • 将收集的图片打包压缩
Jetbot webs7.png

模型训练

  • 打开Notebooks/collision_avoidance/train_model.ipynb文件
  • 导入PyTorch函数库。PyTorch是比较通用的一个深度学习库,有兴趣的伙伴可以自行百度或者谷歌了解
Jetbot webs8.png
  • 将数据包解压。注意:如果你是跟我一样在同个小车上做的模型训练,请直接跳过该步骤,因为你的数据已经是保存在当前的目录下,如果再运行下图程序,会一直卡住;如果你是在不同的小车上做的训练的话,你需要把你之前收集打包的那个数据包复制到当前的目录下,然后再运行下图程序去解压出来
Jetbot webs9.png
  • 使用ImgeFolder类,将我们的数据包转化,方便后面做训练
Jetbot webs10.png
  • 将数据包分成两组,分别是训练组和测试组. 测试组用来验证模型的精确度
Jetbot webs11.png
  • 创建两个实例,用于后面混排数据并生成图片
Jetbot webs12.png
  • 定义神经网络。在转移学习(transfer learning)中,我们可以使用预训练的模型来训练新的任务,这样我们可以直接使用预训练的模型中一些已经学习到的功能,然后训练新的任务,这样会节省很多功夫。总结来说呢,就是好比教导一个中学生高中知识,会比教导一个小学知识都没有的小孩子高中知识会来得简单和快速的道理一样
Jetbot webs13.png
  • 使用下载的模型对结果判定:避障和直行。即需要两个label标签
  • 将模型转换,以便于在GPU上运行
Jetbot webs14.png
  • 模型训练。对模型进行30组训练,训练结束之后会生成一个best_model.pth的模型文件。等待训练完成即可
Jetbot webs15.png


自主避障

  • 通过上述训练得到模型后,我们开始进行避障测试
  • 打开Notebooks/collision_avoidance路径下的live_demo.ipynb文件。初始化PyTorch模型
Jetbot PyTorch.png
  • 加载前面训练好的模型文件
Jetbot webs16.png
  • 将模型加载到CPU内存,准备传入GPU设备中做计算
Jetbot webs17.png
  • 处理摄像头图像数据,便于后面做运算
Jetbot webs18.png
  • 将摄像头图像显示在网页上,并同时用一个滑动条来显示当前图片的避障值
Jetbot webs19.png
  • 调用Robot库,准备小车的运动
Jetbot webs20.png
  • 根据避障值,来操作小车是直行还是转弯(避障)。如果你在做避障的时候,觉得小车速度太快可以降低robot.forward()里面的参数值来降低小车的前行速度,降低robot.left()里面的参数值来降低小车的转弯幅度
Jetbot webs21.png
  • 实时更新摄像头数据,便于观察。
Jetbot webs22.png
  • 如果你的小车运行不正常,或者你想要停下小车,可以接着运行
Jetbot webs23.png