自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 收藏
  • 关注

原创 智能指针循环引用的问题

在C++中,智能指针为我们提供了自动管理内存的机制,尤其是 std::shared_ptr。但在某些情况下,多个对象之间的互相引用会导致循环引用问题,从而使对象的析构函数无法调用,导致内存泄漏。

2024-10-15 11:06:27 363

原创 printf的压栈过程

在c/c++中函数是通过压栈的方式来实现函数参数的传递过程,调用者函数会把被调函数的参数从右到左依次压入到栈中,在printf中第一个被找到的就是那个字符串指针,就是双引号括起来的那部分,函数通过字符串的传输个数以及类型来计算数据的栈的指针的偏移地址。

2024-07-18 15:34:30 357

原创 一些常用的汇编代码

记录一下一些汇编代码的英文名以及作用,感觉夹在英文方面理解记忆一些,汇编主要和寄存器打交道,这里有必要认识一些arm中的一些寄存器主要的通用的寄存器, 主要用于数据操作 以及地址计算主堆栈指针寄存器,指向堆栈的顶部链接寄存器, 存储子程序的调用的返回地址程序计数器 , 指向当前正在指向的地址系统寄存器提供对处理器状态和控制功能的访问。: 当前程序状态寄存器, 包含了处理器的状态位,如条件标志(N, Z, C, V)和控制位(如中断禁用位和当前处理器模式位)

2024-07-15 20:18:50 642

原创 Makefile 自动化变量以及模式匹配

Makefile中的自动化变量可以大大简化Makefile的书写,使其更加简洁和易于维护。这些变量在规则的命令中被自动赋值,根据当前目标和依赖的上下文来确定具体的值。

2024-07-15 15:59:07 468

原创 vim 简单配置

【代码】vim 简单配置。

2024-07-14 16:52:51 125

原创 环形缓冲区的使用

环形缓冲区是一个先进先出(FIFO)的闭环的存储空间。相当于就是一个固定大小的数组,和两个指针,读指针和写指针。环形 缓冲区的”环形“特性意味着当任一指针到达数组的末端的时候,会自动回绕到数据开始的位置。

2024-03-28 17:24:13 2310 2

原创 打印摄像头信息

lsusb这里我的摄像头的厂家id是 1689:2304得到。

2024-03-28 17:23:38 301

原创 UVC框架下USB摄像头驱动之设置属性

定义在uvc_ctrl.c里面的数组.entity = UVC_GUID_UVC_PROCESSING, //属于哪一个entity.selector = UVC_PU_BRIGHTNESS_CONTROL,//用于亮度.index = 0,// 对应Processing Unit Descriptor 的bmControls[0].size = 2,//数据长度2个字节},

2024-03-14 20:40:18 1667

原创 UVC 设备框架在 Linux 4.15 内核的演变

发现之前的uvc框架和现在的还是有一些差别的(比如从videobuf 过渡到videobuf2),写个blog记录一下,方便以后查找,内核版本:Linux 4.15通用的管理机制。

2024-03-12 11:06:15 1145 1

原创 操作系统基础知识

进程线程。

2024-03-03 17:43:23 275

原创 嵌入式Linux

首先根文件系统是一种文件系统,它不仅具备普通文件系统储存数据的功能,它还有其特殊性,** 它是linux系统启动后所挂载的第一个文件系统,内核代码的映像文件就保存在根文件系统中 **。引导启动程序**会在根文件系统挂载之后把一些初始化脚本(rcs,inittab服务)加载到内存中去运行,里面包含了linux系统所能够运行的必要吃程序,库等,比如给用户提供linux的控制界面的shell程序,动态连接程序运行时所需要的glibc库等。

2024-02-25 10:29:52 367

原创 使用Pinctrl 和 Gpio 子系统 配置引脚

Pinctrl 子系统 主要负责处理SOC(System on chip )的引脚控制,现代MCU中很多引脚都是多功能的,可以配置成不同的角色(GPIO,I2C,SPI,UART,PWM等)Pinctrl 子系统就是用来管理这些引脚设置的主要功能。

2024-01-28 11:47:26 657

原创 从设备树中获得相关的属性值

使用设备树来向linux内核传递相关的寄存器的物理地址,linux驱动文件使用of函数,从设备树获得所需要的属性值,然后使用获得的属性值来进行初始化相关的IO1.在imx6ull-alientek-emmc.dts 文件中创建线管的设备节点2.编写设备驱动,从设备树中获得相关的属性值3.使用从设备树获得的有关属性值来初始化LED所使用的IO。

2024-01-25 20:10:52 287

