image frame

星际旅行日志

彼汾一曲,言采其藚.彼其之子,美如玉.美如玉,殊异乎公族.

Linux系统调用与用户编程接口

参考文献 华清远见《FS-MP1A开发教程-2022-04-01》

1. 系统调用

​ 操作系统负责管理和分配所有的计算机资源。为了更好地服务于应用程序,操作系统提供了一组特殊接口—系统调用。通过这组接口,用户程序可以使用操作系统内核提供的各种功能,如分配内存、创建进程、实现进程之间的通信等。
为什么不允许程序直接访问计算机资源?答案是不安全。单片机开发中,由于不需要操作系统,所以开发人员可以编写代码直接访问硬件。而在嵌入式系统中通常都要运行操作系统,程序访问资源的方式就发生了改变。操作系统基本上都支持多任务,即同时可以运行多
个程序。如果允许程序直接访问系统资源,肯定会带来很多问题。因此,所有软硬件资源的管理和分配都由操作系统负责。程序要获取资源(如分配内存、读写串口)必须通过操作系统来完成,即用户程序向操作系统发出服务请求,操作系统收到请求后执行相关的代码来处
理。 阅读更多...

Shell脚本

参考文献 华清远见《FS-MP1A开发教程-2022-04-01》

一、Shell脚本

1.1 Shell 简介

​ 在 Linux 系统开发过程中,开发者或者用户与 Linux 系统(内核)进行交互的时候需要一个平台,这就是 Shell,有了它,用户就能通过键盘输入与系统进行交互了。Shell 会执行用户输入的命令,并且在屏幕上显示执行结果。这种交互的全过程都是基于文本方式的,这种面向命令行的用户界面被称为 CLI(Command Line Interface),在图形化用户界面(GUI)出现之前,人们一直是通过命令行界面来操作计算机的。Linux 的图形化环境最近这几年有很大改进,在 X 窗口系统下,只需打开 Shell 提示来完成极少量的任务。然而,许多 Linux 功能在 Shell 提示下要比在图形化用户界面(GUI)下完成得更加高效,况且一些应用程序并不支持图形界面。 阅读更多...

Zynq嵌入式Linux开发

参考文献《3_领航者ZYNQ之嵌入式Linux开发指南_V1.5.2.pdf》

一、Petalinux开发

1.1 Petalinux简介

Petalinux 工具是 Xilinx 公司推出的嵌入式 Linux 开发套件,包括了 u-boot、LinuxKernel、device-tree、rootfs 等源码和库,以及 Yocto recipes,可以让客户很方便的生成、配置、编译及自定义 Linux 系统。Petalinux 支持 Versal 、Zynq UltraScale+ MPSoC、Zynq-7000 SoC 以及 MicroBlaze,可与 Xilinx 硬件设计工具 Vivado 协同工作,大大简化了Linux 系统的开发工作。

阅读更多...

SLAM建图之占用栅格建图算法

1. 什么是占据栅格地图构建算法?

占据栅格地图(Occupancy Grid Map)的概念。我们将地图栅格化,对于每一个栅格的状态要么占用,要么空闲,要么未知(即初始化状态)。

image-20230131110847152

img

img

img

img

2. 举个例子验证占据栅格地图构建算法

首先,我们假设 looccu = 0.9,lofree = -0.7。那么,显而易见,一个栅格状态的数值越大,就越表示该栅格为占据状态,相反数值越小,就表示该栅格为空闲状态。

img

上图是用两次激光扫描数据更新地图的过程。在结果中,颜色越深越表示栅格是空闲的,颜色越浅越表示是占据的。这里要区分常用的激光SLAM算法中的地图,只是表述方式的不同,没有对错之分。

3. 如何通过激光雷达数据构建栅格地图?

3.1 算法核心依据

整篇文章得出的一个结论就是下图所示,这里假设lofree和looccu为确定的数值,一般情况下一正一负。

image-20230131112730179

然后,我们通过激光雷达数据栅格进行判断,如果判定栅格是空闲,就执行上面公式;如果判定栅格是占据,就执行下面的公式。在经过许多帧激光雷达数据的洗礼之后,每一个栅格都存储了一个值,此时我们可以自己设定阈值与该值比较,来做栅格最终状态的判定。

3.2、算法输入数据

激光雷达数据包(每个扫描点包含角度(逆时针为正方向)和距离,每帧激光数据包含若干扫描点,激光雷达数据包包含若干帧激光雷达数据)。

机器人位姿数据包(每一个位姿包含世界坐标系下的机器人位置和航向角,初始航向角与世界坐标系X轴正方向重合,逆时针为正方向)。

地图参数(需要构建地图的高度和宽度,构建地图的起始点,lofree和looccu的设定值,地图的分辨率)。

假设激光雷达坐标系和机器人坐标系重合.

image-20230131112917515

image-20230131112937854

《Liunx多线程服务器编程》笔记 第一章

1. 线程安全的对象生命期管理

1.1 线程安全

编写线程安全的类不是难事,使用同步原语(synchronization primitives)保护内部状态即可。但是对象的生死不能由对象自身拥有的mutex(互斥锁)来保护。

1.1.1 线程安全的定义

依据[JCP],应该线程安全的 class 应该满足:

  • 多个线程同时访问时,其表现出正确的行为。
  • 无论操作系统如何调度这些线程,无论这些线程的执行顺序如何交织。
  • 调用端代码无需额外的同步或其他协调动作。

C++ 标准库中大多数的 class 都是线程不安全的。

阅读更多...
  • Copyrights © 2022-2024 lk
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信