上位机图像处理和嵌入式模块部署(树莓派4b的提高版)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        目前人工智能非常火,但是人工智能需要极高的算力和海量的数据,因此相关的关联公司非常吃香,nvidia就是提供算力的一家公司。大家都知道,nvidia的游戏显卡非常厉害,但是大家不了解的是,nvidia的嵌入式开发板jetson系列也非常不错。至少从性能上说,jetson系列的开发板还是非常不错的。

        不过要说jetson开发板的缺点,无非就是这么三个,第一,发热比较大;第二,价格比较贵;第三,产品供应存在风险。客户如果追求性能,并且是小批量使用,对成本不太敏感的话,个人还是非常推荐jetson系列开发板。和树莓派4b相比,nvidia的gpu资源就是最大的杀手锏。这次,我们以jetson Xavier nx做一个介绍。

1、价格

        一般来说,nano的价格会比较便宜一点,其他类型的板子,一般都在几千元上下。目前手上的这个nx开发板,当时的购买价格应该是5000左右。这还不是最贵的,如果是orin系列的开发板,价格甚至会到上万元。所以,这方面大家根据自己的经济能力灵活进行选择。

2、系统镜像

        从电商网站上面购买到的jetson开发板,一般系统镜像都是安装好的。此外还会额外带一个ssd存储,所以系统软件这方面,不需要我们担心。

3、创建用户、配置静态ip

        拿到板子之后,插好电源、插好键盘和鼠标、接好hdmi、上电之后,第一步要做的事情,就是创建第一个用户。比如说,我们第一个创建的用户是lidar,密码也是lidar。

        此外,对于我个人而言,不太习惯用屏幕进行系统操作,所以这个时候还会配置一个静态ip。一般的做法,就是直接找到eth0,通过鼠标选择manual设置ip的方式,把ip设置为192.168.0.97即可。后期,我们如果需要访问jetson,直接和它配置在同一个网段,用网线和pc直连,用ssh登录就可以访问。       

        默认jetson里面的系统软件,已经开启了ssh服务。

4、下载软件

        本身nx是同时支持wifi和有线网口的。这边为了方便,就直接通过有线网口直接插入到路由器端口了。当然也需要把路由器配置在192.168.0.*网段。我们的pc也连到这个路由器上面,后续通过ssh登录到jetson,用apt install就可以下载需要的软件了。

         当然,喜欢使用wifi的朋友,可以用nmcli配置一下,也是可以的,

sudo nmcli dev wifi list
sudo nmcli dev wifi connect NETGEAR86 password "88888888" ifname wlan0
sudo nmcli dev dis wlan0

5、默认安装的软件

        jetson本质上已经和一台pc没什么区别了,里面默认安装了gcc、g++、make和gdb等工具,我们要做的就是使用好这些工具。

6、资料的上传和下载

        在jetson系统里面,sftp服务已经开启了。这个时候我们只需要找一个支持sftp协议的客户端就可以实现资料的上传、下达了。比如说,mobaxterm就支持sftp协议。

7、支持opencv

        前面我们已经配置好了网络环境,所以如果需要进行opencv开发,比较简单,直接输入下面这行命令就可以了,

sudo apt-get install libopencv-dev

8、安装pcl库

        pcl,全称point cloud library,也就是点云库。本身安装pcl库依赖于几百个第三方库,如果pcl都可以安装了,那代表整个系统、软件库和编译环境就基本ok了。安装方法和opencv差不多,直接输入下面这个命令就可以了,

sudo apt-get install libpcl-dev

9、网站开发

        个人写网站比较喜欢用python去处理,框架使用webpy。所以,直接输入这个命令即可,

sudo apt-get install python3-webpy

10、pyqt5开发

        有的时候,我们需要开发qt界面程序。这种情况下,用c++来开发又显得有点笨重。所以,为了偷懒,我们可以通过pyqt5来完成对应界面的开发。因为之前安装libpcl-dev的时候,pyqt5已经安装好了,所以可以编写一个demo.py,用python3.6 demo.py执行一下即可。在mobaxterm上面,对应的窗口是可以显示的。

11、docker安装

        开机启动后,我们通过ifconfig看到了docker0的ip信息,这说明docker已经安装好了。

lidar@lidar-desktop:~/Desktop$ ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:51:c1:79:b5  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

        既然有了docker,那么可以验证和测试一下相关功能,比如运行hello-world、或者运行ubuntu,

sudo docker run hello-world
sudo docker run -it ubuntu bash

12、安装ros1

        安装ros1的方法,目前我们是利用docker来完成的,这主要也是为了防止不同ubuntu版本之间的差异。因为,现在ros版本和ubuntu的版本都是一一对应的。所以,这里可以找一个kinetic版本测试验证一下,如果没有问题的话,就可以进行ros1的开发了。

