自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

DFminer

每个人的一生中都有那么一段时间,那段时间是付出了很多努力,却看不到回报的日子,我们把它叫做扎根。

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

原创 【Livox】安装Livox-ros-driver2

【Livox】安装Livox-ros-driver2

2023-05-07 20:30:18 4791 3

原创 【自动驾驶——采集数据 livox激光雷达,IMU,摄像头】

rosbag record /livox/lidar /livox/loc /image_view/image_left //回车开始录制数据。$sudo docker exec -it “我们起的docker的名字” /bin/bash //启动docker窗口。$sudo docker exec -it “我们起的docker的名字” /bin/bash //启动docker窗口。

2023-04-14 12:50:48 418

原创 [更改挂载点]重新挂载硬盘

这里 /dev/nvme0n1p1 设备(大小为 880GB)已经被挂载到 /media/nvidia/SSD 目录下,并且使用了 304GB,剩余 532GB,使用率为 37%。这意味着 /dev/nvme0n1 已经被格式化并且在使用中,挂载点是 /media/nvidia/SSD。如果你想重新格式化 /dev/nvme0n1p1,首先需要卸载这个挂载点。./copy_rootfs.sh /dev/xxx,xxx为外部存储设备。系统启动后后,执行df -h观察/目录是否在外部存储介质中。

2024-05-15 15:40:41 131

原创 【bash】笔记

首先,你需要一个包含CUDA和NVIDIA驱动的Docker镜像。NVIDIA提供了官方的CUDA镜像,这些镜像是基于不同的基础镜像(如Ubuntu、Debian等)构建的,并且已经包含了CUDA和NVIDIA驱动。这在脚本内部需要引用脚本名称或者路径时非常有用,比如在打印日志、错误信息或者像上面提到的帮助信息中显示脚本名。不过,通常情况下,如果你使用的是带有CUDA的预配置镜像,这些库应该已经包含在镜像内。这确保了在没有指定Docker镜像仓库的情况下,有一个默认的仓库值可供使用。

2024-05-08 21:37:08 406

原创 【linux】隐藏文件,vim 或 gedit 打开隐藏文件

