当前位置: 首页 > java >正文

Apollo学习——键盘控制速度

# keyboard_control.py
import time
import keyboard # 键盘输入模块 pip install keyboard
from getkey import getkey, keys
from cyber.python.cyber_py3 import cyber_time
from cyber.python.cyber_py3 import cyber
from modules.common_msgs.control_msgs import control_cmd_pb2
from modules.common_msgs.chassis_msgs import chassis_pb2
import sys, select, os
if os.name == 'nt':import msvcrt, time
else:import tty, termios
derta_speed = 2.0  # 单位:m/s
derta_heading = 2.0  # 单位:m/s
def getKey():if os.name == 'nt':timeout = 0.1startTime = time.time()while(1):if msvcrt.kbhit():if sys.version_info[0] >= 3:return msvcrt.getch().decode()else:return msvcrt.getch()elif time.time() - startTime > timeout:return ''tty.setraw(sys.stdin.fileno())rlist, _, _ = select.select([sys.stdin], [], [], 0.1)if rlist:key = sys.stdin.read(1)else:key = ''termios.tcsetattr(sys.stdin, termios.TCSADRAIN, settings)return key
class CarController:def __init__(self):# 控制参数初始化self.throttle = 0.0    # 油门 (0.0~1.0)self.brake = 0.0       # 刹车 (0.0~1.0)self.steering = 0.0    # 转向 (-1.0左 ~ 1.0右)self.max_throttle = 100.0  # 最大油门限制(安全阈值)self.steering_rate = 0.1  # 转向灵敏度# 初始化 Cyber RTcyber.init()self.node = cyber.Node("keyboard_control")self.control_writer = self.node.create_writer("/apollo/control", control_cmd_pb2.ControlCommand)def send_control_command(self):"""发布控制指令至 Apollo 控制模块"""cmd = control_cmd_pb2.ControlCommand()cmd.header.timestamp_sec = cyber_time.Time.now().to_sec()cmd.header.module_name = "keyboard_control"# 指令映射cmd.throttle = self.throttlecmd.brake = self.brakecmd.steering_target = self.steeringcmd.gear_location = 1  # 前进挡self.control_writer.write(cmd)print(f"指令: 油门={self.throttle:.2f}, 刹车={self.brake:.2f}, 转向={self.steering:.2f}")def keyboard_listener(self):"""监听键盘输入并更新控制参数"""print("使用 WASD 控制车辆,Q 退出...")while not cyber.is_shutdown():key = getKey()# 油门控制(W/S)if key == 'w':self.throttle = min(self.throttle + derta_speed, self.max_throttle)self.brake = 0.0elif key == 's':self.brake = min(self.brake + derta_speed, self.max_throttle)self.throttle = 0.0# else:#     self.throttle = max(self.throttle - derta_speed, 0.0)#     self.brake = max(self.brake - derta_speed, 0.0)# 转向控制(A/D)if key == 'a':self.steering = max(self.steering - self.steering_rate, -1.0)elif key == 'd':self.steering = min(self.steering + self.steering_rate, 1.0)else:self.steering *= 0.9  # 自动回正# 退出条件if key == 'q':breakself.send_control_command()time.sleep(0.1)  # 控制频率10Hzif __name__ == '__main__':controller = CarController()controller.keyboard_listener()cyber.shutdown()
http://www.xdnf.cn/news/6119.html

相关文章:

  • mapreduce
  • AI大模型从0到1记录学习 linux day23
  • 深入理解SpringBoot中的SpringCache缓存技术
  • deepseek梳理java高级开发工程师微服务面试题-进阶版
  • 嵌入式中深入理解C语言中的指针:类型、区别及应用
  • 【​​HTTPS基础概念与原理​】对称加密与非对称加密在HTTPS中的协作
  • cadence Allegro PCB测量时 同时显示两种单位(mil mm)的设置方法
  • 大型企业数据治理与数据资产化:从技术债到价值锚的演进之路
  • elasticsearch硬件与资源配置优化
  • 性能比拼: Linkerd vs. Istio
  • OA 系统办公自动化包含哪些内容,关键功能模块与操作要点说明
  • 【Python 内置函数】
  • 大模型数据处理全流程【实战】数据洞察、数据增强、数据清洗
  • 【Redis】缓存穿透、缓存雪崩、缓存击穿
  • 印刷业直角坐标型码垛机器人系统设计与应用研究
  • python:一个代理流量监控的媒体文件下载脚本
  • 518本周总结(30)Steam过审+Epic提审
  • Vue3指令(二)--v-text、v-html数据渲染,计算属性
  • TNNLS-2020《Autoencoder Constrained Clustering With Adaptive Neighbors》
  • 【DRAM存储器五十一】LPDDR5介绍--CK、WCK、RDQS单端模式、Thermal Offset、Temperature Sensor
  • 近期搬了个家,停更了几天,明天继续哈~
  • 学会使用ai作图
  • 腾讯 IMA 工作台升级:新增知识库广场与 @提问功能
  • 标签部件(lv_label)
  • 企业数字化转型背景下的企业知识管理挑战与经验杂谈
  • 如何迁移 WSL 卸载 Ubuntu WSL
  • 数据库常见故障排查
  • 网络协议分析 实验六 TCP和端口扫描
  • web第三次课后作业--基于JDBC对mysql数据库的增删查改操作
  • 51单片机——交通指示灯控制器设计