自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

SensizliK

啥都懂一点点的自动驾驶菜鸟

  • 博客(50)
  • 收藏
  • 关注

原创 【Docker】学习笔记(一)三剑客之 docker engine仓库、镜像与容器的基本操作

bridgehostnone创建网络自定义桥docker network create ems # 上面等价于 docker network create -d bridge ems # 不写,默认网桥类型为bridge在指定的同一个网络中运行多个容器启动容器时明确指定网络(前提是指定的网络已经存在);# --network ems 指定ems,前提是ems已经存在# 查看网络中的容器有哪些(字段:"Containers)# 在容器tomcat02中用容器名访问tomcat01。

2023-12-06 11:19:43 1145

原创 【Protobuf】( ubuntu18/20/22 ) apt | 源码安装卸载protobuf、CMakeLists指定多版本protobuf某一特定版本

ubuntu18/20/22 => apt/源码安装、卸载protobuf、CMakeLists指定多版本protobuf共存某一版本

2023-12-06 10:47:07 1606 4

原创 【CMakeLists】学习笔记(指令详解&&即学即用&&快速入门哦)

编写CMakeLists.txt最常用的功能就是调用其他的头文件(*.h*.hpp)、动态链接库(*.so)、静态链接库(*.a),将源文件*.cpp*.c*.cc编译成目标可执行或目标可链接库文件。CMake是makefile的上层工具,用于跨平台构建环境,生成可移植的makefile,并简化自己动手写makefile时的巨大工作量。

2023-12-05 17:22:50 2241

原创 Ubuntu 20.04 中的 python 命令指向 Python 3.8.10 而不是 Python 2.7

这将注册两个 Python 版本到 update-alternatives 系统中,并为 Python 3.8 设置更高的优先级(2)。执行此命令后,你会看到一个选择列表,可以选择你希望默认使用的 Python 版本。输入对应的数字选择 Python 3.8。首先,检查是否已经安装了 Python 3.8.10。

2024-07-10 13:46:47 211

原创 python绘制玫瑰线

【代码】python绘制玫瑰线。

2024-07-02 17:32:25 396

原创 m5_python字符串-查找判断

【代码】m5_python字符串-查找判断。

2024-06-18 09:00:00 120

原创 m6_python字符串-拼接

【代码】m6_python字符串-拼接。

2024-06-18 09:00:00 87

原创 m4_python字符串-切割与替换

【代码】m3_python字符串-切割与替换。

2024-06-17 17:22:59 289

原创 m3_python字符串-常规操作部分API

【代码】m3_python字符串-常规操作部分API。

2024-06-17 17:17:49 72

原创 m2_python字符串-索引与切片

【代码】m2_python-字符串-索引与切片。

2024-06-14 19:03:44 220

原创 m1_python字符串-格式化输出

【代码】m1_python字符串-格式化输出。

2024-06-14 18:52:37 99

原创 linux确定网卡型号

可以看出无线网卡Network controller Intel。有线网卡Ethernet controller Realtek。linux确定网卡型号。

2024-04-23 09:21:27 185 1

原创 【C++多线程编程】(十)之 lock_guard与unique_lock的区别

所有 lock_guard 能够做到的事情,都可以使用 unique_lock 做到,反之则不然。那么何时使lock_guard呢?很简单,需要使用锁的时候,首先考虑使用 lock_guard,因为lock_guard是最简单的锁。提供了更灵活的上锁和解锁方式。它在构造时可以选择是否上锁,而在析构时会根据构造时的状态决定是否解锁。这种方式允许在锁住的期间手动解锁,并在需要时手动重新上锁,提供了更大的灵活性。适用于需要在进入临界区时锁住互斥量,但在一些条件下可能需要提前解锁,然后重新锁定互斥量的复杂场景。

2023-12-25 12:39:21 1069 1

原创 【C++多线程编程】(九)之 死锁(deadlock)及如何避免

死锁(Deadlock)是多线程或多进程并发编程中一种常见的问题,它发生在两个或多个线程(或进程)互相等待对方释放资源,导致所有参与的线程都无法继续执行的状态。死锁是一个需要仔细设计和管理的问题,因此在编写多线程或多进程的程序时,需要谨慎地考虑资源的获取和释放顺序,以及采取适当的同步机制来避免死锁的发生。典型的死锁场景涉及多个资源和多个线程,并且每个线程都在等待其他线程释放资源。是 C++ 标准库中的一个函数模板,用于将一个对象包装成一个引用,从而能够在函数调用中传递引用语义而不是传值语义。

2023-12-25 09:00:00 782

原创 【C++多线程编程】(八)之 详解trylock ( )

