- 博客(136)
- 资源 (9)
- 收藏
- 关注
原创 我和jetson-Nano的故事(11)——在ros中编译usb_cam
最近给jetson nano重装了系统之后,在编译今年人工智能ROS小车比赛用的工程包的时候,遇到一个问题迟迟没有解决,花费了一段时间才弄清楚原因和找到解决办法,现在记录如下。如果仍然遇到问题,请检查你的网络连接、软件源设置以及任何相关的错误消息,以便进一步诊断问题。如果安装后遇到无法运行jtop,并且一直提示重启jtop服务的问题,可以尝试再次使用pip3重新安装jetson-stats。另外,如果你需要配置CUDA的环境变量,可以运行以下命令来编辑。最终显示信息如下,注意OpenCV的版本,最好使用。
2024-05-16 10:54:19
927
原创 我和jetson-Nano的故事(10)——安装OpenCV3.2.0
第三步: Cuda9或者Cuda10及以后的版本 中有一个单独的halffloat(cuda_fp16.h)头文件,也应该被包括在opencv的目录里。将头文件cuda_fp16.h添加至 opencv/modules/cudev/include/opencv2/cudev/common.hpp。由于网络环境原因,cmake过程中部分文件会因无法链接到下载地址导致cmake失败。,保存并关闭gedit编辑器。,保存并关闭gedit编辑器。保存并关闭gedit编辑器。不报错的话会输出以下信息。
2024-05-14 15:35:13
1059
2
原创 darknet_ros编译时出现nvcc fatal : Unsupported gpu architecture ‘compute_30‘
今天在ros中编译包的时候出现下图的错误。
2024-05-07 14:00:10
330
原创 使用yolov5训练自己的目标检测模型并部署在Jetson Nano上使用tensorrt加速推理
如下图所示,当我们选定目标以后,就会加载出来predefined_classes.txt 定义自己要标注的所有类别(如果类别多,是真的很方便,就不需要自己手打每个类别的名字了)。通过如下的图可以获得权重的名字和大小信息,可以预料的到,预训练权重越大,训练出来的精度就会相对来说越高,但是其检测的速度就会越慢。选择一个模型,在yolov5目录下的model文件夹下是模型的配置文件,有n、s、m、l、x版本,逐渐增大(随着架构的增大,训练时间也是逐渐增大)。我们打开命令终端,在中输入如下的命令,就可以安装了。
2024-04-18 17:35:49
1706
1
原创 第十九届全国大学生智能车竞赛信息汇总
链接:https://pan.baidu.com/s/12wgrRxBdEh89XUzaYev0CA?既然是比赛,那必然得先了解比赛的规则是什么,那么规则从哪里找呢,自然官方发布的公告里面。在参考《第十九届全国大学生智能汽车竞速比赛规则》的基础上,然后我们再来看《大赛规则可以阅读官方资料,这里不在赘述。目前竞赛讨论稿已出,可以学习一下了。同时这里也有详细的文档说明,可自取。
2024-02-28 16:02:21
2086
原创 我和jetson-Nano的故事(9)——散热风扇开机自启动
🌞🌞当使用Jetson Nano要跑一些如车道线检测等需要较大计算量的程序时,Nano主板上散热器会产生较大的热量,当温度达到一定值时,会使得主板受热而导致运算能力下降,甚至有可能会损伤主板🍊🍊因此,为避免主板过热,在进行使用Jetson Nano进行跑一些计算量较大的程序之前,通常需要在散热板上加装一个风扇增强散热,然后在开机的时候设置自启动,这样就不会担心由于粗心大意而导致意外发生。
2024-02-20 15:52:55
669
原创 Apollo星火培训——Cyber RT基础入门与实践
Apollo Cyber是首个专为自动驾驶定制的高性能且开源的实时通信框架,于2019年与Apollo 3.5开放平台同期发布,它主要解决了自动驾驶系统的高并发、低延迟、高吞吐、任务调度等问题,同时还提供了多种通信机制和用户级的协程,在资源有限的情况下会根据任务的优先级来进行调度处理。如下图所示,Cyber RT通过Component来封装每个算法模块,通过有向无环图(DAG)来描述Components之间的逻辑关系。对于每个算法模块,都有其优先级、运行时间、使用资源等方面的配置。
2023-07-09 20:38:29
632
原创 C++高级教程——C++ Web 编程
公共网关接口(CGI),是一套标准,定义了信息是如何在 Web 服务器和客户端脚本之间进行交换的。CGI 规范目前是由 NCSA 维护的,NCSA 定义 CGI 如下:公共网关接口(CGI),是一种用于外部网关程序与信息服务器(如 HTTP 服务器)对接的接口标准。目前的版本是 CGI/1.1,CGI/1.2 版本正在推进中。
2023-02-05 15:23:48
1849
2
原创 C++高级教程——C++多线程
当创建一个线程时,它的某个属性会定义它是否是可连接的(joinable)或可分离的(detached)。以下简单的实例代码使用 pthread_create() 函数创建了 5 个线程,并接收传入的参数。如果 main() 是在它所创建的线程之前结束,并通过 pthread_exit() 退出,那么其他线程将继续执行。在这里,pthread_create 创建一个新的线程,并让它可执行。这样的程序中的每个部分称为一个线程,每个线程定义了一个单独的执行路径。基于线程的多任务处理的是同一程序的片段的并发执行。
2023-02-05 14:48:52
697
原创 C++高级教程——C++ 信号处理
在这里,sig 是要发送的信号的编号,这些信号包括:SIGINT、SIGABRT、SIGFPE、SIGILL、SIGSEGV、SIGTERM、SIGHUP。让我们编写一个简单的 C++ 程序,使用 signal() 函数捕获 SIGINT 信号。不管您想在程序中捕获什么信号,您都必须使用 signal 函数来注册信号,并将其与信号处理程序相关联。有些信号不能被程序捕获,但是下表所列信号可以在程序中捕获,并可以基于信号采取适当的动作。这个函数接收两个参数:第一个参数是一个整数,代表了信号的编号;
2023-02-05 14:32:48
673
原创 C++高级教程——C++ 预处理器
宏描述LINE这会在程序编译时包含当前行号。FILE这会在程序编译时包含当前文件名。DATE这会包含一个形式为 month/day/year 的字符串,它表示把源文件转换为目标代码的日期。TIME这会包含一个形式为 hour:minute:second 的字符串,它表示程序被编译的时间。return 0;
2023-02-04 15:55:17
923
原创 C++高级教程——C++ 模板
在这里,type 是占位符类型名称,可以在类被实例化的时候进行指定。每个容器都有一个单一的定义,比如 向量,我们可以定义许多不同类型的向量,比如 vector 或 vector。库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念。在这里,type 是函数所使用的数据类型的占位符名称。正如我们定义函数模板一样,我们也可以定义类模板。模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。您可以使用模板来定义函数和类,接下来让我们一起来看看如何使用。
2023-02-04 15:38:43
1890
原创 C++高级教程——C++ 命名空间
/ 代码声明name::code;// code 可以是变量或函数// 第一个命名空间// 第二个命名空间// 调用第一个命名空间中的函数// 调用第二个命名空间中的函数return 0;
2023-02-04 15:36:37
584
原创 C++高级教程——C++ 动态内存
在这里,data-type 可以是包括数组在内的任意内置的数据类型,也可以是包括类或结构在内的用户自定义的任何数据类型。new 与 malloc() 函数相比,其主要的优点是,new 不只是分配了内存,它还创建了对象。如果要为一个包含四个 Box 对象的数组分配内存,构造函数将被调用 4 次,同样地,当删除这些对象时,析构函数也将被调用相同的次数(4次)。在 C++ 中,您可以使用特殊的运算符为给定类型的变量在运行时分配堆内的内存,这会返回所分配的空间地址。// 释放 pvalue 所指向的内存。
2023-02-04 15:33:36
661
原创 C++高级教程——C++ 异常处理
您可以通过继承和重载 exception 类来定义新的异常。} };try {//其他的错误 } }在这里,what() 是异常类提供的一个公共方法,它已被所有子异常类重载。这将返回异常产生的原因。
2023-02-04 15:30:14
808
原创 C++高级教程——C++ 文件和流
到目前为止,我们已经使用了 iostream 标准库,它提供了 cin 和 cout 方法分别用于从标准输入读取流和向标准输出写入流。本教程介绍如何从文件读取流和向文件写入流。要在 C++ 中进行文件处理,必须在 C++ 源代码文件中包含头文件 和。
2023-02-04 15:24:32
1986
原创 C++面向对象——C++数据封装
私有成员 total 是对外隐藏的,用户不需要了解它,但它又是类能正常工作所必需的。为了使类中的成员变成公有的(即,程序中的其他部分也能访问),必须在这些成员前使用 public 关键字进行声明。封装是面向对象编程中的把数据和操作数据的函数绑定在一起的一个概念,这样能避免受到外界的干扰和误用,从而确保了安全。数据封装是一种把数据和操作数据的函数捆绑在一起的机制,数据抽象是一种仅向用户暴露接口而把具体的实现细节隐藏起来的机制。C++ 程序中,任何带有公有和私有成员的类都可以作为数据封装和数据抽象的实例。
2023-02-04 14:15:14
398
原创 C++面向对象——C++ 数据抽象
让我们举一个现实生活中的真实例子,比如一台电视机,您可以打开和关闭、切换频道、调整音量、添加外部组件(如喇叭、录像机、DVD 播放器),但是您不知道它的内部实现细节,也就是说,您并不知道它是如何通过缆线接收信号,如何转换信号,并最终显示在屏幕上。因此,我们可以说电视把它的内部实现和外部接口分离开了,您无需知道它的内部实现原理,直接通过它的外部接口(比如电源按钮、遥控器、声量控制器)就可以操控电视。数据抽象是指,只向外界提供关键信息,并隐藏其后台的实现细节,即只表现必要的信息而不呈现细节。
2023-02-04 14:09:00
349
原创 C++面向对象——C++ 多态
导致错误输出的原因是,调用函数 area() 被编译器设置为基类中的版本,这就是所谓的静态多态,或静态链接 - 函数调用在程序执行前就准备好了。有了多态,您可以有多个不同的类,都带有同一个名称但具有不同实现的函数,函数的参数甚至可以是相同的。因此,由于 tri 和 rec 类的对象的地址存储在 *shape 中,所以会调用各自的 area() 函数。您可能想要在基类中定义虚函数,以便在派生类中重新定义该函数更好地适用于对象,但是您在基类中又不能对虚函数给出有意义的实现,这个时候就会用到纯虚函数。
2023-02-04 13:49:44
459
原创 C++面向对象——C++ 重载运算符和重载函数
就像加(+)运算符。当您调用一个重载函数或重载运算符时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,称为重载决策。重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的。当重载 () 时,您不是创造了一种新的调用函数的方式,相反地,这是创建一个可以传递任意数目参数的运算符函数。当重载 () 时,您不是创造了一种新的调用函数的方式,相反地,这是创建一个可以传递任意数目参数的运算符函数。
2023-02-04 13:44:03
900
原创 C++面向对象——C++继承
其中,访问修饰符 access 是 public、protected 或 private 其中的一个,用来修饰每个基类,各个基类之间用逗号分隔,如上所示。一个类可以派生自多个类,这意味着,它可以从多个基类继承数据和函数。其中的一个,base-class 是之前定义过的某个类的名称。当创建一个类时,您不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类,新建的类称为派生类。例如,哺乳动物是动物,狗是哺乳动物,因此,狗是动物,等等。
2023-02-02 23:18:44
244
原创 C++面向对象——C++ 类 & 对象
定义一个类,本质上是定义一个数据类型的蓝图。这实际上并没有定义任何数据,但它定义了类的名称意味着什么,也就是说,它定义了类的对象包括了什么,以及可以在这个对象上执行哪些操作。类定义是以关键字 class 开头,后跟类的名称。类的主体是包含在一对花括号中。类定义后必须跟着一个分号或一个声明列表。public :关键字 public 确定了类成员的访问属性。在类对象作用域内,公共成员在类的外部是可访问的。您也可以指定类的成员为 private 或 protected,这个我们稍后会进行讲解。
2023-01-31 23:27:44
370
原创 C++基础——C++ 数据结构
为了定义结构,您必须使用 struct 语句。structure tag 是可选的,每个 member definition 是标准的变量定义,比如 int i;或者 float f;或者其他有效的变量定义。在结构定义的末尾,最后一个分号之前,您可以指定一个或多个结构变量,这是可选的。} book;
2023-01-31 22:49:12
639
原创 C++基础——C++ 基本的输入输出
通过这些小实例,我们无法区分 cout、cerr 和 clog 的差异,但在编写和执行大型程序时,它们之间的差异就变得非常明显。所以良好的编程实践告诉我们,使用 cerr 流来显示错误消息,而其他的日志消息则使用 clog 流来输出。预定义的对象 clog 是 ostream 类的一个实例。cerr 对象附属到标准错误设备,通常也是显示屏,但是 cerr 对象是非缓冲的,且每个流插入到 cerr 都会立即输出。C++ 编译器根据要输入值的数据类型,选择合适的流提取运算符来提取值,并把它存储在给定的变量中。
2023-01-31 22:43:40
190
原创 C++基础——C++ 日期 & 时间
tm 结构在 C/C++ 中处理日期和时间相关的操作时,显得尤为重要。tm 结构以 C 结构的形式保存日期和时间。下面的实例使用了 tm 结构和各种与日期和时间相关的函数。C++ 继承了 C 语言用于日期和时间操作的结构和函数。为了使用日期和时间相关的函数和结构,需要在 C++ 程序中引用 头文件。有四个与时间相关的类型:clock_t、time_t、size_t 和 tm。下面是 C/C++ 中关于日期和时间的重要函数。下面的实例获取当前系统的日期和时间,包括本地时间和协调世界时(UTC)。
2023-01-31 22:30:49
276
原创 C++基础——C++ 引用
因此,第一个声明可以读作 “r 是一个初始化为 i 的整型引用”,第二个声明可以读作 “s 是一个初始化为 d 的 double 型引用”。试想变量名称是变量附属在内存位置中的标签,您可以把引用当成是变量附属在内存位置中的第二个标签。引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。当返回一个引用时,要注意被引用的对象不能超出作用域。所以返回一个对局部变量的引用是不合法的,但是,可以返回一个对静态变量的引用。
2023-01-31 22:19:44
241
原创 C++基础——C++ 指针
指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明。在这里,type 是指针的基类型,它必须是一个有效的 C++ 数据类型,var-name 是指针变量的名称。用来声明指针的星号 * 与乘法中使用的星号是相同的。但是,在这个语句中,星号是用来指定一个变量是指针。int * ip;/* 一个整型的指针 */ double * dp;/* 一个 double 型的指针 */ float * fp;
2023-01-30 23:13:14
1958
原创 C++基础——C++ 字符串
由于在数组的末尾存储了空字符,所以字符数组的大小比单词 “Hello” 的字符数多一个。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。C++ 标准库提供了 string 类类型,支持上述所有的操作,另外还增加了其他更多的功能。所以现在您可以只是粗略地看下这个实例,等理解了面向对象的概念之后再回头来理解这个实例。C++ 编译器会在初始化数组时,自动把 ‘’ 放在字符串的末尾。
2023-01-30 22:53:37
225
原创 C++基础——C++数组
所有的数组都是以 0 作为它们第一个元素的索引,也被称为基索引,数组的最后一个索引是数组的总大小减去 1。C++ 支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。在 C++ 中,数组是非常重要的,我们需要了解更多有关数组的细节。您将创建一个数组,它与前一个实例中所创建的数组是完全相同的。元素的索引是放在方括号内,跟在数组名称的后边。大括号 { } 之间的值的数目不能大于我们在数组声明时在方括号 [ ] 中指定的元素数目。如果您省略掉了数组的大小,数组的大小则为初始化时元素的个数。
2023-01-29 23:41:03
1446
原创 C++基础——C++ 数字
我们已经在之前章节的各种实例中定义过数字。// 数字定义 short s;int i;long l;float f;double d;// 数字赋值 s = 10;i = 1000;f = 230.47;// 数字输出 cout
2023-01-29 23:36:37
425
原创 C++基础——C++ 函数
在 C++ 中,函数由一个函数头和一个函数主体组成。返回类型:一个函数可以返回一个值。return_type 是函数返回的值的数据类型。有些函数执行所需的操作而不返回值,在这种情况下,return_type 是关键字 void。函数名称:这是函数的实际名称。函数名和参数列表一起构成了函数签名。参数:参数就像是占位符。当函数被调用时,您向参数传递一个值,这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量。参数是可选的,也就是说,函数可能不包含参数。
2023-01-29 23:15:42
325
原创 C++基础——C++ 判断
表达式的值是由 Exp1 决定的。如果 Exp1 为真,则计算 Exp2 的值,结果即为整个?如果 Exp1 为假,则计算 Exp3 的值,结果即为整个?如果布尔表达式为 true,则 if 语句内的代码块将被执行。如果布尔表达式为 false,则 if 语句结束后的第一组代码(闭括号后)将被执行。判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的)。请注意,冒号的使用和位置。C++ 编程语言提供了以下类型的判断语句。
2023-01-29 23:07:49
1402
原创 C++基础——C++ 循环
如果条件永远不为假,则循环将变成无限循环。for 循环在传统意义上可用于实现无限循环。由于构成循环的三个表达式中任何一个都不是必需的,您可以将某些条件表达式留空来构成一个无限循环。有的时候,可能需要多次执行同一块代码。一般情况下,语句是顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。循环控制语句更改执行的正常序列。当执行离开一个范围时,所有在该范围中创建的自动对象都会被销毁。C++ 提供了下列的控制语句。点击链接查看每个语句的细节。编程语言提供了允许更为复杂的执行路径的多种控制结构。
2023-01-29 23:01:59
421
原创 C++基础——C++ 存储类
当您有多个文件且定义了一个可以在其他文件中使用的全局变量或函数时,可以在其他文件中使用 extern 来得到已定义的变量或函数的引用。还应注意的是,定义 ‘register’ 并不意味着变量将被存储在寄存器中,它意味着变量可能存储在寄存器中,这取决于硬件和实现的限制。从C++11开始,auto 关键字声明一个变量,该变量的类型是从其声明中的初始化表达式推导出来的。在 C++ 中,当 static 用在类数据成员上时,会导致仅有一个该成员的副本被类的所有对象共享。存储类是所有局部变量默认的存储类。
2023-01-28 22:24:05
211
原创 C++基础——C++ 修饰符类型
C++ 允许在 char、int 和 double 数据类型前放置修饰符。修饰符用于改变基本类型的含义,所以它更能满足各种情境的需求。修饰符和可应用于整型,和可应用于字符型,可应用于双精度型。修饰符和也可以作为或修饰符的前缀。。C++ 允许使用速记符号来声明无符号短整数或无符号长整数。您可以不写 int,只写单词 unsigned short 或 unsigned long,int 是隐含的。例如,下面的两个语句都声明了无符号整型变量。
2023-01-28 22:19:30
303
原创 C++基础——C++变量作用域
在函数或一个代码块内部声明的变量,称为局部变量。它们只能被函数内部或者代码块内部的语句使用。也就是说,全局变量一旦声明,在整个程序中都是可用的。在所有函数外部定义的变量(通常是在程序的头部),称为全局变量。全局变量的值在程序的整个生命周期内都是有效的。在程序中,局部变量和全局变量的名称可以相同,但是在函数内,局部变量的值会覆盖全局变量的值。当局部变量被定义时,系统不会对其初始化,您必须自行对其初始化。我们将在后续的章节中学习什么是函数和参数。本章我们先来讲解声明是局部变量和全局变量。
2023-01-28 22:06:42
354
原创 C++基础——C++ 变量类型
变量定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储。在这里,type 必须是一个有效的 C++ 数据类型,可以是 char、w_char、int、float、double、bool 或任何用户自定义的对象,variable_list 可以由一个或多个标识符名称组成,多个标识符之间用逗号分隔。double d;行 int i, j, k;声明并定义了变量 i、j 和 k,这指示编译器创建类型为 int 的名为 i、j、k 的变量。变量可以在声明的时候被初始化(指定一个初始值)。
2023-01-28 22:01:53
311
面向自动驾驶领域的多传感器融合系统课程
2022-05-02
yolov3-signal.weights
2021-08-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人