本周用了5天的时间去完成
Jetson Nano
的环境配置工作,差点就控制不了自己的情绪啦,但是好在书籍拯救了我,阅读是人生的必选项:不要用虚假的积极姿态去消极地对抗,以此来显示自己的付出和工作,积极地解决它,以更加平和的心态去面对它,时刻朝着最优项前进!“绝不让任何人或事将你变成一个残废!”
1. 系统配置
事情的起因是由于实验室需要对一个Nano
(A01
版本)平台进行更换,需要让原有的代码能够在新的Nano
平台(B01
版本)上顺利运行。
1.1. 系统配置
首先是系统配置问题,最简单的方法是将原有的系统直接备份,在新的板子上复原,这种方式是最简单的,能够直接避免相关软件和环境的配置;其次则是直接在新的板子上安装新的系统,重新配置环境和安装软件,有点繁琐。
- 使用
dd
命令完成系统的备份
$ sudo dd if=/dev/mmcblk0 of=/media/nano/SATA /nano.img bs=1M status=progress
其中
-
/dev/mmcblk0
是Nano
的TF
卡类型的第一个块设备; -
/dev/mmcblk1
是Nano
的TF
卡类型的第二个块设备; -
/dev/mmcblk0p1
是第一个块设备的第一个分区; -
/dev/mmcblk0p2
是第一个块设备的第二个分区; -
/dev/sda
是系统的第一个磁盘; -
/dev/sdb
是系统的第二个磁盘; -
/dev/sda1
是第一磁盘的第一个分区; -
/dev/sda2
是第一磁盘的第二个分区;
$ sudo dd if=备份区域 of=存储区域 bs=读入和输出的区块大小 status=显示写入进度
# `Nano`采用的是`TF`卡存储方式,以及外接`U盘`两种存储方式
@ `if=filename`对应的是需要备份的`TF`卡块设备
@ `of=filename`对应的是 `U盘`的存储区域和文件名
@ `bs`=区块大小,用于设置读入或输入的块大小,对备份速度有影响
@ `status`=显示写入进度,用于设置写入进度
由于TF卡
的内存有限,一般直接备份,备份的镜像和TF
卡的大小是相同的,所以原有的TF
卡必然是装不下的,这时候就需要将备份的镜像备份到U盘
中。亦或者采用下面这种方式,在创建镜像的同时对镜像进行压缩。
sudo dd if=/dev/mmcblk0 bs=1M status=progress | gzip > /media/nvidia/SATA/nano.img.gz
即便进行了压缩也压缩不到哪里去,建议用一个大一点的移动硬盘或者是U
盘直接对镜像进行备份,不建议用同等大小的存储设备进行备份,时间还是挺久的,32G
的TF
卡大概需要30分钟左右!
- 使用
dd
命令完成系统的备份
借助上面的操作,已经将Nano
的镜像拷贝到U盘,接下来就是将镜像直接拷贝到Ubuntu
系统下,然后将镜像复原到TF
上(当然也可以直接拷贝到TF
存储设备上,但我没试过,不知道行不行,可以试一试),也可以通过官方的工具balenaEtcher
软件工具直接将镜像刷写到TF
卡中(建议采用该方法),不管哪种方法,需要耗费的时间都是巨大的,十分消磨一个人的经历和耐心!刷写完系统之后,可以先在旧的Nano
板子上进行TF
卡插入试验,看看系统能不能启动,然后再插入到新的板子上进行试验。存在一些特殊情况,由于系统的硬件支持不同,会导致过去的系统镜像在新的板子上无法启动。
$ sudo dd if=/path/nano.img of=/dev/sda bs=1M status=progress
# 对于压缩镜像的方法
$ gzip -d /path/nano.img.gz | sudo dd of=/dev/sda bs=1M status=progress
- 直接从官网下载相应的版本镜像,按照官方教程进行刷写
如果事情通过之前的步骤就已经解决了,也就不需要之后的步骤啦,很明显,过程是曲折的,由于A01版本的系统与B01的硬件支持不同,所以刷写的系统镜像能够在原有的板子上完美启动,一切正常,但是到了新的板子就卡在Nvidia
开机画面上!所以还是老实地按照官方教程来吧!倒也简单,下载官方镜像和刷写工具,然后将镜像刷写到TF卡中,就是这么简单的两步,开机之后对系统进行设置!默认设置就行!
1.2. 环境配置
- 风扇支持
cd /etc
sudo touch rc.local
sudo chmod u+x rc.local
sudo gedit rc.local
# 填入如下内容,255风速最大,0最小
#!/bin/bash
sleep 10
sudo /usr/bin/jetson_clocks
sudo sh -c 'echo 255 > /sys/devices/pwm-fan/target_pwm'
1. 自动调节风扇程序项目
2. 项目中文介绍
3. 自动控制风速
- 增加swap空间
+ 生成swapfile文件
$ sudo fallocate -l 4G /var/swapfile
$ sudo chmod 600 /var/swapfile
$ sudo mkswap /var/swapfile
$ sudo swapon /var/swapfile
+ 设置为自动启用swapfile
$ sudo bash -c 'echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab'
+ 建议重启
亦或是采用如下方式:
sudo fallocate -l 4G /swapfile # 创建swap分区,分区大小设置为4G,可自己调节
sudo chmod 600 /swapfile # 修改swap分区使用权限,只允许root用户访问
sudo mkswap /swapfile # 将文件标记为swap空间
sudo swapon /swapfile # 启用swap空间,关机再开机后,需要再次利用此命令启用swap空间
free -h # 验证swap空间是否可用
- 更换系统源(清华源)
+ 备份原有源
$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
+ 修改源
sudo gedit /etc/apt/sources.list
+ 覆盖
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main multiverse restricted universe
+ 更新和升级
sudo apt-get update
sudo apt-get upgrade
- 烦人的
drpkg warnning
提醒
直接采用sudo apt auto remove
,虽然大家都说这条指令是新手杀手,但是由于我是新装系统,所以不在乎,大不了重装,但是之后更换源,能够有效解决这一问题!
1.3. 软件配置
- 谷歌拼音输入法
+ 安装和设置
https://blog.csdn.net/qq_33475105/article/details/106177082
+ 解决候选字符显示的问题
https://blog.csdn.net/qq_21397217/article/details/52447263
+ 最后重启Nano,就可以正常使用谷歌输入法
- 系统资源监控
Jtop
+ 安装pip3
$ sudo apt-get install python3-pip python3-dev
+ 安装jtop
$ sudo -H pip3 install -U jetson-stats
+ 重启
$ sudo jtop
- 远程连接VNC
挺麻烦的,有些步骤我也记不太清楚啦!
1. SSH服务及VNC远程控制
2. VNC远程连接Nano
3. 安装vino远程桌面控制 - 远程桌面分辨率设置
$ xrandr --fb 1280x720
2. ROS安装
今天太晚了,不想再写啦!安装ROS,按照官网安装教程就行啦!关于安装可能遇到的问题,主要有几点提醒
- 建议设置清华的源
- 建议安装基础版本ROS,需要的相关包,可以后期进行安装
sudo apt install ros-melodic-ros-base
- 建议选择一个网络环境较好的地方
- 建议挂上梯子
-
sudo rosdep init
和rosdep update
出错的解决方案
该问题大多数是由于网络问题导致的,一般会修改一下几个文件:
- 手动添加
20-default.list
sudo gedit /etc/ros/rosdep/sources.list.d/20-default.list
+ 添加如下内容
# os-specific listings first
yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml osx
# generic
yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml
yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml
gbpdistro https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml fuerte
# newer distributions (Groovy, Hydro, ...) must not be listed anymore, they are being fetched from the rosdistro index.yaml instead
-
hosts
文件
$ sudo gedit /etc/hosts
+ 在hosts文件末尾添加如下内容,这个IP地址经常变化,需要自己去查找
151.101.84.133 raw.githubusercontent.com
-
resolv.conf
文件
sudo gedit /etc/resolv.conf
+ 添加如下内容,意义不大
nameserver 8.8.8.8 #google域名服务器
nameserver 8.8.4.4 #google域名服务器
【注】如果上述方案都不行,建议找个网络好点的地方,或者是啥手机热点之类的!最终结果如下,则表明初始化成功啦
reading in sources list data from /etc/ros/rosdep/sources.list.d
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml
Query rosdistro index https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml
Skip end-of-life distro "ardent"
Skip end-of-life distro "bouncy"
Add distro "crystal"
Add distro "dashing"
Add distro "eloquent"
Skip end-of-life distro "groovy"
Skip end-of-life distro "hydro"
Skip end-of-life distro "indigo"
Skip end-of-life distro "jade"
Add distro "kinetic"
Skip end-of-life distro "lunar"
Add distro "melodic"
Add distro "noetic"
updated cache in /home/eco/.ros/rosdep/sources.cache
3. OpenCV编译安装
Jetpack
情况是自带OpenCV4的,为了让个板子的版本一致,安装了OpenCV,还是基本步骤,先下载OpenCV主安装源码和附加模块的源码.
# 安装依赖,有些库可能安装不上,不用管
echo "** Install requirement"
sudo apt-get update
sudo apt-get install -y build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
sudo apt-get install -y python2.7-dev python3.6-dev python-dev python-numpy python3-numpy
sudo apt-get install -y libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
sudo apt-get install -y libv4l-dev v4l-utils qv4l2 v4l2ucp
sudo apt-get install -y curl
sudo apt-get update
# 下载源码
echo "** Download opencv-4.0.0 source code"
https://github.com/opencv/opencv/archive/4.0.0.zip -o opencv-4.0.0.zip
https://github.com/opencv/opencv_contrib/archive/4.0.0.zip -o opencv_contrib-4.0.0.zip
# 下载之后,将两个压缩文件解压在统一目录下
cd opencv-4.0.0/
echo "** Building..."
mkdir build
cd build/
# 配置
cmake -D OPENCV_GENERATE_PKGCONFIG=ON -D WITH_CUDA=ON -D CUDA_ARCH_BIN="5.3" -D CUDA_ARCH_PTX="" -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.0.0/modules -D WITH_GSTREAMER=ON -D WITH_LIBV4L=ON -D BUILD_opencv_python2=ON -D BUILD_opencv_python3=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
# -D OPENCV_GENERATE_PKGCONFIG=ON一定要添加
# 还有几个小问题,我忘啦!
# 编译,建议采用单线程,同时建议夸大自己的SWAP空间为6G
make
sudo make install
sudo apt-get install -y python-opencv python3-opencv
echo "** Install opencv-4.0.0 successfully"
- OpenCV版本配置问题
sudo gedit /etc/bash.bashrc
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
编译出现的问题
-
boostdesc_bgm.i: No such file or directory
问题详细:https://github.com/opencv/opencv_contrib/issues/1301
解决办法:https://blog.csdn.net/u011736771/article/details/85960300 - 多版本配置问题
参考材料:linux下编译安装opencv生成opencv.pc