随着越来越多的应用遵循XDG Base Directory Specification,它们会将自己的配置文件存储在这个目录下,而不是直接放在用户主目录。它包含了一系列命令和设置,用于定制用户的shell环境,比如定义命令别名(aliases)、设置环境变量(如。开头命名,它们通常用于存储用户或系统的配置信息、缓存数据或其他不想让用户直接看到的文件。目录也是根据XDG规范使用的,用于存放用户特定的本地数据,包括但不限于应用程序的数据文件、库文件和某些配置。文件会被读取并执行,从而应用用户的个性化设置。

2024-05-08 20:17:49 316

原创 【无标题】

现在可以使用docker run --runtime=nvidia -it your_gpu_image。nvidia-container-runtime 已经从3.9.0-1 升级成了3.13.0-1。暂时跳过 --runtime nvidia ,GPU加速,建立容器。在home/nvidia下新建文件夹。导入ubuntu20.04镜像。在into.sh中配置挂载目录。

2024-04-26 11:02:18 661 2

原创 【apollo】orin

【代码】【apollo】orin。

2024-04-20 09:48:15 110

原创 【docker】在ARM架构下安装Ubuntu 20.04的Docker

以上步骤适用于ARM v8/ARM64架构,如果您使用的是其他ARM架构,请确保使用正确的架构字串,例如deb [arch=armhf] ...替换deb [arch=arm64] ...。卸载干净docker。

2024-04-19 15:11:14 246

原创 【linux】进程地址被占用

查找并关闭占用端口的进程,找到占用端口的进程后,使用sudo kill -9 结束该进程:

2024-04-18 17:31:00 494 1

原创 【docker】把镜像save出来

为了确保提交的镜像反映容器某一精确时刻的稳定状态,应在提交Docker容器为新镜像前先停止该容器。这样生成的新镜像将更可靠、易于管理和重现。docker save 镜像名:版本号 -o /路径/保存的包名.tar。sudo docker commit 容器名 镜像名:tag。

2024-04-18 15:32:40 397

原创 【ros2】ros1和ros2可以同时在一台机器上运行吗

可以的,ROS 1 和 ROS 2 是两个不同版本的 Robot Operating System (ROS),它们分别有着各自的架构、消息传递机制以及配套工具集。尽管存在这些差异,ROS 1 和 ROS 2 可以在同一台 Ubuntu 系统上共存并独立运行。综上所述,虽然 ROS 1 和 ROS 2 可以在同一台 Ubuntu 计算机上共存并独立运行,但需要妥善管理和配置环境以避免版本冲突,并可能需要额外的工具来桥接两者之间的通信。在实际操作中,应仔细规划和组织系统结构,以确保项目的顺利进行。

2024-04-16 20:47:45 632

原创 【linux】如何写一个launch文件

文件是为了方便地启动一组相关的节点(nodes)、参数服务器(parameter server)参数、消息发布者/订阅者(publishers/subscribers)、服务(services)以及动作服务器(action servers)。标签启动一个ROS节点。,并声明必要的命名空间。编写一个ROS(Robot Operating System)的。标签将参数加载到参数服务器。: 所有launch文件都以XML格式编写,需包含根元素。

2024-04-15 22:04:31 352

原创 【读书笔记】自动驾驶与机器人中的SLAM技术——高翔

【读书笔记】自动驾驶与机器人中的SLAM技术——高翔,第五章,基础点云处理重点:点云的相邻关系是许多算法的基础。

2024-04-15 21:53:45 521

原创 【ubuntu20.04】安装GeographicLib

ubuntu20.04 ,下载 GeographicLib-2.3.tar.gz跟着官方步骤安装,会出错!原因请参考我的另一篇blog。

2024-04-11 18:53:06 786

原创 【包编译】库文件安装错位置怎么办

原因:因为GeographphicLib的库文件在编译的时候没有放到默认系统目录usr/local下,而是放到了/tmp下,所以位于GeographphicLib-2.3/cmake下的FindGeographicLib.cmake文件找不到库文件了。重新编译并在cmake步骤,设置编译建图工作空间报错:找不到库文件我实际上已经按照常规流程下载、解压、编译并安装了。

2024-04-11 18:22:49 1154

原创 【今日bug】在本地创建容器,进入后快速退出

的格式错误提示表明,该镜像可能为ARM或其他非x86架构构建。因此,当容器尝试在x86_64宿主机上运行非x86_64的。: 您的宿主机(OMEN-45L)很可能是基于x86_64(AMD64)架构的。结论:是的,我本地机器是x86的,镜像是arm的。没办法把arm的镜像生成的容器在x86上用。: 错误信息中的“exec format error”指出,Docker容器在尝试执行。时,发现该二进制文件的格式与当前系统的处理器架构不匹配。,通常表示在容器内部执行的命令(这里是。)与当前系统架构不兼容。

2024-04-11 10:46:02 440

原创 【规划算法】A星 与 混合A星

本文提出了一种改进的A*算法与动态窗口技术(Dynamic Window Approach,DWA)相结合的方法。

2024-04-10 19:41:44 281

原创 【一周年】我的创作纪念日

>>我越来越感觉到工作之后,学过的高数线代概率,终于有的放矢了。>>>我的初心就是,因为搞的是工程嘛,会遇到很多奇奇怪怪的问题和困难,很多是以后可能会用到的,记录下来,可能用得上吧,就像随手攒的塑料袋,说不定什么时候就用上了。>>> 记录blog,遇到难关,一切磕磕碰碰难免的,一个个解决掉,一个个攻克掉,这些经验,是工程师的勋章,是工程师的荣誉!>>> 也许我会继续深造,去读读书,但工作不能停,项目要一直做,脱离实际做空中楼阁的事情不划算。

2024-04-10 19:38:12 228

原创 【C++】std::fixed设置输出流中浮点数 (保留固定小数位)

如果不使用 std::fixed,即使设置了精度,编译器也可能根据数值大小自动选择最佳的浮点数表示方式,不一定是固定的小数位数 ” 我们来。因此,当你既想固定小数点,并且希望小数点后保留特定数量的数字时,通常会同时使用这两个操纵符。这样可以确保输出的浮点数具有确定且固定的精度。确保了浮点数始终以固定的小数位数格式显示,而不受其绝对值大小的影响。在一起使用时,通常是为了精确控制输出浮点数的小数部分的显示格式。它定义了在输出流中显示的最少有效数字数,包括小数点后的数字。指定输出的是固定小数点格式,这意味着。

2024-04-02 12:33:04 559

原创 【标定】手动标定步骤

输入原始数据 打点仪 把角点绝对坐标 保存下来 ,放到calibration里,这个就会把白条显示出来。通过矩阵转换成车体坐标 用激光雷达录角点,现在需要激光雷达坐标转车体坐标的矩阵参数。播放激光雷达角点包,播放打点仪的marker角点数据。打开udp_server,用调试助手发尝试的矩阵参数(一串数),后六位是要修改的,调整后6位数,使角点对准,要激光雷达点云去对准白边。先调旋转,后调平移 建图用的是车体坐标。得到的6位数用于建图,把图转到大地坐标系下。打开sscom,播放静态数据包。

2024-03-27 11:19:55 647

原创 【卡车无人驾驶系统】铲前问题及解决方案

解决方案:利用合适的算法,生成带高程的栅格图(三维灰度图)。高程分三个档位,分别为车可以压过去,车可以跨过去,车必须绕过去。同时,我们与采矿部门协商,对复杂道路进行修整,以满足无人驾驶要求,包括坡度、平整度和宽度。在铲前挪动时,需要准确识别地形,如:周围挡墙、山体和路上的障碍物。根据铲斗位置和已识别的地形图,规划进铲的路径以及准确的装载位置。车辆控制方面,考虑到现场路况复杂,坡度较大,平整度和弯度较大。修改控制代码,以适应不同的道路状况,并进行调试和优化。在夜间、大雾和灰尘行驶时,红外摄像头的适应性较好。

2024-03-21 17:20:07 279

原创 【卡车无人驾驶系统】轨迹和建图准确性

答:在点云层面,把铲斗高度(大概在3米~4米)以上的点云都删去,这样就把铲斗扣掉了,再生成三维栅格图。这样生成的三维栅格图,在铲斗下面位置出现的栅格就是铲斗下面障碍物的栅格。答:在建图开始的一刻,我们现在车的初始位姿是准的(车位姿也就是雷达坐标系,现在把车的初始位姿转到大地坐标系下)我们的思路是:既然转弯会发生偏移,我们干脆录一个路径收尾相接的数据包,像个回环路径。栅格图要得是灰度图。灰度栅格图对规划也是有影响的,要结合规划一起看,比如碰撞检测的逻辑。二维栅格地图里的障碍物的坐标就是障碍物真实的大地坐标。

2024-03-21 17:10:26 701

原创 【C++】输入流操作符 >> 的重载实现

若未能成功解析为整数(比如字符串中没有数字或格式有误),流的状态会置为失效,可以通过。流中开始读取字符,试图找到并解析一个符合整数格式的序列。它会跳过开头的空白字符(空格、制表符、换行符等),直到遇到第一个非空白字符。:一旦找到数字字符序列,它会继续读取直到遇到非数字字符或其他表明整数结束的条件为止。此时,它将已读取的字符序列转换为对应的整数值。对象,它已经与字符串 vStr[1] 关联起来,可以视为一个可以从字符串中读取数据的输入流。:内部逻辑上,此重载的操作符函数会从。)的解析和转换逻辑。