尝试获取互斥量的锁,如果成功获取,则执行一些对共享资源的操作,并在最后手动解锁。如果没有成功获取锁,程序输出失败消息。这种方式适用于需要在获取锁之前检查锁的状态的场景。,该函数用于尝试上锁,但如果锁已经被其他线程占用,则不会阻塞当前线程,而是会立即返回。这使得我们可以根据返回值来判断互斥量是否已经被其他线程锁住。如果当前线程成功获取了锁,它会返回。类型的互斥量提供了一个成员函数。

2023-12-23 10:00:00 979 1

原创 【C++多线程编程】(七)之 详解互斥量mutex、上锁lock、解锁unlock

在多线程环境中,多个线程可能同时访问共享的数据,如果没有适当的同步机制,就会导致数据不一致或产生其他问题。)是一种用于实现线程同步的机制,用于保护共享资源免受并发访问的机制,以防止多个线程同时访问或修改相同的数据而引发竞态条件(Race Condition)。当一个线程获得互斥量的锁时,其他线程尝试获取锁将会被阻塞,直到持有锁的线程解锁。上锁是指在访问共享资源之前,通过互斥量锁住资源,确保只有一个线程能够进入临界区,从而防止其他线程同时访问相同的资源。手动解锁,执行一些不需要互斥量保护的代码,最后通过。

2023-12-23 09:00:00 613

原创 【C++多线程编程】(六)之 this_thread线程ID获取get_id()、线程休眠sleep_for()|sleep_until()、线程执行权yield()学习

的主要场景是在多线程编程中,当一个线程希望让出 CPU 执行权,以便其他线程能够执行。是 C++ 标准库中提供的一个命名空间,它包含了与当前线程相关的功能。是 C++ 标准库中的一个函数,它的作用是让当前线程放弃其执行权,主动让出 CPU 时间片,以便其他线程有机会执行。用于让当前线程休眠直到指定的时间点。该函数接受一个表示时间点的参数,并在当前线程休眠直到达到或超过该时间点。函数的调用会导致当前线程进入就绪态,允许调度器在就绪线程中选择另一个线程来执行。被用来休眠当前线程至指定的时间点。

2023-12-22 09:00:00 1490 1

原创 【C++】以追加方式将数据写入 与当前系统时间戳相关联的日志文件中

生成一个带有时间戳的日志文件,文件名为"maData",保存在"./log/"目录下。日志文件包含两列:整数值(变量a)和相应的双精度值(变量b)。程序在一个循环中运行,向文件写入100行数据。

2023-12-22 09:00:00 515

原创 【C++多线程编程】(五)之 线程生命周期管理join() 与 detach()

这种阻塞行为是为了协调不同线程之间的执行顺序,以避免并发问题或确保线程的执行顺序符合程序的逻辑。方法时,调用线程将被阻塞,直到被调用的线程执行完成。当被分离的线程运行结束时,其资源(如线程的栈空间等)会被自动释放,不需要手动调用。被分离的线程将在后台运行,即使主线程退出,被分离的线程仍然可以继续执行。后,主线程不再等待被分离的线程执行完成,而是让它在后台运行。等待线程的完成,以避免可能的资源泄漏和其他难以调试的问题。方法时,需要确保主线程不再依赖于被分离的线程的执行。之前检查线程的状态,以确保线程在调用。

2023-12-21 15:34:11 1513 1

原创 【C++多线程编程】(四)之 创建线程方式

带来的线程分离可能会导致一些问题,如在主线程退出时新线程仍在运行,可能导致资源泄漏等。在实际应用中,最好使用。将新线程和主线程分离。分离后,主线程将不再等待新线程的完成,新线程将在后台运行,直到它完成为止。执行完毕,然后再继续执行主线程的代码。尽管这是一种创建没有命名线程的方式,但请注意,或其他合适的线程管理机制确保线程的正常结束。是一个线程同步的操作,它会让主线程等待。将函数添加到线程中,并传入相应的参数即可。函数会阻塞主线程,直到调用。直接创建线程,没有名字。main函数是主线程。

2023-12-21 15:32:11 518

原创 【CMakeLists】CMakeLists四种方法链接没有官方CMake配置文件的库(yaml-cpp为例)

pkg-config和find_package是两种不同的机制,find_package通常用于查找包含有CMake配置文件(.cmake)的库。而yaml-cpp并没有提供官方的CMake配置文件,所以不能直接使用find_package来查找它。pkg-config是一个用于检索库编译和链接标志的工具。对于没有CMake配置文件的库,你可以使用pkg-config来查找和链接。首先你得明确知道你的yaml-cpp头文件与库文件位置在哪。最快的方法,直接链接,但是如果没有make编译阶段会报错。

2023-12-20 19:24:21 1044

原创 【控制器局域网】CAN报文学习笔记(四)之 字节排序、信号提取实例1

