JetRacer AI Kit的全车组装及测试
JetRacer AI Kit小车套件主要由一个 Jetson Nano开发板、高清摄像头、舵机、电机、阿克曼转向结构、jetracer扩展板、锂电池组、网卡和天线组成。
整体流程
#mermaid-svg-EsWw6yXjJT3EOvgb .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-EsWw6yXjJT3EOvgb .label text{fill:#333}#mermaid-svg-EsWw6yXjJT3EOvgb .node rect,#mermaid-svg-EsWw6yXjJT3EOvgb .node circle,#mermaid-svg-EsWw6yXjJT3EOvgb .node ellipse,#mermaid-svg-EsWw6yXjJT3EOvgb .node polygon,#mermaid-svg-EsWw6yXjJT3EOvgb .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-EsWw6yXjJT3EOvgb .node .label{text-align:center;fill:#333}#mermaid-svg-EsWw6yXjJT3EOvgb .node.clickable{cursor:pointer}#mermaid-svg-EsWw6yXjJT3EOvgb .arrowheadPath{fill:#333}#mermaid-svg-EsWw6yXjJT3EOvgb .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-EsWw6yXjJT3EOvgb .flowchart-link{stroke:#333;fill:none}#mermaid-svg-EsWw6yXjJT3EOvgb .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-EsWw6yXjJT3EOvgb .edgeLabel rect{opacity:0.9}#mermaid-svg-EsWw6yXjJT3EOvgb .edgeLabel span{color:#333}#mermaid-svg-EsWw6yXjJT3EOvgb .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-EsWw6yXjJT3EOvgb .cluster text{fill:#333}#mermaid-svg-EsWw6yXjJT3EOvgb div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-EsWw6yXjJT3EOvgb .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-EsWw6yXjJT3EOvgb text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-EsWw6yXjJT3EOvgb .actor-line{stroke:grey}#mermaid-svg-EsWw6yXjJT3EOvgb .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-EsWw6yXjJT3EOvgb .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-EsWw6yXjJT3EOvgb #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-EsWw6yXjJT3EOvgb .sequenceNumber{fill:#fff}#mermaid-svg-EsWw6yXjJT3EOvgb #sequencenumber{fill:#333}#mermaid-svg-EsWw6yXjJT3EOvgb #crosshead path{fill:#333;stroke:#333}#mermaid-svg-EsWw6yXjJT3EOvgb .messageText{fill:#333;stroke:#333}#mermaid-svg-EsWw6yXjJT3EOvgb .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-EsWw6yXjJT3EOvgb .labelText,#mermaid-svg-EsWw6yXjJT3EOvgb .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-EsWw6yXjJT3EOvgb .loopText,#mermaid-svg-EsWw6yXjJT3EOvgb .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-EsWw6yXjJT3EOvgb .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-EsWw6yXjJT3EOvgb .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-EsWw6yXjJT3EOvgb .noteText,#mermaid-svg-EsWw6yXjJT3EOvgb .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-EsWw6yXjJT3EOvgb .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-EsWw6yXjJT3EOvgb .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-EsWw6yXjJT3EOvgb .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-EsWw6yXjJT3EOvgb .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-EsWw6yXjJT3EOvgb .section{stroke:none;opacity:0.2}#mermaid-svg-EsWw6yXjJT3EOvgb .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-EsWw6yXjJT3EOvgb .section2{fill:#fff400}#mermaid-svg-EsWw6yXjJT3EOvgb .section1,#mermaid-svg-EsWw6yXjJT3EOvgb .section3{fill:#fff;opacity:0.2}#mermaid-svg-EsWw6yXjJT3EOvgb .sectionTitle0{fill:#333}#mermaid-svg-EsWw6yXjJT3EOvgb .sectionTitle1{fill:#333}#mermaid-svg-EsWw6yXjJT3EOvgb .sectionTitle2{fill:#333}#mermaid-svg-EsWw6yXjJT3EOvgb .sectionTitle3{fill:#333}#mermaid-svg-EsWw6yXjJT3EOvgb .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-EsWw6yXjJT3EOvgb .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-EsWw6yXjJT3EOvgb .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-EsWw6yXjJT3EOvgb .grid path{stroke-width:0}#mermaid-svg-EsWw6yXjJT3EOvgb .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-EsWw6yXjJT3EOvgb .task{stroke-width:2}#mermaid-svg-EsWw6yXjJT3EOvgb .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-EsWw6yXjJT3EOvgb .taskText:not([font-size]){font-size:11px}#mermaid-svg-EsWw6yXjJT3EOvgb .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-EsWw6yXjJT3EOvgb .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-EsWw6yXjJT3EOvgb .task.clickable{cursor:pointer}#mermaid-svg-EsWw6yXjJT3EOvgb .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-EsWw6yXjJT3EOvgb .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-EsWw6yXjJT3EOvgb .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-EsWw6yXjJT3EOvgb .taskText0,#mermaid-svg-EsWw6yXjJT3EOvgb .taskText1,#mermaid-svg-EsWw6yXjJT3EOvgb .taskText2,#mermaid-svg-EsWw6yXjJT3EOvgb .taskText3{fill:#fff}#mermaid-svg-EsWw6yXjJT3EOvgb .task0,#mermaid-svg-EsWw6yXjJT3EOvgb .task1,#mermaid-svg-EsWw6yXjJT3EOvgb .task2,#mermaid-svg-EsWw6yXjJT3EOvgb .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-EsWw6yXjJT3EOvgb .taskTextOutside0,#mermaid-svg-EsWw6yXjJT3EOvgb .taskTextOutside2{fill:#000}#mermaid-svg-EsWw6yXjJT3EOvgb .taskTextOutside1,#mermaid-svg-EsWw6yXjJT3EOvgb .taskTextOutside3{fill:#000}#mermaid-svg-EsWw6yXjJT3EOvgb .active0,#mermaid-svg-EsWw6yXjJT3EOvgb .active1,#mermaid-svg-EsWw6yXjJT3EOvgb .active2,#mermaid-svg-EsWw6yXjJT3EOvgb .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-EsWw6yXjJT3EOvgb .activeText0,#mermaid-svg-EsWw6yXjJT3EOvgb .activeText1,#mermaid-svg-EsWw6yXjJT3EOvgb .activeText2,#mermaid-svg-EsWw6yXjJT3EOvgb .activeText3{fill:#000 !important}#mermaid-svg-EsWw6yXjJT3EOvgb .done0,#mermaid-svg-EsWw6yXjJT3EOvgb .done1,#mermaid-svg-EsWw6yXjJT3EOvgb .done2,#mermaid-svg-EsWw6yXjJT3EOvgb .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-EsWw6yXjJT3EOvgb .doneText0,#mermaid-svg-EsWw6yXjJT3EOvgb .doneText1,#mermaid-svg-EsWw6yXjJT3EOvgb .doneText2,#mermaid-svg-EsWw6yXjJT3EOvgb .doneText3{fill:#000 !important}#mermaid-svg-EsWw6yXjJT3EOvgb .crit0,#mermaid-svg-EsWw6yXjJT3EOvgb .crit1,#mermaid-svg-EsWw6yXjJT3EOvgb .crit2,#mermaid-svg-EsWw6yXjJT3EOvgb .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-EsWw6yXjJT3EOvgb .activeCrit0,#mermaid-svg-EsWw6yXjJT3EOvgb .activeCrit1,#mermaid-svg-EsWw6yXjJT3EOvgb .activeCrit2,#mermaid-svg-EsWw6yXjJT3EOvgb .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-EsWw6yXjJT3EOvgb .doneCrit0,#mermaid-svg-EsWw6yXjJT3EOvgb .doneCrit1,#mermaid-svg-EsWw6yXjJT3EOvgb .doneCrit2,#mermaid-svg-EsWw6yXjJT3EOvgb .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-EsWw6yXjJT3EOvgb .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-EsWw6yXjJT3EOvgb .milestoneText{font-style:italic}#mermaid-svg-EsWw6yXjJT3EOvgb .doneCritText0,#mermaid-svg-EsWw6yXjJT3EOvgb .doneCritText1,#mermaid-svg-EsWw6yXjJT3EOvgb .doneCritText2,#mermaid-svg-EsWw6yXjJT3EOvgb .doneCritText3{fill:#000 !important}#mermaid-svg-EsWw6yXjJT3EOvgb .activeCritText0,#mermaid-svg-EsWw6yXjJT3EOvgb .activeCritText1,#mermaid-svg-EsWw6yXjJT3EOvgb .activeCritText2,#mermaid-svg-EsWw6yXjJT3EOvgb .activeCritText3{fill:#000 !important}#mermaid-svg-EsWw6yXjJT3EOvgb .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-EsWw6yXjJT3EOvgb g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-EsWw6yXjJT3EOvgb g.classGroup text .title{font-weight:bolder}#mermaid-svg-EsWw6yXjJT3EOvgb g.clickable{cursor:pointer}#mermaid-svg-EsWw6yXjJT3EOvgb g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-EsWw6yXjJT3EOvgb g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-EsWw6yXjJT3EOvgb .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-EsWw6yXjJT3EOvgb .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-EsWw6yXjJT3EOvgb .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-EsWw6yXjJT3EOvgb .dashed-line{stroke-dasharray:3}#mermaid-svg-EsWw6yXjJT3EOvgb #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-EsWw6yXjJT3EOvgb #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-EsWw6yXjJT3EOvgb #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-EsWw6yXjJT3EOvgb #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-EsWw6yXjJT3EOvgb #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-EsWw6yXjJT3EOvgb #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-EsWw6yXjJT3EOvgb #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-EsWw6yXjJT3EOvgb #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-EsWw6yXjJT3EOvgb .commit-id,#mermaid-svg-EsWw6yXjJT3EOvgb .commit-msg,#mermaid-svg-EsWw6yXjJT3EOvgb .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-EsWw6yXjJT3EOvgb .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-EsWw6yXjJT3EOvgb .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-EsWw6yXjJT3EOvgb g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-EsWw6yXjJT3EOvgb g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-EsWw6yXjJT3EOvgb g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-EsWw6yXjJT3EOvgb g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-EsWw6yXjJT3EOvgb g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-EsWw6yXjJT3EOvgb g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-EsWw6yXjJT3EOvgb .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-EsWw6yXjJT3EOvgb .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-EsWw6yXjJT3EOvgb .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-EsWw6yXjJT3EOvgb .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-EsWw6yXjJT3EOvgb .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-EsWw6yXjJT3EOvgb .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-EsWw6yXjJT3EOvgb .edgeLabel text{fill:#333}#mermaid-svg-EsWw6yXjJT3EOvgb .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-EsWw6yXjJT3EOvgb .node circle.state-start{fill:black;stroke:black}#mermaid-svg-EsWw6yXjJT3EOvgb .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-EsWw6yXjJT3EOvgb #statediagram-barbEnd{fill:#9370db}#mermaid-svg-EsWw6yXjJT3EOvgb .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-EsWw6yXjJT3EOvgb .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-EsWw6yXjJT3EOvgb .statediagram-state .divider{stroke:#9370db}#mermaid-svg-EsWw6yXjJT3EOvgb .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-EsWw6yXjJT3EOvgb .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-EsWw6yXjJT3EOvgb .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-EsWw6yXjJT3EOvgb .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-EsWw6yXjJT3EOvgb .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-EsWw6yXjJT3EOvgb .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-EsWw6yXjJT3EOvgb .note-edge{stroke-dasharray:5}#mermaid-svg-EsWw6yXjJT3EOvgb .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-EsWw6yXjJT3EOvgb .error-icon{fill:#522}#mermaid-svg-EsWw6yXjJT3EOvgb .error-text{fill:#522;stroke:#522}#mermaid-svg-EsWw6yXjJT3EOvgb .edge-thickness-normal{stroke-width:2px}#mermaid-svg-EsWw6yXjJT3EOvgb .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-EsWw6yXjJT3EOvgb .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-EsWw6yXjJT3EOvgb .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-EsWw6yXjJT3EOvgb .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-EsWw6yXjJT3EOvgb .marker{fill:#333}#mermaid-svg-EsWw6yXjJT3EOvgb .marker.cross{stroke:#333}
:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}
#mermaid-svg-EsWw6yXjJT3EOvgb {
color: rgba(0, 0, 0, 0.75);
font: ;
}
组装小车
这里就不再赘述如何组装小车了,详情请参考微雪官网: 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 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
小车做工等原因可能导致小车转向偏左或偏右,又或者转向左转和右转的转向幅度不一致。由此带来的问题是不管是增大转向偏置还是减小转向偏置,可能都不能顺利的完成一个赛道的正向行驶和反向行驶。
总结
- 第一次接触JetRacer AI Kit小车,前前后后鼓捣两个星期,从开始一点点组长小车,到最后实现小车的基本功能。发现小车还是挺有意思的,其基本上是一个小型的无人驾驶小车,对无人驾驶算是一个简单的接触和实践。
- 期间也踩过许多坑,遇到许多令人头疼的问题,并且直到现在还在改进。后续还会写写在调试期间遇到的一些坑!
版权声明:本文为CSDN博主「RWB_JWJ」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43972383/article/details/122682943
暂无评论