sudo docker pull ros:kinetic-robot
sudo docker run -it  --rm ros:kinetic-robot /bin/bash

13、编写驱动代码hello.ko

        首先,我们准备hello.c文件,

#include <linux/init.h>
#include <linux/sched.h>
#include <linux/module.h>
 
MODULE_LICENSE("GPL");
MODULE_AUTHOR("feixiaoxing");
MODULE_DESCRIPTION("This is just a hello module!\n");
 
static int __init hello_init(void)
{
        printk(KERN_EMERG "hello, init\n");
        return 0;
}
 
static void __exit hello_exit(void)
{
        printk(KERN_EMERG "hello, exit\n");
}
 
module_init(hello_init);
module_exit(hello_exit);

        接着我们准备Makefile文件,

ifneq ($(KERNELRELEASE),)
obj-m := hello.o
 
else
PWD  := $(shell pwd)
KVER := $(shell uname -r)
KDIR := /lib/modules/$(KVER)/build
all:
        $(MAKE) -C $(KDIR) M=$(PWD) modules
clean:
        rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions
endif

        直接输入make,不出意外的话,可以生成ko文件。接着就可以通过sudo insmod hello.ko和sudo rmmod hello的方法分别添加和删除驱动。为了验证驱动是否添加、删除成功,可以通过sudo dmesg的方法进行确认。

14、总结    

        因为写这篇文章的原因,发现现在jetson系列性能又更强了。不过算力要求不是特别严苛的话,个人觉得nano版本就够了,价格在2500上下,算力20t,这还是可以接受的。比纯硬件能力更重要的,是通过软件把开发板的性能发挥出来,这比什么都重要。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/625004.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Pytorch】7.使用Module模块搭建简易神经网络

什么是Moudel模块 torch.nn中的module是PyTorch中用于构建神经网络模型的基本单元。它包含了各种神经网络层、激活函数、损失函数等&#xff0c;可以通过组合不同的module来构建复杂的神经网络模型。每个module都包含了参数和方法&#xff0c;可以进行前向传播和反向传播等操作…

Linux软件RAID:数据冗余与性能提升的完美融合

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Linux &#xff1a;从菜鸟到飞鸟的逆袭》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、前言 1、软件RAID的概念 2、软件RAID与硬件RAID的对比…

鱼哥好书分享活动第22期:《数字政府网络安全合规性建设指南》解锁数字政府网络安全新篇章

鱼哥好书分享活动第22期&#xff1a;《《数字政府网络安全合规性建设指南》》解锁数字政府网络安全新篇章 阅读对象&#xff1a;书籍目录&#xff1a;了解更多&#xff1a;赠书抽奖规则: 当今时代&#xff0c;数据已成为新型生产要素&#xff0c;不仅是个人、企业乃至国家的重要…

SystemC学习使用记录

一、概述 对于复杂的片上系统&#xff0c;在进行RTL编码前&#xff0c;需进行深入的系统级仿真&#xff0c;以确认设计的体系结构是否恰当、总线是否能满足吞吐量和实现性要求以及存储器是否浪费&#xff0c;所进行的这些仿真要求在芯片的仿真模型上运行大量的软件&#xff0c…

【软件测试】自动化测试 Selenium 篇(一)

一、什么是自动化测试 1、自动化测试介绍 自动化测试指软件测试的自动化&#xff0c;在预设状态下运行应用程序或者系统&#xff0c;预设条件包括正常和异常&#xff0c;最后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。 自动化就相当于将人工测试手段进行转换…

2024中国(厦门)国际医用消毒及感控设备展览会

2024中国&#xff08;厦门&#xff09;国际医用消毒及感控设备展览会 2024 China (Xiamen) International Medical Disinfection And Infection Control Exhibition 致力于打造医用消毒及感控设备产业采购一站式平台 时 间&#xff1a;2024年11月1-3日 November 1-3, 2024 …

6、Qt—Log4Qt使用小记1

开发平台&#xff1a;Win10 64位 开发环境&#xff1a;Qt Creator 13.0.0 构建环境&#xff1a;Qt 5.15.2 MSVC2019 64位 一、Log4Qt简介 Log4Qt是使用Trolltech Qt Framework的Apache Software Foundation Log4j包的C 端口。它旨在供开源和商业Qt项目使用。所以 Log4Qt 是Apa…

智能革新:如何用会话式AI提升您的工作效率?

提升职场竞争力&#xff0c;会话式AI产品助你走在时代前沿 在当今的职场环境中&#xff0c;提高工作效率是每一位人力资源管理者追求的目标。而在效率的背后&#xff0c;往往隐藏着工作方法的正确与否。在众多提升效率的方法中&#xff0c;人工智能技术无疑是一股不可忽视的力量…

