远程开发技巧
远程连接
一般采用ssh协议,可以通过网线、otg和无线
有线链接
推荐使用网线,电脑没有网口可以买一个USB拓展坞,一般都带网口。
网线连接好两台设备后,先使用显示屏和键鼠连接一台设备,然后在另一台设备上输入ifconfig
命令查看ip地址,注意不是wlan0的ip地址,而是网口分配的的ip地址。
如果命令无效,根据报错apt install即可,如果是高版本ubuntu可能无法使用这个命令
如果有桌面,可以直接去网络设置中查看分配的ip地址,也可以设置一个好记的地址方便记忆。
然后在另一台设备上输入ssh 用户名@ip地址
命令进行远程连接,输入密码即可,注意用户名一定要正确。
如果使用otg线连接,此时需要的ip地址是主机ip地址,注意区分和网口连接的不同。
无线连接
两台设备处于同一局域网,可以直接使用无线连接,不需要网线。
首先查看路由器给嵌入式设备分配的ip,此时是wlan0的ip地址。
然后在另一台设备上输入ssh 用户名@wlan0的ip地址
命令进行远程连接,输入密码即可。
注意所有ip地址都是ipv4地址,ipv6地址不适用.
scp数据传输
# 将本地文件上传远程
scp 本地文件路径 用户名@ip地址:远程文件路径
# 拉取远程文件至本地
scp 用户名@ip地址:远程文件路径 本地文件路径
网络模型
Yolo系列模型转换方法
首先确保环境已经正确安装。
到yolo官网了解各个模型推理时间和准确度的情况,再根据网上资料确定自己所需的yolo版本。如果需要自己训练,需要下载对应版本的GitHub仓库里的代码,按照说明进行训练。如果不需要训练,直接下载.pt权重文件即可。
使用tensorrtx转换模型
前往tensorrtxgithub仓库,里面有对应各个模型版本的文件夹,例如点入yolov5,进入yolov5文件夹,可以看到readme文件,里面有详细的转换方法。
需要注意的是,yolo系列除了大版本,例如yolov5、yolov8之外,还有小版本区分,
例如yolov5 version 5.0、yolov5 version 6.0等,同时还有不同大小的网络结构,
比如yolov5l,yolov5m,yolov5s等。
一般来说,你先根据你yolo.pt文件的version版本,选择对应的tensorrtx版本,
git clone 下载yolo仓库和tensorrtx仓库,然后进入tensorrtx/yolovX文件夹,
根据说明,执行get_wts.py脚本,将pt文件转化为wts文件,然后再将编译tensorrtx,在yolovX目录下
mkdir build
cd build
cmake..
make
执行完上述命令后,根据说明,执行yolovX的文件,就可以将wts文件转换为engine文件,完成模型转换。
可以采用tensorrtx给的测试文件,看下模型加载是否正确,推理时间是否得到优化。
后续需要加载模型推理也可以直接抄这个测试文件。
常见问题
动态链接库问题
使用ananconda进行环境管理时,cmake项目时,可能会产生动态库链接问题,即系统版本库文件和anaconda版本库文件不匹配。
解决方法:
- 进入ananconda的lib文件夹,删除不匹配的库文件,并将系统库文件链接到anaconda库文件上。
例如
以libwayland-client.so.0为例,系统版本为/lib/x86_64-linux-gnu/
# 用内置命令ldd查看出现问题的libwayland-client.so.0当中,所依赖的ffi这个库的叫什么。
ldd /lib/x86_64-linux-gnu/libwayland-client.so.0 | grep ffi
# 查看系统的libffi
ll /lib/x86_64-linux-gnu/ | grep ffi
# 查看Anaconda的libffi
ll ~/anaconda3/lib/ | grep ffi
# 可能会发现这两个库的版本不一致,删除anaconda的libffi,并将系统的libffi链接到anaconda的libffi上。
# 假设系统版本的libffi指向了7.1, anaconda为8.1
rm ~/anaconda3/lib/libffi.so.7 #虽然它是so.7,但他指向了8.1的版本,所以需要重新指向。
# 让conda的libffi指向系统的libffi
ln -s /lib/x86_64-linux-gnu/libffi.so.7.1 ~/anaconda3/lib/libffi.so.7
引导文件损坏问题
首先需要一个引导系统,可以选择U盘作为引导,上网搜一下教程,再U盘中下载一个对应ubuntu系统的镜像文件即可。
然后进入电脑BIOS界面,将U盘的启动方式排在最前面,然后重启电脑。
接下来你就会进入ubuntu系统,进入后点击 try ubuntu,即可进行引导文件修复。
手动修复
打开命令行,输入以下命令:
sudo fdisk -l # 查看U盘的分区情况,确定系统文件分区和引导文件分区(EFI分区)的编号。
sudo mount /dev/sda1(改成你对应的分区) /mnt # 将系统文件分区挂载到/mnt目录下,目的是待会需要进入系统文件分区。
# 再挂载其他文件夹
sudo mount --bind /dev /mnt/dev
sudo mount --bind /dev/pts /mnt/dev/pts
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
# 再挂载EFI分区
mount /dev/sda2 /boot/efi # 假设EFI分区的编号为2,将EFI分区挂载到/boot/efi目录下,如果没有这个efi目录就新建,如果boot单独分区,也需要挂载。
# 挂载完成后,进入/mnt,切换到系统盘
chroot /mnt # 切换到系统盘
# 下载引导文件
grub-install /dev/sda # sda为硬盘名,安装引导文件到EFI分区
sudo update-grub # 更新grub
# 退出
exit
# 保存修改
sync
重启电脑,拔下启动U盘,最好进入BIOS界面将硬盘启动优先级改成最高,即可进入系统。
自动修复
如果多次手动修复无效,可以尝试使用自动修复脚本。
# 添加软件源
sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt-get update
# 安装软件
sudo apt-get install -y boot-repair
# 运行修复脚本
sudo boot-repair
# 之后会问你系统盘在不在移动硬盘,如果在就选择对应的硬盘,不在就选no
# 其他的都不用管,选继续修复即可。
修复成功后会显示success,重启电脑即可,同时进入BIOS界面将对应系统盘的硬盘作为启动盘。