ros2里面线程的作用 如何开启多线程

import threading 就是用来开"多线程",让程序能同时干好几件事,互不卡住。

如果不用线程,你的代码根本跑不起来。

  1. 线程是什么?

你可以把线程理解成 一个人同时长了好几只手:

  • 一只手 监听键盘

  • 一只手 处理输入命令

  • 一只手 跑 ROS2 循环

  • 一只手 定时发话题

如果只有一只手(单线程):

你一按键盘,程序就卡住不动了;

一跑 ROS2,键盘就废了。

  1. 你这段代码里 开了 3 个线程

我给你逐一指出来:

线程1:ROS2 主线程

python

rclpy.spin(ctrl)

负责:

  • 接收话题

  • 运行定时器(0.1s 发位置)

  • 处理回调

不跑这个,ROS2 就等于没启动。

线程2:键盘监听线程

python

keyboard_thread = threading.Thread(target=ctrl.keyboard_control, daemon=True)

keyboard_thread.start()

这只手专门:

  • 监听你按 W/S/O/L 键

  • 实时发送 CAN 指令

  • 不阻塞 ROS2

线程3:控制台输入线程

python

input_thread = threading.Thread(target=input_thread_func, daemon=True)

input_thread.start()

这只手专门:

  • 等你输入 0.5,0.3 这种绝对坐标

  • 解析、发送 CAN 指令

  • 也不阻塞 ROS2 和键盘

  1. 为什么必须用线程?(核心原因)

因为下面这些函数都是 阻塞(卡住)的:

  • get_key() → 一直等你按键

  • input() → 一直等你输东西

  • rclpy.spin() → 一直跑循环

如果不用线程:

→ 程序一启动就卡在键盘等待,ROS2 跑不起来

→ 或者一跑 ROS2,键盘和输入全部废了

线程 = 让它们同时跑,互不干扰。

  1. 最简单一句话总结

threading 就是让你的程序:

一边跑 ROS2,

一边监听键盘,

一边接收输入命令,

三件事同时干,谁也不耽误谁。

  1. 对应你代码里最关键的两句

python

开线程跑键盘

threading.Thread(target=ctrl.keyboard_control).start()

开线程跑输入

threading.Thread(target=input_thread_func).start()

这两个就是多线程的实际用处。

相关推荐
想唱rap13 小时前
C++11之包装器
服务器·开发语言·c++·算法·ubuntu
MIXLLRED14 小时前
随笔——ROS Ubuntu版本变化详解
linux·ubuntu·机器人·ros
sanzk15 小时前
astra pro稠密建图
ubuntu·ros·3d相机
fysuccess15 小时前
Ubuntu 22.04 零基础安装 Hermes 完整入门指南
linux·ubuntu·蓝桥杯
嵌入式学习和实践1 天前
虚拟机 Ubuntu 磁盘扩容完全指南:从原理到实践,一步到位
linux·ubuntu·磁盘扩容
木心术11 天前
TypeScript实战进阶:从基础类型到高级类型编程
javascript·ubuntu·typescript
sheeta19982 天前
TypeScript references 配置与 emit 要求详解
javascript·ubuntu·typescript
ancktion2 天前
ubuntu多gcc版本切换
linux·运维·ubuntu
贵沫末2 天前
Claude Code使用
ubuntu
DeepHacking2 天前
Ubuntu 22.04 安装 Allow Locked Remote Desktop 扩展:解决锁屏后 mstsc 无法连接的问题
linux·运维·ubuntu