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

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

相关推荐
勤自省2 小时前
ROS2从入门到“重启解决”:21讲8~12章踩坑血泪史与核心总结
linux·开发语言·ubuntu·ssh·ros
全球通史3 小时前
Jetson Nano语音交互:本地大模型全链路实战
ubuntu·交互
叶非花6 小时前
Ubuntu服务器性能检测工具NetData安装
linux·服务器·ubuntu
数智工坊1 天前
VMware 17 Pro 中 Ubuntu 虚拟机共享 Windows 文件夹(完美踩坑版)
linux·人工智能·windows·ubuntu
小猪写代码1 天前
壹:烧录Linux系统
linux·ubuntu
jfqqqqq1 天前
记一次ubuntu 22.04安装旧版 MongoDB 4.2
linux·mongodb·ubuntu
LuDvei1 天前
Ubuntu 20.04 安装 Android Studio 详细指南
linux·ubuntu·android studio
枕星而眠1 天前
Linux 共享内存与信号量全解析:原理、实践与避坑指南
linux·c语言·开发语言·后端·ubuntu
05候补工程师1 天前
ROS 2 入门:从零实现小海龟 (Turtlesim) 的手动控制与自动化绘圆
运维·经验分享·python·ubuntu·机器人·自动化
努力的小帅1 天前
Ubuntu 使用 avahi/mDNS 实现固定连接(VSCode Remote SSH + NoMachine)
linux·vscode·ubuntu·ssh·linux入门