原创 四 STM32F4 实现外部中断以及串口打印

参考文章:这里使用STM32F411U6 微控制器 , 这里使用PC15产生脉冲信号, 并利用PA1 引脚输入信息来触发外部中断 .

2023-11-30 14:17:45 773

原创 三 STM32F4使用Sys_Tick 实现微秒定时器和延时

时钟是由电路产生的周期性的脉冲信号,相当于单片机的心脏。

2023-11-28 20:17:43 6136 2

原创 嵌入式 基础知识

1. STM32微控制器的核心特性是什么?STM32微控制器是基于ARM Cortex-M 处理器 , 它具有高性能处理能力和低功耗的特性 , 适合用于嵌入式系统STM32系列具有多种多样的内存大小和丰富的内置外设选项,包括 多通道ADC , 定时器 , 通信接口 UART ,SPI , I2C,此外它支持广泛的中断和事件管理,并且提供了复杂的电源管理方案**2. 如何配置STM32的GPIO进行数字输入输出?首先我们需要使能GPIO的时钟使用库函数来对GPIO端口进行初始化,比如配置引脚

2023-11-28 09:59:05 1842 1

原创 二 使用GPIO的复用功能 利用USART 实现printf()

MicroLib是缺省c库的备选库,它可装入少量内存中,与嵌入式应用程序配合使用,且这些应用程序不在操作系统中运行。

2023-11-27 15:17:34 1148

原创 一 初始化GPIO流程 以及点亮LED

点亮LED 需要单片机上的GIPIO端口引脚 输出对应的电压来对LED进行点亮 ,关于GPIO的初始化流程其实我们只需要牢牢记住这张图即可具体参考: https://blog.youkuaiyun.com/k666499436/article/details/123971479。

2023-11-26 16:17:10 2976

原创 关于ego-planner里面的GridMap