2024-03-21 16:26:46 208

原创 【视觉slam14讲】笔记感悟(前六章)

我现在要估计我的位姿T准不准,我想让实际的数据与观测数据间的误差尽可能小,来寻找一个最优的T。我们经常会构建与位姿有关的函数,然后讨论该函数关于位姿的导数,以调整当前的估计值。外参是相机的R和t,外参会随着相机运动发生改变,也就是slam待估计中的目标,代表机器人的轨迹。李群和李代数是可以对应的,每个李群的元素都可以找到一个李代数的元素对应。对于转换中的旋转,用欧拉角可以直观的进行理解,但是如果工程中用的话,可能会出现万向锁的问题,如何理解万向锁,可以参考下面的视频。我们最终得到我最可能的位姿T了吗?

2024-03-18 09:29:36 636

原创 ROS2 之 SLAM 选型

ORB-slam 是基于视觉orb图像特征的 三维定位和地图构建的算法,搞视觉的。但只能保存稀疏的点云地图,不能输出栅格地图和稠密的点云地图,在ros导航领域有所欠缺。RTAB-Map 支持传感器丰富:RGB-D相机,双目,单线多线雷达,imu,gps。自带里程计,地图多样(2d,3d),可以同时生成2d栅格地图,三维点云地图。基于多线激光雷达和imu,适合室外大规模的建图和导航。Cartographer 加了回环检测,能进行地图修正,也支持多线雷达,支持3D建图。GMapping 很老,不用。

