forked from logzhan/RobotKernal-UESTC
50 lines
1.7 KiB
Python
50 lines
1.7 KiB
Python
|
#!/usr/bin/env python
|
||
|
import sys
|
||
|
from pynput.keyboard import Key, Listener
|
||
|
import subprocess
|
||
|
|
||
|
running_process = None
|
||
|
|
||
|
def execute_launch(key):
|
||
|
global running_process
|
||
|
launch_files = {
|
||
|
'a': ('/home/firefly/pibot_ros/ros_ws/src/upbot_vision/launch/upbot_vision.launch', []), # stereo
|
||
|
'b': ('/home/firefly/pibot_ros/ros_ws/src/pibot_navigation/launch/nav.launch', ['map_name:=10_10m']), # nav
|
||
|
'c': ('/home/firefly/pibot_ros/ros_ws/src/ipa_coverage_planning/ipa_room_exploration/ros/test/room_exploration_client.launch', ['robot_env:=10_10m']), # client
|
||
|
'd': ('/home/firefly/pibot_ros/ros_ws/src/ipa_coverage_planning/ipa_room_exploration/ros/launch/room_exploration_action_server.launch', []), # server
|
||
|
}
|
||
|
# 检查按键是否对应一个.launch文件
|
||
|
if key in launch_files:
|
||
|
# 获取对应的.launch文件和参数
|
||
|
launch_file, launch_args = launch_files[key]
|
||
|
# 构造启动命令
|
||
|
launch_command = ["roslaunch", launch_file] + launch_args
|
||
|
# 执行对应的.launch文件
|
||
|
running_process = subprocess.Popen(launch_command)
|
||
|
|
||
|
# 监听按键事件
|
||
|
def on_press(key):
|
||
|
global running_process
|
||
|
|
||
|
if key.char == 'q':
|
||
|
print("stop1")
|
||
|
if running_process:
|
||
|
running_process.terminate()
|
||
|
running_process = None # 清除已结束的进程
|
||
|
print("stop2")
|
||
|
return False # 停止监听器
|
||
|
|
||
|
try:
|
||
|
if key.char == 's':
|
||
|
print("按下 's' 键,程序停止")
|
||
|
return False # 停止监听器
|
||
|
|
||
|
execute_launch(key.char)
|
||
|
|
||
|
except AttributeError:
|
||
|
# 按下的不是字符键,忽略
|
||
|
pass
|
||
|
|
||
|
with Listener(on_press=on_press) as listener:
|
||
|
listener.join()
|