ROS2入门教程-ROS2实时编程
说明:
- 介绍如何在ROS2实时编程
概述:
为了制作实时计算机系统,我们的实时循环必须定期更新以满足最后期限。在这些截止日期(我们的最大允许抖动)上,我们只能容忍很小的误差。为此,我们必须避免执行路径中的非确定性操作,例如:页面错误事件、动态内存分配/释放以及无限期阻塞的同步原语
通常由实时计算解决的控制问题的一个经典示例是平衡倒立摆。如果控制器意外地长时间阻塞,摆锤会掉落或变得不稳定。但是,如果控制器以比控制钟摆的电机可以运行的速度更快的速度可靠地更新,钟摆将成功地适应传感器数据以平衡钟摆
步骤:
运行之前,确保至少有 8Gb 的可用 RAM。使用内存锁定,交换将不再起作用
运行二进制文件,并重定向输出
pendulum_demo > output.txt
- 结果如下
mlockall failed: Cannot allocate memory
Couldn't lock all cached virtual memory.
Pagefaults from reading pages not yet mapped into RAM will be recorded.
- 调整内存锁定权限,添加到/etc/security/limits.conf
<your username> - memlock <limit in kB>
保存文件,注销并重新登录。
重新运行pendulum_demo调用
要查看更多输出,我们必须运行pendulum_logger节点
在一个带有install/setup.bash源的shell 中,调用
pendulum_logger
- 结果如下:
Logger node initialized.
在另一个带有 setup.bash 来源的 shell 中,pendulum_demo再次调用
可执行文件启动,另一个 shell不断地打印输出
Commanded motor angle: 1.570796
Actual motor angle: 1.570796
Mean latency: 210144.000000 ns
Min latency: 4805 ns
Max latency: 578137 ns
Minor pagefaults during execution: 0
Major pagefaults during execution: 0
- 设置调度器权限
<your username> - rtprio 98
绘图结果
使用文件名再次运行演示以保存结果
pendulum_demo -f pendulum_demo_results
- 在生成的文件上运行rttest_plot
rttest_plot pendulum_demo_results
- 生成三个文件
pendulum_demo_results_plot_latency.svg
pendulum_demo_results_plot_majflts.svg
pendulum_demo_results_plot_minflts.svg
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号