2024-02-29 23:00:49 191

原创 linux如何批量删除bag包

在Linux中,如果您想要批量删除文件,您可以使用`rm`命令和通配符。

2023-11-10 12:30:41 105

原创 【上位机】

"上位机"(Host Computer)这个术语在自动化、嵌入式系统和电脑网络中常见,它通常指的是可以控制和管理一个或多个下位机(通常是指嵌入式设备或者其他电脑系统)的设备。例如,你可能有一个温度传感器的数据通过串口发送到PC,这里的PC就是作为上位机,而传感器和它的微控制器则是下位机。在开发过程中,开发人员可能会编写专门的上位机软件,以便于调试和测试下位机,这些软件可以直接发送原始的串口命令,或者通过更加复杂的图形界面来控制下位机。2. 数据处理:接收、解析、存储来自下位机的数据。

2023-11-08 10:11:34 137

原创 投资量化(1)

均线能帮助分析师识别价格趋势和可能的反转点,常用的周期有5日、10日、20日、30日、60日、120日和250日等。K线和D线是通过特定公式计算出来的,而J线是由K线和D线的值计算得出。当MACD线从下向上穿过信号线时,这被视为一个买入信号,表明市场价格可能上涨,市场处于上升趋势;当MACD线从上向下穿过信号线时,这被视为一个卖出信号,表明市场价格可能下跌,市场处于下降趋势。MACD是由Gerald Appel开发的一种动量指标,它显示两个不同周期的指数移动平均线(通常是12日和26日)之间的差异。

2023-11-05 21:08:59 106

原创 udp心跳包调试

我对心跳包监测程序的理解是,遥控台程序只要启动就开始udp发心跳包,并实时监控接收来自车端返回的心跳包,只要收到车端返回的心跳包就与该车建立连接,之后如果超时,就与该车断掉连接。Received from “车的ID”: Heartbeat response,每一帧收到包的当前系统时间,收到当前帧与收到上一帧的时间差。如果需要更详细的性能分析,可能需要使用其他更复杂的监控手段。将日志输出至控制台,同时保存文档到当前目录,当程序开始运行时,会删掉或者说覆盖掉上次输出的文档heartbeat.txt。

2023-10-26 12:21:26 266

原创 【Orin配置文档:latest】

要查看Orin的ARM版本,可以使用以下命令:所以我们下载 ARM v8 DEB包。

2023-10-21 16:45:08 55

原创 【C++】6.整型

通常,整型的范围是有限的,由位数决定。例如,32 位的整型可以表示大约 -2,147,483,648 到 2,147,483,647 之间的整数。在绝大多数编程语言中,整型是基本的数据类型之一,用于存储整数值。不同的编程语言可能在处理整型时有一些差异,但整型作为一种基本的数据类型,具有通用的特性和用法。5. 类型转换: 在一些情况下,你可能需要将其他类型(如浮点数)转换为整型,或者将整型转换为其他类型。1. 整型表示:整型可以表示整数,包括正整数、负整数和零。输出oct,之后输出的整型以8进制输出。

2023-08-24 16:05:54 112

原创 【C++】10.算术运算符

然后在输出语句之前插入cout sizeof(ff*dd)= 8。float 的精度是7位。double精度可以保证15位。但是默认float和double都只能显示6位小数部分,再多需要#include ,

2023-08-24 16:03:52 44

原创 【C++】40.函数参数的默认值

函数实参的默认值是许多编程语言中的一个特性,它允许您为函数的参数分配默认值。在上面的例子中,' greet '函数的' message '参数的默认值为"Hello"。2. 顺序问题:调用函数时,如果你想跳过一个有默认值的参数,你可以使用参数的名称来指定后面参数的值。当您想要更改位于参数列表末尾的参数的默认值时,这尤其有用。5. 明确文档:当使用默认值时,确保你的函数文档清楚地指出哪些参数具有默认值以及这些默认值是什么。您可以省略某些参数以使用其默认值,或者您可以仅为您关心的参数提供值。

2023-08-24 15:53:07 79

原创 【C++】5 . 函数入门

