【JetRacer AI Kit 鼓捣记 (无界面版)】


在这里插入图片描述

JetRacer AI Kit的全车组装及测试

JetRacer AI Kit小车套件主要由一个 Jetson Nano开发板、高清摄像头、舵机、电机、阿克曼转向结构、jetracer扩展板、锂电池组、网卡和天线组成。
在这里插入图片描述

整体流程

JetRacer AI Kit
组装小车
安装镜像
电机驱动
远程遥控
数据采集
自主巡线

组装小车

这里就不再赘述如何组装小车了,详情请参考微雪官网: link.

安装镜像

Jetson Nano是一款形状、外接口类似于树莓派的嵌入式主板,搭载了四核Cortex-A57处理器,GPU则是拥有128个NVIDIA CUDA核心的NVIDIA Maxwell架构显卡,内存为4GB的LPDDR4,存储则为16GB eMMC 5.1,支持4K 60Hz视频解码。
(一)准备工作
一张SD卡(最好是64G起步)、读卡器,电脑
(二)开始安装

  1. 下载官方(注:这里是无界面版本镜像)JetRacer- AI-Kit-WS(62G)镜像下载地址如下链接 将SD卡插入电脑中
  2. 使用Etcher软件(或者win32 disk imager),解压.img文件,烧写至SD卡上。 在这里插入图片描述 link 提取码:1111
  3. 将烧写好的SD卡插入Jetson Nano开发板里(位置
    在开发板的底部
    在这里插入图片描述
  4. 开机启动小车(这里没有采用官网的USB来连接,因为将小车连接到电脑上无法获取IP地址),这里我采用的是使用网线连接,并将电脑连接到同一个网络
    下,使两个设备处于同一个网段下。
    这时小车会获取到一个IP地址192.168.137.216(这里的IP地址是会变化),并使用电脑打开浏览器导航到192.168.137.216:8888,使用密码:jetson
    在这里插入图片描述
  5. 把小车设置成无线的(即开机自动连接wifi获取IP地址)
    这里说明一下(其镜像是基于linux制作的)所以其操作跟linux中是一样的。
    打开终端:
    1.查看网络列表
    $ sudo nmcli dev
    注意,如果列出的设备状态是 unmanaged 的,说明网络设备不受 NetworkManager管理,你需要清空 /etc/network/interfaces下的网络设置,然后重启.
    2.开启WiFi
    $ sudo nmcli r wifi on
    3.扫描附近的 WiFi 热点
    $ sudo nmcli dev wifi
    4.连接到指定的 WiFi 热点
    $ sudo nmcli dev wifi connect "SSID" password "PASSWORD" ifname wlan0
    6.断电重启Jetson Nano,正常启动之后再OLED屏幕上回显示有小车的IP地址,使用IP地址+:8888来连接小车登录Jupyter Lab
    在这里插入图片描述
    7.配置电源工作模式
    注:为了防止Jetson Nano开发板过度好点(毕竟锂电池组的电量还要供小车跑起来的功耗)
    1.这里设置为5W模式
    sudo nvpmodel -m1
    2.检查是否设置成功
    nvpmodel -q
    3.OLED上会显示5W

在这里插入图片描述

配置开发环境

安装并更新JetCard Python包(这里参考B站link)
在这里插入图片描述

  • 更新安装Jetcard Python包
    mkdir ws 
    cd ws 
    git clone https://ghproxy.com/https://github.com/waveshare/jetcard 
    cp jetcard/jetcard/ads1115.py ~/jetcard/jetcard/ 
    cp jetcard/jetcard/ina219.py ~/jetcard/jetcard/ 
    cp jetcard/jetcard/display_server.py ~/jetcard/jetcard/ 
    cp jetcard/jetcard/stats.py ~/jetcard/jetcard/ 
    cd ~/jetcard 
    sudo pip3 uninstall jetcard -y 
    sudo reboot  #重启 
    cd ~/jetcard 
    sudo python3 setup.py install
    
    2.安装JetCam Python包
    cd
    git clone https://github.com/NVIDIA-AI-IOT/jetcam 
    cd jetcam 
    sudo python3 setup.py install 
    
    3.安装torch2trt Python包
    cd $HOME 
    git clone https://ghproxy.com/https://github.com/NVIDIA-AI-IOT/torch2trt 
    cd torch2trt
    sudo python3 setup.py install  
    
    4.安装JetRacer软件包
    cd $HOME 
    git clone -b ws/pro https://github.com/waveshare/jetracer 
    cd jetracer 
    sudo python3 setup.py install
    
    到这里就配置好python环境了

电机驱动

在浏览器地址栏输入IP地址+:8888连接到小车,左侧打开/jetracer/notebooks/。打开basic_motion.ipynb文件 带有lpynb后缀的文件为Jupyter Notebook文件,包括注释文本和python程序。可以通过点击Run->Run Select Cells或者点击运行快捷图标▶来运行单段程序。
在这里插入图片描述
这里有markdown解释代码

  • 首先,创建一个NvidiaRacecar类。NvidiaRacecar实现了Racecar类,因此它有 两个属性throttle(油门)和steering(转向角度)
  • 我们可以在[-1,1]范围内为这些属性赋值。执行以下操作将转向器设置为0.4。默认的是设置为0.4,但下面的代码中我设置的是0,这样一来,就可以校准小车的转向,让前轮处于正直方向时固定前轮。
  • NvidiaRacecar类有两个值steering_gain和steering_bias,可以用来校准转向。
    steering_offset为小车转向偏置,转向后小车转向值再加上小车偏置。
  • 油门也有一个增益值,可以用来控制速度响应。节流输出计算如下 𝑦=𝑎×𝑥 其中, 𝑎 是 car.throttle_gain 𝑥 是 car.throttle 𝑦 是 写入速度控制器中的值。
    这里提及值得注意的一件事:我在测试电机时出现了只有一个电机转动,当时无论修改甚至把小车重装,更换电机都无法成功。(后来才发现是python环境没有配置好(裂开!!!))

远程连接

远程连接其实就是使用手柄来遥控小车
首先还是通过web浏览器来连接小车(注:这里需要把手柄的无线接收器插入到自己的电脑上而不是小车上)打开Teleoperation.ipyn文件来依次来运行。

  • 首先创建Controller小部件的实例,我们将使用它来驱动小车。Controller小部件接收一个索引参数,该参数指定控制器的编号。如果你有多个控制器,或者一些游戏手柄显示为多个控制器,这将很有用。为了确定你正在使用的控制器的索引,请使用以下方法。
    1、打开 link网站。
    2、按下手柄上的按钮。
    3、记住响应按键按压的手柄索引(以此来寻找index=?)。
    在这里插入图片描述
    手柄索引测试界面
    在这里插入图片描述
  • 在模拟信号键未开启的情况下右摇杆输出值为B0~B3的0或1状态值,左摇杆为AXIS0或AXIS1的模拟值。
  • 在模拟信号开启时左摇杆为AXIS0或AXIS1的模拟值。右摇杆为AXIS2或AXIS5的模拟值。
  • index值在最开头,为0或其他。
    在这里插入图片描述
  • 如果索引是正确的,或许你还会看到Connect gamepad and press any button.文本,因为你的手柄没有在电脑上注册。你可以按任意按钮,这时上面的控制部件就会实时改变其状态。
  • 运行程序之后即可通过遥控手柄控制小车。Asex[0]控制前轮转向,Asex [1] 控制后轮转速左边摇杆左右方向控制小车前轮转向,右边摇杆上下方向控制小车后轮速度。
  • 在这里插入图片描述
  • 依次运行完毕后,会听见小车哔的一声,这代表运行完毕。

数据采集

  • 同样的在浏览器地址栏输入IP地址+8888连接到小车,找到/jetracer/notebooks/。打开interactive-regression.ipynb文件依次运行代码块。

  • 直接运行所有程序单元,程序最后运行会显示如下界面
    在这里插入图片描述 在这里说明一下,刚开始并不会出现三个界面,只有左边的界面,需要在第一张图片中用鼠标点击一下才会出现第二个界面(小车识别的理想位置),然后在点击Live按钮才会出现第三个界面(小车实际识别的位置)

  • 此时可以将小车放到赛道上,同时打开上一节teleoperation.ipynb程序运行,使遥控手柄可以控制小车运动。

  • 控制小车沿着赛道运行,每移动一小段位置,就用鼠标移动到图片中小车理想的运行路径上点击一下保存图片,控制小车沿着赛道拍摄10圈(也可以收集到>300张(count值))

  • 采集好数据后,将epochs的值选择为10,然后点击train,训练10轮。

  • 模型训练好了,则保存到road_following.ipynb中
    在这里插入图片描述

  • 训练好数据后可以点击evaluate 评估训练模型,如果采集的数据没有问题,可以在最左边的图像中看到当前小车位置的理想方向。

  • 注意采集的数据需将小车沿轨道移动到不同的位置,偏移和方向,尽可能沿理想路径的方向上选择最远的点保存,以保证小车不会离开轨道或碰撞物体。
    注:该数据采集程序退出后,重新打开摄像头可能出现摄像头被占用的出错提示,重启摄像头请在命令行运行下面的命令:
    sudo systemctl restart nvargus-daemon

自主巡线

连接小车,打开road_following.ipynb文件,依次运行代码模块。

  • 首先,创建模型。这必须与interactive_regression.ipynb中使用的模型相匹配
  • 接下来,加载上一步保存的模型。输入你用于保存的模型路径。
    model.load_state_dict(torch.load('road_following_model.pth'))
  • 使用torch2trt转换和优化模型,使用TensorRT进行更快的推断。 This optimization process can take a couple minutes to complete.这个优化过程可能需要几分钟才能完成。
    在这里插入图片描述
  • 最后,执行下面的单元格,使赛车向前移动,根据顶点的x值控制赛车。
    这里有一些建议,
    如果汽车左右摇摆,降低转向增益STEERING_GAIN
    如果汽车没有转弯,提高转向增益STEERING_GAIN
    由于小车设计的转向最大值有限制,更大的转向增益有时并不会提高转向,有甚至可能会损坏小车,因此选择合适的转向增益即可。
    如果汽车向右,使转向偏置更负(以小的增量,如-0.05)STEERING_BIAS
    如果汽车偏左,使转向偏置更积极(用小增量,如+0.05)STEERING_BIAS
    小车做工等原因可能导致小车转向偏左或偏右,又或者转向左转和右转的转向幅度不一致。由此带来的问题是不管是增大转向偏置还是减小转向偏置,可能都不能顺利的完成一个赛道的正向行驶和反向行驶。

总结

  1. 第一次接触JetRacer AI Kit小车,前前后后鼓捣两个星期,从开始一点点组长小车,到最后实现小车的基本功能。发现小车还是挺有意思的,其基本上是一个小型的无人驾驶小车,对无人驾驶算是一个简单的接触和实践。
  2. 期间也踩过许多坑,遇到许多令人头疼的问题,并且直到现在还在改进。后续还会写写在调试期间遇到的一些坑!
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值