以下面的表格来表示字节顺序和位顺序,用红色表示高位MSB,蓝色表示低位LSB,绿色为LSB到MSB的过度。填入 十六进制整数0x8FC0 , 对应二进制 1000 1111 1100 0000,如下图。填入 十六进制整数0x8FC0 , 对应二进制 1000 1111 1100 0000,如下图。Motorola Forward LSB (Little-Endian) 小端序。矩阵文档中的起始位置是MSB的起始位36,往高字节借位。矩阵文档中的起始位置是LSB的起始位36,往低字节借位。

2023-12-20 18:17:28 673

原创 【控制器局域网】CAN报文学习笔记(三)之 字节移位运算

需要注意的是,右移位运算的结果取决于移位的对象是有符号整数还是无符号整数。在处理有符号整数时,右移位可能会导致符号位的复制,而在处理无符号整数时,右移位总是用零填充。右移位运算将二进制数的所有位向右移动指定的位数,左侧用原始符号位填充(对于有符号整数)或者用零填充(对于无符号整数)。在计算机编程中,通常有两种字节移位运算:左移位和右移位。左移位运算将二进制数的所有位向左移动指定的位数,右侧用零填充。其中,value 是要进行左移的值,num_bits 是左移的位数。

2023-12-19 22:47:39 644

原创 【CmakeLists】规范编写CmakeLits文件,以查找链接ZMQ与OpenCV库为例

配置和生成项目时,CMake将尝试查找和链接ZeroMQ和OpenCV库。如果找到,它将输出相关信息并配置项目以使用这两个库。如果未找到任一库,它将产生致命错误消息并停止配置过程。

2023-12-19 09:00:00 529

原创 【控制器局域网】CAN报文学习笔记(二)之 报文解析

CAN报文分为两种类型:数据帧(Data Frame)和远程帧(Remote Frame)。在CAN通信中,发送方将数据按照上述格式发送到总线上,接收方接收并解析这些数据,然后进行相应的处理。标识符的不同位表示不同的信息,如设备、消息优先级等。在数据帧中,这个位是数据帧的一部分。帧结束字段包含 7 位,用于表示帧的结束。它占据 4 位,允许表示的数据长度范围是 0 到 8 字节。在数据帧中,这个字段包含实际的传输数据。该位总是为低电平(0),表示一个帧的开始。数据帧的帧类型位占据标识符字段中的第一个位。

2023-12-18 17:05:14 891 1

原创 【控制器局域网】CAN报文学习笔记(一)之 字节排序

在通信和计算机系统中,字节排序是指多字节数据在存储或传输过程中的排列顺序。MSB(Most Significant Byte)和Motorola ForwardLSB(Least Significant Byte)是两种不同的字节排序方式,也称为大端序和小端序。不同的处理器和体系结构可能采用不同的字节排序方式。大多数个人计算机和服务器使用小端序,而一些嵌入式系统和网络协议使用大端序。当不同系统之间进行数据交换时,字节序列的一致性变得至关重要,否则可能会导致数据解释错误。

2023-12-18 16:55:18 1251

原创 【C++多线程编程】(三)之详解lock_guard

在这个例子中,std::lock_guard 对象 lock 的作用是确保在 sharedResourceFunction 函数中对共享资源的访问是线程安全的。自动上锁和解锁: 在 std::lock_guard 对象的构造函数中,互斥锁会被自动上锁,而在析构函数中,互斥锁会被自动解锁。这确保了在作用域内互斥锁一直是被锁住的状态,从而防止了忘记手动释放锁的错误。std::lock_guard 的主要作用是在多线程环境中简化互斥锁的使用,通过RAII(资源获取即初始化)方式确保在作用域内对互斥锁的安全管理。

2023-12-17 13:46:30 879 1

原创 【C++多线程编程】(二)之详解锁(lock)和解锁(unlock)

在C++多线程编程中,锁(lock)和解锁(unlock)通常用于管理共享资源的访问,以防止多个线程同时对资源进行修改,从而避免竞态条件(Race Condition)和数据不一致性问题。C++标准库提供了一些工具来实现锁,其中最常用的是互斥锁(std::mutex)和锁卫士(std::lock_guard)。:这一行创建了一个 std::lock_guard 对象,它在构造时锁住 myMutex,在析构时释放锁。总体而言,这个例子演示了如何使用互斥锁和锁卫士确保多个线程对共享资源的安全访问。

2023-12-17 13:40:29 837

原创 【ubuntu】Linux常用视频播放软件

在Ubuntu操作系统上,有许多常用的视频播放软件可供选择。

2023-12-16 09:00:00 9511 1

原创 【github】仓库拉取、代码提交及常用命令学习

GitHub 是一个基于 Git 版本控制系统的代码托管平台,它为开发者提供了一个协作和共享代码的平台。

2023-12-16 09:00:00 431

原创 【C++多线程编程】(一)之详解互斥量mutex

