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

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

相关推荐
上天_去_做颗惺星 EVE_BLUE2 小时前
Ubuntu Android 虚拟机安装使用教程
android·linux·测试工具·ubuntu·安卓
CairBin4 小时前
SideSail——Ubuntu 26.04(GNOME 50)侧边栏插件,支持设备信息剪贴板和米家设备简单控制
linux·ubuntu
爱讲故事的5 小时前
操作系统第四讲:OS Interfaces and Syscalls(操作系统接口与系统调用)
linux·windows·ubuntu
「QT(C++)开发工程师」5 小时前
免费在线 Ubuntu/Linux 运行环境
linux·运维·ubuntu
三无推导8 小时前
One API Docker 部署实战:从 0 搭建多模型统一接口管理平台
运维·ubuntu·docker·容器·github·api网关·token管理
好名字更能让你们记住我8 小时前
通过docker在本地部署博客系统服务
linux·运维·服务器·ubuntu·docker·容器
l齐天9 小时前
Ubuntu 22.04 环境下 PBC 与 Golang 的安装、配置与测试
linux·ubuntu·golang
爱讲故事的1 天前
操作系统第一讲复习:为什么学习操作系统,以及操作系统到底在做什么?
linux·开发语言·windows·学习·ubuntu·c#
我先去打把游戏先1 天前
Ubuntu虚拟机(服务器版本)Git卸载完全教程——彻底移除与清理配置
服务器·git·单片机·嵌入式硬件·物联网·ubuntu·51单片机
shandianchengzi1 天前
【记录】Ubuntu|Ubuntu 26.04 笔记本耗电过快,排查 省电过程
linux·运维·ubuntu