同理,其他程序员写的包,或者一些软硬件厂商提供的产品,会让我们添加一些依赖,这些“依赖”其实就是包。2. 函数定义:创建一个函数,你需要指定它的名字,参数(如果有的话),以及一组在函数被调用时要执行的指令或语句。10. 函数重载(在某些语言中):一些编程语言支持函数重载,它允许您定义具有相同名称但不同参数列表的多个函数。7. 作用域:函数有自己的作用域,这意味着函数内部定义的变量通常与函数外部定义的变量是分开的。9. 用户定义函数:除了内置函数之外,您还可以创建自己的函数来执行与程序逻辑相关的特定任务。

2023-08-24 15:38:35 25

原创 【C++】11.数组

数组中的每个元素都由索引标识,索引是一个数值,表示元素在数组中的位置。如果你需要一个动态调整大小的集合,你可以考虑使用其他数据结构,比如列表(在Python中)或动态数组(在Java的' ArrayList '或c++的' std::vector '等语言中)。在许多编程语言中,包括C、c++、Java、Python等,数组是通过指定数组所包含元素的数据类型及其大小(元素数量)来定义的。然而,数组的大小是固定的,这意味着您需要提前知道元素的最大数目。1. 访问元素:可以使用数组的索引访问元素。

2023-08-24 15:35:32 72

原创 【C++】BOOST 智能指针

shared_ptr支持强制类型转换,如果定义了一个U能够强制转换到T(因为T是U的基类),那么shared_ptr也能够强制转换到shared_ptr。目前已成为tr1标准的一部分,发展自原始的auto_ptr,内置引用计数。引用指针计数器记录有多少个引用指针指向同一个对象,如果最后一个引用指针被销毁的时候,那么就销毁对象本身。实际上,智能指针赋值拷贝的同时,引用计数也加1了。在默认析构函数也是如此,析构函数执行之后,会调用类A的析构函数,检查引用计数都为0后,会delete掉这个int。

2023-08-24 15:29:05 40

原创 【C++】8.const与符号常量

值得注意的是,在现代编程中,const的使用比符号常量更受欢迎,因为const提供了类型检查,并且具有更清晰的作用域,使其更易于维护,更不容易出错。它们不是实际的变量,而是在编译的预处理阶段被它们的值所替换。这里,' PI '是一个符号常数,在预处理期间,整个代码将被值' 3.14159265 '替换。在c++中,您还可以使用' constexpr '关键字来创建编译时常量,从而提供更大的灵活性和优化机会,同时仍然确保类型安全和清晰度。符号常量:有意义的常量,有名字的常量,比如“光速c”,‘圆周率π’

2023-08-23 20:21:40 153

原创 【C++】14.结构简介

结构类型:比如:描述一个人;描述一本书。我们要告诉C++,我们的结构包括什么——这就叫做。当我们声明了之后呢,就相当于我们有了一种新的结构类型,以后我们要描述这个类型的变量,就可以去。有了这个类型之后我们就可以。这里我们定义了book类型。后面的花括号里是这种类型有几种部分组成。建立了这样的声明之后,相当于我们在C++里加了这样一个类型,这个类型就叫做book。里面有书名,我们用char类型表示;有author,我们也用char类型表示;还有value,我们用float类型表示。

2023-08-23 20:17:21 33

原创 【C++】动态内存分配

堆是计算机内存的一部分,用于存储数据结构、对象和变量,这些数据结构、对象和变量的大小或生存期在运行时确定。像C、c++这样的编程语言和类似的语言通过' malloc '、' calloc '和' realloc '等函数提供动态内存分配机制。但是,动态内存分配的不当使用可能导致内存泄漏(不再需要的内存没有被正确释放),或者导致缓冲区溢出和碎片等问题。与静态内存分配不同,静态内存分配是在编译时分配的,并且在整个程序执行过程中保持固定,动态内存分配允许程序在运行过程中根据需要请求和释放内存。

2023-08-23 20:16:59 28

原创 【C++】2. 程序生成

链接:将目标文件与库文件的目标文件捆绑起来,形成可执行文件。文件——新建项目——选择Win32控制台程序——空项目。在VS2017下——点击 菜单——点击 生成解决方案。添加源文件有俩个方法:选择新建项;编译:把源文件翻译成机器语言,称为目标文件。C++的源文件,后缀名为 .cpp。调试 或者 开始执行不调试。生成可执行文件.exe。

2023-08-23 20:15:15 124

空空如也

空空如也

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

TA关注的人

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