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

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

相关文章:

  • 白盒测试——基本路径测试法
  • 【网络协议】TCP、HTTP、MQTT 和 WebSocket 对比
  • uni-app vue3版本打包h5后 页面跳转报错(uni[e] is not a function)
  • Lighthouse 自定义审计
  • SpringAI更新:废弃tools方法、正式支持DeepSeek!
  • Linux `whoami` 命令深度解析与高阶应用指南
  • “强强联手,智启未来”凯创未来与绿算技术共筑高端智能家居及智能照明领域新生态
  • 《Python星球日记》 第72天:问答系统与信息检索
  • 一文介绍电路交换、报文交换和分组交换
  • 给 DBGridEh 增加勾选用的检查框 CheckBox
  • Qt笔记---》.pro中配置
  • Java项目拷打(外卖+点评)
  • Java大师成长计划之第22天:Spring Cloud微服务架构
  • 软考 系统架构设计师系列知识点之杂项集萃(59)
  • 计算机组成原理:I/O
  • 论MCU如何在Fatfs中使用Flash接口的方法
  • TCP/IP参考模型详解:从理论架构到实战应用
  • 【Java】 volatile 和 synchronized 的比较及使用场景
  • matlab插值方法(简短)
  • 可编辑38页PPT | 数字化建设—财务系统规划方案
  • 晋级四强!WTA1000罗马站:郑钦文2比0萨巴伦卡
  • 广东韶关一镇干部冲进交通事故火海救人,获授“见义勇为”奖励万元
  • 在地球另一端的交流,架起2万公里间更多共赢的桥梁
  • 外交部就习近平主席将出席中拉论坛第四届部长级会议开幕式介绍情况
  • 王毅同巴基斯坦副总理兼外长达尔通电话
  • 视频丨习近平同普京在主观礼台出席红场阅兵式