当一个线程获得互斥量的锁时,其他线程尝试获取锁将会被阻塞,直到持有锁的线程解锁。mutex 是互斥量(Mutex)的缩写,是一种用于多线程编程的同步机制。互斥量是一种用于保护共享资源免受并发访问的机制,以防止多个线程同时修改相同的数据而引发竞态条件(Race Condition)。在多线程环境中,多个线程可能同时访问共享的数据,如果没有适当的同步机制,就会导致数据不一致或产生其他问题。在上述示例中,std::mutex 用于创建一个互斥量,std::lock_guard 则用于在作用域结束时自动释放锁。

2023-12-15 15:00:13 643 1

原创 【CAN】在linux中读取监听控制器局域网CAN数据帧操作(一)

在 Linux 系统中,CAN(Controller Area Network)接口可以通过 SocketCAN 接口进行操作。

2023-12-15 09:00:00 935

原创 【CAN】在linux中读取监听控制器局域网CAN数据帧操作 (二) 之 C++代码实现

可以使用 SocketCAN 接口库来实现对 can0 接口的数据帧读取,使用 SocketCAN 接口,将其绑定到 can0 接口,并循环读取接收到的 CAN 数据帧。

2023-12-15 09:00:00 684

原创 【Apollo】编译 Apollo 源码

在支持 GPU 的 Apollo 容器中运行 CPU 构建是没问题的,而在仅支持 CPU 的容器中运行 GPU 构建则会失败。由于 bazel test 继承了 bazel build 的所有选项,因此上述讨论也适用于 apollo.sh test。概念,以取代之前 Apollo 版本中的 build_cyber、build_planning 等概念。有三种 USE_GPU: USE_GPU_HOST、USE_GPU_TARGET 和 USE_GPU。可以编译整个模块,也可以单独编译某一个子模块。

2023-12-14 19:09:26 1681

原创 【bash】Bash脚本基础语法学习

Bash(Bourne Again SHell)是一种命令行解释器,通常在Unix和Linux系统上使用。Bash脚本是一系列的命令,它们按照脚本中定义的顺序执行。

2023-12-14 10:10:41 1070

原创 【ubuntu】Linux常用截屏软件

在Linux系统中,有多种强大的截屏工具可供选择。

2023-12-14 09:53:18 1212

原创 【Ubuntu】Linux常用录屏软件

OBS Studio 提供了更多高级的功能,例如图层、过渡效果和直播功能,因此它可能有一些学习曲线。你可以在 OBS Studio 官方网站 上找到详细的文档和教程。SimpleScreenRecorder 是一款功能强大而易于使用的录屏工具,支持多种输出格式和编码器。recordMyDesktop 提供了一个简单的界面,适用于需要基本录屏功能的用户。OBS Studio 最初是一个直播工具,但它也提供了强大的屏幕录制功能。Kazam 是一个简单而直观的屏幕录制程序,提供基本的录屏功能。

2023-12-12 14:02:21 1768 2

原创 【Apollo】ubuntu20.04源码安装apollo8.0

第一次进入 docker 时或者 image 镜像有更新时会自动下载 apollo 所需的 image 镜像文件,下载镜像文件的过程会很长,请耐心等待(6G左右)。的一些模块的编译和运行需要依赖 NVIDIA GPU 环境(例如感知模块),如果有编译和运行这类模块的需求,则需要安装 NVIDIA GPU 驱动。完成编译后,即可在Docker环境下启动Dreamview进行测试。代码下载的时间视网速的快慢而有所区别,请耐心等待。进入容器后,如果在步骤二和步骤四分别安装了。如果启动成功,在终端会输出以下信息。

2023-12-12 11:26:17 2042 1

原创 【matplotlib】ubuntu用pip3安装python可视化库matplotlib

ubuntu用pip3安装python可视化库matplotlib

2023-12-08 15:47:14 771 2

原创 【Docker】学习笔记(三)三剑客之 docker-compose文件书写项目多服务容器运行

如果本地仓库镜像不存在,Compose将尝试从官方镜像仓库将其pull下来,如果你还指定了build,在这种情况下,它将使用指定的build选项构建它,并使用image指定的名字和标记对其进行标记。中指定的选项(例如,CMD,EXPOSE,VOLUME,ENV)都被遵守,不需要在。暴露端口,但不映射到宿主机,只与被链接的服务访问,且仅可以指定内部端口为参数。指定容器名称,如若不指定,默认名称使用: 项目名称-服务名称-序列号 格式。指定启动容器的镜像,可以是镜像仓库/标签或者镜像id(或者id的前一部分)

2023-12-08 15:27:44 1189

Hungarian algorithm匈牙利算法matlab实现

Hungarian algorithm匈牙利算法matlab实现 1.计算成本矩阵; 2.寻找独立零; 校验 3.打勾划线; 调用匈牙利算法主体返回最优分配结果,与最小成本

2023-12-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除