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

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

相关推荐
张飞飞飞飞飞7 天前
Tmux命令使用教程
linux·服务器·ubuntu
盼小辉丶7 天前
Ubuntu极速部署OpenClaw完全指南(本地模型+DeepSeek)
linux·ubuntu·openclaw
黑白园7 天前
【环境搭建】Ubuntu安装(一)
linux·ubuntu
Moshow郑锴7 天前
Ubuntu用SDKMAN轻松管理多个Java 版本
java·ubuntu·sdkman
error:(7 天前
Ubuntu 22.04 GNOME远程桌面配置问题排查与解决全流程
linux·运维·ubuntu
Java知识技术分享7 天前
在windows上使用wsl安装Ubuntu~linux系统
linux·人工智能·windows·ubuntu
天疆说7 天前
在 Ubuntu 24.04 上安装 MATLAB R2021b
数据库·ubuntu·matlab
Clang's Blog7 天前
Ubuntu(20.04/22.04/24.04)国内环境一键安装 Docker、JDK17 和 Maven
ubuntu·docker·maven
izcll7 天前
ubuntu系统安装软件的方法
linux·运维·ubuntu
天疆说7 天前
在 Ubuntu 的 VSCode 中配置 MATLAB
vscode·ubuntu·matlab