ros2--实时系统--preempt-rt

教程

ros2实时编程:

中文官网

官网解析文章

什么是实时性(延时)

实时性是指调度的时候,任务响应时间。

也就是任务从产生到被执行的时间。

实时性任务

就是需要在特定时间内完成和响应的任务。

实时性需求--linux系统实时性

链接

preempt-rt实时内核是什么

所谓的内核就是操作系统的核心部分,不完全等于操作系统。

PREEMPT-RT 实时内核是 Linux 内核的一个衍生版本,它被设计用于提供更好的实时性能和可预测性。

PREEMPT-RT 内核通过实时调度程序和内核抢占,实现了更快的响应时间,更好的实时性能和更好的可预测性。它可以在不影响系统常规操作的情况下,捕获和处理实时响应事件。与标准 Linux 内核不同,在 PREEMPT-RT 中,内核可以在任何时间停止执行一个任务并切换到另一个任务,以确保实时任务获得优先级

PREEMPT-RT 内核的特点包括:

  • 低延迟和更好的实时性能,可以在实时系统中实现更好的精度和控制

  • 通过实时调度程序使任务的调度更可预测

  • 内核和设备驱动程序可以在任何时候实时响应输入事件

  • 实现了内核抢占,以支持多任务并行

  • 内核代码更容易维护和调试

PREEMPT-RT 适用于需要更好实时性能的 Linux 系统,比如航空、军事、工业机器人、汽车和医疗设备等领域。Ros2的Dashing 和 Eloquent 版本都支持 PREEMPT-RT 实时内核。

preempt-rt

preemptible: 抢占;

rt: real time;

preempt-rt: 实时抢占内核。

“PREEMPT” 是一种操作系统调度技术,指当高优先级的任务到来时,操作系统可以在低优先级任务运行的任何时候中断它,并迅速地处理高优先级任务,以提高系统的实时性和响应性。

“RT” 是实时(Real-Time)的缩写,通常指在某些时间限制内完全响应某个事件或指令的能力。在计算机系统中,实时性是指需要在特定时间限制内完成响应的任务,比如航空控制、工业控制、医疗设备等领域。成为实时操作系统,需要保证内核和用户空间的最大响应时间不超过某个最大值。实时性还意味着,需要在给定时间上限内完成工作,因此,实时任务的预测性和可靠性也很重要。

所以preempt-rt内核就是通过以实时任务为高优先级任务,先处理实时任务的方式来提高任务的实时性。

PREEMPT_RT补丁

PREEMPT-RT 补丁是一段针对 Linux 内核源代码的修改文件,补丁本身就是一组代码。该补丁集包含了对 Linux 内核的一系列修改和增强,以提高系统的实时性和可预测性。在应用 PREEMPT-RT 补丁集时,需要将其应用到 Linux 内核源代码中,然后将整个内核代码重新编译生成新的内核镜像,以便使用者能够在其系统上运行更加实时化的操作系统。

PREEMPT_RT补丁的主要目标是减少Linux内核的不可抢占性(non-preemptibility),即减少内核运行时不可被中断的时间。通过将关键的内核代码段和操作转换为可抢占的形式,PREEMPT_RT使得实时任务能够在特定时间约束下得到及时响应。

(preempt-rt: 将)

链接

PREEMPT_RT的安装

教程

中文官网

18.04安装教程

22.04安装教程

github安装详细教程

canonical-certs.pem---canonical-revoked-certs.pem

链接

1,查看自己的ubuntu系统版本,内核版本,是否为实时性内核

链接

uname -a

uname -r

2,下载和自己的系统内核版本一样的linux内核资源和patch包

3,解压和配置内核补丁

4,make menuconfig

5,make -j`nproc

6,sudo make && sudo make modules && sudo make modules_install && sudo make install

一定要加上sudo,否则报错。

sudo reboot重启配置内核

当重启到advaned option ubuntu的时候,选择这个选项,回车进入,选择preempt-rt版本。

查看18.04安装教程。

实时系统的测试

下载rt_tests

sudo apt install rt_tests

cyclictest测试工具

Cyclictest是rt-tests下一个使用最广泛的测试工具(本质上就是一个程序),主要用来测试使用内核的延迟,从而判断内核的实时性。

原理

链接

从产生到被执行的时间(延时时间)=定时器中断生成线程任务加入调度队列时间(中断处理时间)+调度处理时间。

参数

cyclictest --help

参数含义
-t   thread要创建的线程数量
-p  priority线程的优先级,数字越小,优先级越高,优先级越高,则自然会被优先调度处理。
-N测试结果使用精度更高的ns显示(默认是us)

测试结果分析

输出字段含义

AbbreviationLabelDescription
TThreadThread index and thread ID
PPriorityRT thread priority
IInterval线程的预期唤醒时间(以 US 为单位)(只是唤醒,还没有被执行)
CCount测量延迟的次数,即迭代计数(也就是定时器触发的次数,定时器触发一次,线程就需要被调度一次)
MinMinimum测得的最小延迟时间(以 US 为单位)
ActActual最后一次测得的延迟时间(以 US 为单位)
MaxMaximum测得的最大延迟时间(以 US 为单位)

重点关注的是max latency,因为一个系统实时性能的好坏通常由它的最大延时来决定。

ros2实时编程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值