JetRacer AI Kit的全车组装
整体流程组装小车安装镜像配置开发环境电机驱动远程连接数据采集自主巡线
JetRacer AI Kit小车套件主要由一个 Jetson Nano开发板、高清摄像头、舵机、电机、阿克曼转向结构、jetracer扩展板、锂电池组、网卡和天线组成。
这里就不在详细赘述如何组装小车了详情请参考微雪官网: link.
安装镜像Jetson Nano是一款形状、外接口类似于树莓派的嵌入式主板,搭载了四核Cortex-A57处理器,GPU则是拥有128个NVIDIA CUDA核心的NVIDIA Maxwell架构显卡,内存为4GB的LPDDR4,存储则为16GB eMMC 5.1,支持4K 60Hz视频解码。
(一)准备工作
一张SD卡(最好是64G起步)、读卡器,电脑
(二)开始安装
- 下载官方(注:这里是无界面版本镜像)JetRacer- AI-Kit-WS(62G)镜像下载地址如下链接 将SD卡插入电脑中使用Etcher软件(或者win32 disk imager),解压.img文件,烧写至SD卡上。 link 提取码:1111将烧写好的SD卡插入Jetson Nano开发板里(位置
在开发板的底部) 开机启动小车(这里没有采用官网的USB来连接,因为将小车连接到电脑上无法获取IP地址),这里我采用的是使用网线连接,并将电脑连接到同一个网络
下,使两个设备处于同一个网段下。
这时小车会获取到一个IP地址192.168.137.216(这里的IP地址是会变化),并使用电脑打开浏览器导航到192.168.137.216:8888,使用密码:jetson
把小车设置成无线的(即开机自动连接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 install2.安装JetCam Python包
cd git clone https://github.com/NVIDIA-AI-IOT/jetcam cd jetcam sudo python3 setup.py install3.安装torch2trt Python包
cd $HOME git clone https://ghproxy.com/https://github.com/NVIDIA-AI-IOT/torch2trt cd torch2trt sudo python3 setup.py install4.安装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
小车做工等原因可能导致小车转向偏左或偏右,又或者转向左转和右转的转向幅度不一致。由此带来的问题是不管是增大转向偏置还是减小转向偏置,可能都不能顺利的完成一个赛道的正向行驶和反向行驶。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)