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()

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

相关推荐
FriendshipT17 小时前
Ubuntu 20.04 下使用 Ollama 本地部署 AI 大模型
linux·人工智能·python·深度学习·ubuntu
bellus-18 小时前
win11使用ubuntu 26.04
linux·运维·ubuntu
keyipatience21 小时前
Socket编程3个版本
linux·运维·服务器·开发语言·网络·ubuntu
w67820071 天前
Prisma不能优雅的支持DTO,试试Vona ORM吧
linux·运维·ubuntu
PC2005-cloud2 天前
Windows 下 WSL2 + Docker Desktop + Ubuntu 开发环境搭建指南
windows·ubuntu·docker
_张一凡2 天前
Ubuntu 完美安装 FT_SCServo_Debug_Qt 飞特SCS_STS舵机调试工具
linux·ubuntu·舵机调试
ZSTU_呆大鹅2 天前
VMware 虚拟机 + Ubuntu24.04 的缩略图服务冲突
ubuntu
蛊明2 天前
一台老 ThinkPad 的系统博物馆:Windows、Ubuntu、UOS、Kylin多系统共存方案
windows·ubuntu·kylin
夫唯不争,故无尤也2 天前
Ubuntu阿里云服务器一键安装RustDesk指南
服务器·ubuntu·阿里云
手揽回忆怎么睡2 天前
Ubuntu 22.04 64位安装MinIO
linux·前端·ubuntu