浙大这套开源的代码写得很nice 很值得借鉴 , 对于 GridMap 类的实现。该类通过智能指针的封装简化了 GridMap 实例的创建和管理过程。一旦通过 GridMap::initMap(ros::NodeHandle &nh) 方法初始化,就可以方便地调用 GridMap 及其所有相关功能它主要订阅了d435i的深度话题以及odom来实现的建图单独写一个node试一下然后再在原来的基础上搞一个launch$(find最后用gazebo进行仿真。

2023-11-22 16:49:59 1959 7

原创 docker的基本使用以及使用Docker 运行D435i

old_name> 替换为你的容器名称。

2023-11-19 18:17:59 715 1

原创 ubuntu20.04在docker下运行ros-noetic进行开发

Portainer 个可视化的界面其实和ROS关系并不大,但是使用起来非常的方便,可以让我们更快速的利用Docker学习ROS,而不是要完整的学习完Docker的繁杂的命令再学习ROS。如果这项服务没有启动,可以用下面的命令启动。使用该 Dockerfile 构建镜像后,可以将其作为基础镜像来运行具备图形能力的 ROS 应用程序。在这里我们可以查看到运行容器内部的信息,也可以快速的删除废弃的容器及镜像。在使用rviz的时候我们当然需要再开启一个终端,那么对应的我们要进入启动roscore的这个容器。

2023-11-17 22:37:45 5029 5

原创 c++左值和右值的区别

在c++ 中左值和右值是表达式的两种类别, 他们的主要区别在于和。

2023-11-12 16:16:24 428

原创 C / C++ 基础知识

虚函数就是在基类声明(virtual),在派生类重写的函数(override),可以使用基类的指针或者引用来调用派生类的虚函数实现多态主要是靠的是虚函数来进行实现c++ 标准模板库是指类的集合,它提供了常用的数据结构 比如向量 ,列表 队列 和 一些算法: 排序 搜索等等纯虚函数好像是没有意义的,只能在当前的类起作用纯虚函数是指在基类中声明但不定义的虚函数, 它必须在派生类中进行实现, 一个包含纯虚函数的类被称为抽象类,但不能实例化。

2023-11-10 12:53:07 193

原创 c++ 中struct和class

在c++ 中,struct 和class 之间的区别。

2023-11-08 20:42:24 292

原创 A star算法

a 星 是一种启发式搜索算法, 用于在地图中的两个目标点之间寻找最短的路径,它结合了最优先搜索和Dijkstra算法的特点,通过考虑从起点到当前点的距离(或者代价 g(n) ) 和估算的从当前点到目标点的最短距离(启发式估计h(n) )来进行,算法为图中每一个节点维护一个值 f(n) = g(n) + h(n),它代表了从起点经过节点n 到达目标点的估计成本 ,在搜索过程中,a 星算法会优先选择扩展f(n) 值最小的点,这有助于它高效的找到最短路径。

2023-11-08 20:18:54 2879

原创 C++内存和内存分配

理解c++ 内存管理的关键是要认识到不同类型的内存有不同的生命周期和管理方式, 静态内存是自动管理的,而动态内存是需要开发者手动进行分配和释放,不当的内存管理会导致内存泄漏或者程序崩溃。内存泄漏和溢出。

2023-11-08 14:50:33 98

原创 更好的理解c++中的虚函数和静态多态以及动态多态

静态多态的类型早已知晓, 多态性在编译时通过函数重载和模板实现,没有运行开销动态多态它的类型可能未知, 多态性在运行时通过虚函数实现,这涉及到类型识别,有一定的性能开销。

2023-11-08 11:11:15 251

原创 c++ 中 const 和static

首先使用static的主要目的是控制存储周期, 链接性 和可见性可以作为。

2023-11-07 19:17:19 132

原创 c++ static

在c++ 中 static 关键字有几种不同的用途,但通常都与。

2023-11-07 18:37:15 55

原创 c++野指针

当我们在声明一个指针的时候但没有赋值时,它就是一个野指针。

2023-11-07 16:10:31 343

原创 轨迹生成与优化

我们在一个有障碍物的环境中使用前段搜索算法(a star , RRT ),找到了一条理想的轨迹路径,但是搜索出来的并不是的路径是没有考虑动力学约束的,因此轨迹会出现不光滑的点 ,如果轨迹是不光滑的不考虑动力学约束的,因此无人机会飞一下然后又停一下,这显然是我们所不希望的。如果我们希望以轨迹中的一些航向点为基础,画出一条光滑的连接每一个航向点的轨迹,那么这条轨迹就很适合机器人区运动。

2023-11-06 20:21:32 478

原创 ubuntu20.04 安装显卡驱动 :Login incorrect

这里我的是 ju 输入之后 在进行其他操作。1.进去输入密码死活不对 什么操作都是。先别输入其他的命令: 先输入你的用户名。之前在安装显卡驱动 到这一步时。具体其他安装操作 参考。

2023-10-13 09:05:08 557

原创 MSRSIM/quadrotor_dynamics_node.cpp

RPM_input。

2023-09-19 10:41:22 128

原创 MARSIM / cascadePID_node.cpp

主要作用就是:级联PID控制器控制四旋翼无人机。订阅odom和cmd_pose主题以获取无人机的当前状态和期望姿态。然后,它使用级联PID控制器计算所需的电机转速并将其发布到cmd_RPM主题。

2023-09-19 10:20:58 416

原创 在Ego-Planner 中 如何根据索引值来判断有无障碍物

关于在地图中如何检查是否碰上了障碍物

2023-09-08 16:52:32 1851

原创 MARSIM 无人机动力学模型 代码阅读

之前一直都不太明白如何获得无人机的位置加速度等信息,在MARSIMA中提供了一种办法:订阅电机的转速话题,可以得知飞行器上的力和扭矩。然后,使用这些力和扭矩,结合飞行器的质量和惯性属性,来估计飞行器的加速度、速度和位置。但是在在实际的飞控系统中,还会有其他的考虑,如扰动、气动效应、控制算法等,MARSIM中提供提供了一个基础的动力学模型。

2023-09-07 17:10:45 589 3

原创 Ubuntu20.04 安装 MARSIM debug

为的plc 和eigen3 都是最新版本 ,在catkin_make 出现以下报错。在对应的代码文件的CmmkeLists.txt中添加 以下代码。解决办法 对应代码中的omp 改为。

2023-09-06 16:30:22 265

原创 leetcode2

1.如何创建新的节点,以及遍历链表。

2023-09-04 11:09:27 68

原创 C++ 智能指针

c++智能指针是一种用于管理动态分配的内存工具,它可以自动进行内存的分配和释放,从而避免了手动管理内存带来的问题(如内存泄漏和悬挂指针)c++11引入了两种主要的智能指针 std::shared_ptr 和std:: unique_ptr。

2023-09-03 10:26:11 60

原创 基于matlab的RRT算法实现

RRT的基本思想是通过随机抽样来增长一棵树,树的每一个节点代表一个可能的机器人位置。每次迭代,RRT都会随机选择一个点并试图连接到现有的树中,使得树逐渐扩展到整个搜索空间。遍历树,从树中找到最近邻近点x_near。线性插值 (来源于gpd)

2023-08-26 10:37:43 329

空空如也

空空如也

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

TA关注的人

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