Linux-页(page)和页表

本文在页表方面参考了这篇博客&#xff0c;特别鸣谢&#xff01; 【Linux】页表的深入分析 1. 页帧和页框 页帧&#xff08;page frame&#xff09;是内存的最小可分配单元&#xff0c;也开始称作页框&#xff0c;Linux下页帧的大小为4KB。 内核需要将他们用于所有的内存需求&a…

CAN模块开发问题概述

问题一 问题描述 工作环境&#xff1a;ECU外接canoe 操作&#xff1a;使用CANoe模拟发送NM报文&#xff0c;然后停发或者断开CANoe 现象&#xff1a;程序跑死&#xff0c;调用call stack查看压栈情况如下图所示 定位代码如下图所示。可见是由于CAN模块在设置Controller状态时…

视频推拉流/视频直播点播平台EasyDSS使用Mysql数据库接口报错502如何处理?

视频推拉流/视频直播点播EasyDSS互联网直播平台支持一站式的上传、转码、直播、回放、嵌入、分享功能&#xff0c;具有多屏播放、自由组合、接口丰富等特点。平台可以为用户提供专业、稳定的直播推流、转码、分发和播放服务&#xff0c;全面满足超低延迟、超高画质、超大并发访…

MySql初学日记

MySql基础 概述 结构化查询语言(Structure Query Language)简称SQL。 是一种特殊的&#xff0c;标准的数据库编程语言&#xff0c;&#xff0c;一般的数据库管理系统都支持&#xff0c;用于对数据库进行增删改查等操作&#xff0c;实现数据持久化到本地。 使用完整的管理系…

如何判断点在多边形内部:OpenCV--cv2.pointPolygonTest()方法详解

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

【嵌入式模块芯片开发】ADXL345的优化精确测量和角度计算(中断单次测量、卡尔曼滤波)

【嵌入式模块芯片开发】ADXL345的优化精确测量和角度计算&#xff08;中断单次测量、卡尔曼滤波&#xff09; 文章目录 ADXL345的一般读取方式ADXL345的中断读取方式&#xff08;单次测量&#xff09;角度计算卡尔曼滤波优化后完整代码附录&#xff1a;压缩字符串、大小端格式…

PCIE协议-2-事务层规范-TLP Prefix Rules

2.2.10 TLP前缀规则 以下规则适用于任何包含TLP前缀的TLP&#xff1a; 对于任何TLP&#xff0c;TLP中byte0的Fmt[2:0]字段中的值100b表示存在TLP前缀&#xff0c;并且Type[4]位指示TLP前缀的类型。 Type[4]位中的值0b表示存在本地TLP前缀。Type[4]位中的值1b表示存在端到端TL…

Echarts结课之小杨总结版

Echarts结课之小杨总结版 前言基础回顾框架sale框架代码&#xff1a; user框架基础代码&#xff1a; inventory框架基础代码&#xff1a; total框架基础代码&#xff1a; 基础设置1.标题(Title)2.图例(Legend)实现 3.工具提示(Tooltip)实现 4.X轴(X Axis) 和 Y轴(Y Axis)5.数据…

数据采集为什么会用到代理IP?

在数据采集中&#xff0c;代理IP是指通过使用代理服务器来隐藏或更改真实的IP地址&#xff0c;以访问目标网站或服务器。那么&#xff0c;数据采集为什么会用到代理IP呢&#xff1f;使用代理IP通常用于匿名地访问网站、绕过访问限制或提高数据采集的效率和安全性。 代理服务器作…

3d渲染的基本原理和流程是什么?渲染100邀请码1a12

3D渲染是把三维模型转化为二维图像的过程&#xff0c;通过它我们能得到逼真炫酷的图片效果&#xff0c;作为3D渲染人&#xff0c;我们需要了解很多知识&#xff0c;这里我们先介绍下它的基本原理和流程。 1、3D渲染的基本原理 3D渲染的基本原理是模拟光线在三维空间中的传播和…

银行业数据运营场景下的数据埋点方案

1、引言 随着金融科技的快速发展&#xff0c;银行业的数据运营变得日益重要。数据埋点作为数据收集的重要手段&#xff0c;对于银行业务的精细化运营、风险管理和产品迭代等方面起着至关重要的作用。本方案将针对银行业数据运营场景&#xff0c;设计一套完整的数据埋点方案&am…

算法-卡尔曼滤波之卡尔曼滤波的第一个方程:状态更新方程

通过一个例子来引出卡尔曼滤波的状态更新方程&#xff1b; 这里系统状态是金条的重量&#xff1b; 为了估计系统的状态&#xff0c;我们可以多次测量金条的重量&#xff0c;然后求平均值&#xff1b; 其中估计值是所有测量值的平均值&#xff1b; 由于我们使用的是静态模型&am…