C/Cpp指针详解
Awesome C/Cpp指针详解一些复杂的指针类型12345678910int p; // 普通的整形常量int* p; // 去掉变量名,类型是int*,所以是一个指向int的指针int p[3]; // 去掉变量名,类型是int [3],所以是一个包含三个整型元素的数组int *p[3]; // 去掉变量名,类型是int* [3],所以是一个包含三个整型指针的数组int (*p)[3]; // 去掉变量名,类型是int (*)[3],其中(*)[3]表示这是一个指针,指向长度为3的int数组,int (*)[3]表示这个指针指向的是一个int数组,每个数组包含3个int元素int **p; // 去掉变量名,类型是int **,表示这是一个二级指针,指向的是一个整形指针int*,可以通过两次解引用来获得所指向的值**pint p(int); // 去掉变量名,类型是int (int),这是一个函数类型,表示参数列表是int,返回值也是intint (*p)(int); // 去掉变量名,类型是int (*)(int),这是一个函数指针,表示函数的参数列表 ...
FreeRTOS简明教程
FreeRTOSFreeRTOS与我们熟悉的Linux是两种常见的操作系统内核,虽然它们都是用来管理系统资源并提供应用运行程序的环境,但它们的设计目标、应用场景以及功能特定都有很大的区别。
1. FreeRTOS的特性
FreeRTOS设计用于嵌入式系统,特别是资源有限的微控制器环境(MCU),强调实时性,即需要在确定的时间内响应和处理任务,非常适合用于时间敏感的应用,FreeRTOS通常运行在简单的硬件上,没有MMU(内存管理单元)等高级的硬件特性。
FreeRTOS中没有虚拟内存的概念,一般使用的是静态内存分配或简单的动态内存分配
FreeRTOS提供了优先级抢占式调度,支持任务优先级、时间片轮转等机制。
FreeRTOS没有完整的文件系统,适合运行在不需要文件存储的设备上,但是可以通过扩展支持一些简单的文件系统
FreeRTOS内核非常小,非常适合资源受限的设备
FreeRTOS的特性是
具有抢占式或者合作式的实时操作系统内核
功能可裁剪,最小占用10kB左右rom空间,0.5kB ram空间
灵活的任务优先级分配
具有低功耗模式
有互斥锁、信号量、消息队列等功能
运行过 ...
vscode配置latex环境制作beamer
vscode配置latex环境制作beamer ppt写在前面,笔者之前一直使用overleaf来制作beamerppt,但是免费版本会限制编译时间上限,故在本地配置了latex环境用于制作beamerppt。
环境配置
系统环境windows11
vscode + Tex Live
1. 安装Tex Live首先需要下载Tex Live,我们不要使用在线安装(这样非常慢),通过CTAN镜像下载.iso镜像文件,然后装载镜像文件来进行安装。
然后选择最新的镜像下载即可
下载完毕后,装载镜像,然后运行install-tl-windows.bat即可,安装可能会花费一段时间。
2. 安装vscode插件安装插件LaTex Workshop,直接在vscode中搜索LaTex Workshop,然后安装插件并重启vscode即可
3. 测试你可以找到一个你喜欢的beamer主题,https://mpetroff.net/files/beamer-theme-matrix/,然后可以开始使用了
Reference[1]在Windows上安装TeXLive
vscode配置latex环境制作简历
vscode配置latex环境制作简历1. 安装Tex Live及vscode插件可以参考:vscode配置latex环境制作beamer ppt
2. 添加vscode配置文件打开vscode,按下Ctrl + Shift + P打开搜索框,搜索Preference: Open User Settings (JSON)
然后添加以下的配置文件:
1234567891011121314151617181920212223"latex-workshop.latex.tools": [ { "name": "latexmk", "command": "latexmk", "args": [ "-xelatex", "-synctex=1", "-interaction=nonstopm ...
Mit6.S081
MIT6.S081
这篇blog是博主学习MIT6.S081操作系统课程的学习理解,博主的项目地址在:https://github.com/shenmuxin/risc_mini_os_kernel
xv6是如何实现强隔离的?RISC-V有三种CPU可以执行指令的模式:机器模式(Machine Mode)、用户模式(User Mode)和管理模式(Supervisor Mode)。在机器模式下执行的指令具有完全特权;CPU在机器模式下启动。机器模式主要用于配置计算机。Xv6在机器模式下执行很少的几行代码,然后更改为管理模式。
一般来说user mode就是我们的用户模式,简称为U mode, 而Supervisor mode就是我们所说的内核模式,简称为S mode。
操作系统必须满足三个要求:多路复用、隔离和交互。
为了实现强隔离, 最好禁止应用程序直接访问敏感的硬件资源,而是将资源抽象为服务。
xv6如何实现系统调用的?一个进程可以通过执行RISC-V的汇编指令ecall指令进行系统调用,该指令提升硬件特权级别,并将程序计数器(PC)更改为内核定义的入口点,入口点的代码切换到 ...
Ubuntu中复现Fundationpose
Ubuntu20.04中复现Foundationpose非常重要的环境配置
ubuntu 20.04
cuda 11.8.0
cudnn v8.9.7
python 3.9.19
torch 2.0.0
显卡RTX 4060 ti
详细信息如下所示:
1.安装cuda和cudnn具体可以参考这篇:ubuntu配置多版本cuda+cudnn环境,及版本切换方法
2.下载相关资源
下载仓库
1git clone https://github.com/NVlabs/FoundationPose.git
下载网络权重,并解压到weights/目录中
下载demo数据,并解压到demo_data/目录中
【可选】下载大规模的数据集:FoundationPose Dataset
【可选】在此处下载我们预处理的参考视图,以便运行model-free的小样本版本。
3.环境配置首先安装anaconda或者miniconda,具体可以参考这篇:【Linux】Ubuntu20.04版本配置pytorch环境2023.09.05【教程】
手动安装eigen3到系统123456cd $HOME ...
step或stl文件转urdf并添加到机械臂上
【Moveit】step或stl文件转urdf,并添加到机械臂上ROS专门提供了一种机器人建模方法——URDF,用来描述机器人外观、性能等各方面属性。所以我们需要将别的描述格式转换成URDF,才能在ROS中使用。
1. 安装sw_urdf_exporter插件参考官方给出的wiki page:sw_urdf_exporter/Tutorials我们需要给solideworks下载一个插件,插件地址为:SolidWorks to URDF Exporter,其github的release为:https://github.com/ros/solidworks_urdf_exporter/releases
注意solideworks的版本不能过高,这个插件支持solidworks的版本为(2018SP5~2021),我们安装的时候可以直接下载这个.exe可执行文件即可,然后默认安装
2. 导出urdf具体的操作可以参考这个视频:[ROS] Solidworks导出urdf
然后按照教程中的方式进行导出即可。这里我导出了一个夹爪,如下所示
导出的结果会生成一个ROS的功 ...
Graspnet+Astra2相机实现部署
graspnet+Astra2相机实现部署环境配置
ubuntu 20.04
Astra2相机
cuda 11.0.1
cudnn v8.9.7
python 3.8.19
pytorch 1.7.0
numpy 1.23.5
1. graspnet的复现具体的复现流程可以参考这篇文章:Ubuntu20.04下GraspNet复现流程
这里就不再详细介绍了
2. Astra2的Python API以下内容都是参考官方文档:Orbbec SDK for Python 使用手册
我们首先确认输入到网络中的数据为一个点云数据,再一个我们需要一个rgb图像用来给点云上色,graspnetAPI帮我们写好了从深度图转换到点云的函数create_point_cloud_from_depth_image,所以我们只需要写好从相机的视频流获取深度图片和rgb图片的部分就好了,特别注意的是,大多数相机的rgb的fov是要大于深度图的fov所以我们要对两者进行对齐操作,对齐操作的本质就是在深度图中填充0,使得深度图和rgb图的大小一致。大多数的相机厂商已经提供了具体的示例来演示如何进行对齐,这里就不再 ...
Ubuntu中复现Graspnet
Ubuntu20.04中GraspNet复现流程非常重要的环境配置
ubuntu 20.04
cuda 11.0.1
cudnn v8.9.7
python 3.8.19
pytorch 1.7.0
numpy 1.23.5
详细的信息如下:
笔者在复现的过程中遇到了许多的坑,现在记录一下,来帮助希望也能够复现的同学。
1.安装cuda和cudnn具体可以参考这篇:ubuntu配置多版本cuda+cudnn环境,及版本切换方法
2.安装pytorch具体可以参考这篇:【Linux】Ubuntu20.04版本配置pytorch环境2023.09.05【教程】
3.编译graspnetAPI直接参考官方给的流程就好,参考这里:graspnet-baseline
然后下载官方给的预训练权重,运行demo
如果出现问题:
ImportError: numpy.core.multiarray failed to import ( auto-generated, because you didn’t call ‘numpy.import _array()’ after cimporting ...
相机模型的内参和外参
相机模型的内参和外参这篇笔记主要参考:slam十四讲第二版(高翔)
相机将三维世界中的坐标点(单位为米)映射到二维的像素平面(单位为像素)的过程能够使用一个几何模型来进行描述,为了简单起见这个模型我们通常使用针孔模型。同时,由于相机镜头上透镜的存在,透镜的安装不能保证绝对的准确,因此在成像的过程中还会出现畸变。因此,我们使用针孔模型和畸变模型来描述整个投影过程。
针孔模型和畸变模型能够把外部的三维点投影到相机内部的成像平面,这组参数就构成了相机的内参(intrinsics)
1. 针孔模型、畸变模型(内参)针孔模型可以用中学学习的小孔呈现原理来进行解释,如下图所示,
图中包括两个坐标系,一个是相机内部的物理成像平面坐标系$O^\prime-x^\prime-y^\prime$,这是一个二维的坐标系,还有一个是以相机的光心为中心的相机坐标系$O-x-y-z$,这是一个三维坐标系。根据小孔成像原理,现实世界中的$P$点在经过小孔$O$投影之后,落在物理平面$O^\prime-x^\prime-y^\prime$上,成像点为$P^\prime$,设$P$的坐标为$[X,Y,Z]^T$,$P ...