实验室有一台2020年购入的AGX Xavier计算平台,由于实车开发作实验较为麻烦,打算基于这台Xavier从头搭建一套缩小版的自动驾驶系统用于算法验证以及实验,同时锻炼从头搭建系统的能力。平台基于朴为A30的阿克曼结构的车,底盘控制由CAN和串口输出,并提供了ROS接口。
【摘要】第一篇主要总结对于Xavier的刷机以及ROS安装过程中遇到的困难和问题。(尤其是因为后续需要使用扩展40PIN的CAN通信,而JetPack4.6以上版本的时钟配置导致CAN的波特率有问题,需要特殊配置!)
【注意】相关资料手册均可以到NVIDIA官网找到(链接)
一、 硬件连接
- 一台Ubuntu系统的主机Host(注意!Ubunut主机的系统版本决定了刷机系统的版本的下限,最开始使用20.04的系统,无论如何都无法将xavier刷为18.04,以至于后续ros安装出现大量问题,因此注意版本!)
- 一条USB-Type-C数据线
- 显示器、键盘、鼠标连接xavier
二、主机操作
- 从NVIDIA官网(链接)下载对应版本的sdkmanager(由于后续ROS安装的问题,安装18.04)
- 在下载的.deb文件所在目录打开命令行,并进行sdkmanager的安装
sudo apt install ./sdkmanager_1.5.0-7774_amd64.deb
- 命令行输入
sdkmanager
打开 - 取消勾选host machine(参考其他博客,这个是为主机下载安装文件的,如果想在主机上安装 nvida 软件,可以勾选这个,实际上没必要)。版本选择,注意官网的版本描述,对应的Ubuntu版本需要选择
- 下载路径建议默认(参考其他博客,sdk若下载到其他位置后续会出错,不要勾选install later)
- 此时会下载带有英伟达自己的bootloader以及Linux内核以及编译过的设备树文件
- 等OS镜像烧录完成,会弹出配置窗口,此时需要首先修改时钟配置!见(五),然后将xavier与主机连接(此前要关机)。长按中间恢复键,然后不放开按开机键,几秒后同时松开,即可检测到连接,选择手动安装,点击 Flash 按钮,开始烧录 OS 镜像
- 等OS烧录完成,xavier会开机,此时进行Ubuntu配置,同时主机会弹出新的窗口进行SDK的下载,注意二者要处于同一个局域网
三、Xavier操作
- 进行Ubuntu的基础配置,包括设置中文和输入法。中文需要在system中选择language中把不完整的包下载完整,然后将中文拖到顶端,应用全局然后重启;
- 安装ROS
- 一定要注意和Ubunut版本的匹配! (18.04对应ROS melodic)
- 由于xavier是ARM架构,其安装和x86的ROS有所不同,如果按照ros wiki的步骤进行安装,会出现包之间的依赖出现问题,而apt-get是无法解决包之间的依赖问题的,而aptitude虽然可以自动检查包的依赖,但会覆盖apt-get而导致其他问题
- 建议使用github上一位国外大佬开源的针对18.04的xavier的ros安装脚本进行安装(链接)
通过执行./installROS.sh
,-p参数可以选择安装的版本,可以选择ros-melodic-ros-base/ros-melodic-desktop/ros-melodic-desktop-full
- 此包还包含了自动创建ros工作空间的脚本,参数为工作空间名字,默认为catkin_ws
四、风扇配置
- Xavier提供PWM和转速表功能,用于控制风扇作为热解决方案的一部分。PWM输出控制风扇转速,转速表反馈转速;
- Xavier有8个PWM输出,PWM控制器为其8个实例(PWM1到PWM8)中的每个实例支持一个PWM输出,每个实例分配一个64 KB的独立地址空间,PWM控制器可以从CLK_M或PLLP中获取时钟源,CLK_M (19.2 MHz)源自OSC时钟(38.4 MHz),PLLP工作在408 MHz;
- 对于风扇的配置,开机默认转速为0(最开始不知道配置风扇这一回事,温度很高,我用了外置风扇散热hhh),可以在
/sys/devices/pwm-fan/target_pwm
文件中看到风扇的转速,默认为0,可以设置到最大250; - 设置为开机自启动:使用jetson性能检测软件jetson-stats
安装:sudo pip install jetson-stats
启动:sudo jtop
- 进入到界面6,设置jetson_clocks Running和boot Enable,设置开机自启动风扇(开机过几秒风扇启动)
- 设置风扇速度(按下“m”键是降低风扇速度,按“p”键是提高风扇速度)
- 使用鼠标点击“manual”,设置为手动
- 按“q”键退出,重启设备 reboot,测试风扇是否开机自启动
五、JetPack4.6版本以上的时钟配置
- 问题: Jetpack 4.6 以后, MTTCAN 配置发生了变化, CAN时钟默认为低功耗设置(没有使能PLLAON), CAN工作不正常(主要由于时钟源的选择发生了变化,导致CAN的波特率不准)
- **原理:**根据官方提供的内核源码中设备树的绑定文件(CAN相关的绑定文件在net目录下),找到bosch的CAN配置文件(以YAML格式书写,并非传统的txt格式),其中描述了如何配置相关节点的属性
- **解决方案:**将CAN的时钟源选为pllaon。刷机刷到打开AGX的恢复模式的位置时,打开安装到PC的文件夹,找到nvidia/nvidia_sdk/JetPack_4.6.1_Linux_JETSON_AGX_XAVIER_TARGETS/Linux_for_Tegra,在这个路径下,需要修改两个文件,分别是:
bootloader/t186ref/tegra194-a02-bpmp-p2888-a04.dtb
和kernel/dtb/下的tegra194-p2888-0001-p2822-0000.dtb
- 反编译
dtc -I dtb -O dts ./tegra194-a02-bpmp-p2888-a04.dtb > ./tegra194-a02-bpmp-p2888-a04.dts
- 修改CAN的父时钟
- 重新编译
dtc -I dts -O dtb ./tegra194-a02-bpmp-p2888-a04.dts > ./tegra194-a02-bpmp-p2888-a04.dtb
- 反编译
dtc -I dtb -O dts ./tegra194-p2888-0001-p2822-0000.dtb > ./tegra194-p2888-0001-p2822-0000.dts
- 修改pll时钟源
- 重新编译
dtc -I dts -O dtb ./tegra194-p2888-0001-p2822-0000.dts > ./tegra194-p2888-0001-p2822-0000.dtb
- 反编译
六、ROS安装
使用鱼香ROS进行一键安装,已包含Jestson系列的脚本。
wget http://fishros.com/install -O fishros && . fishros
【参考】
Nvidia Jetson Xavier 开机配置+刷机+部署ROS(刷机需谨慎)
JETSON AGX XAVIER刷机记录
Jetson AGX Xavier/Nano刷机指南(无需踩坑版)
Jetson AGX Xavier 设置 CAN,打开pllaon时钟,jetpack5.1
Nvidia jetson agx xavier can通讯失败,修改时钟源pllaon
Jetson Xavier 设置 CANFD (Jetpack 4.6, 开启pllaon)