配置键盘/鼠标控制#

IR-SIM 支持读取键盘与鼠标输入,以手动控制机器人。

键盘控制配置参数#

在键盘控制模式下,机器人的行为由用户操作,YAML 中的行为设置会被忽略。IR-SIM 默认使用 pynput 全局键盘钩子;若 pynput 不可用,则自动回退到 Matplotlib 图窗键盘事件后端。可通过以下命令安装 pynput

pip install pynput

要启用键盘控制,只需在 world 部分将 control_mode 设为 keyboard。示例如下:

import irsim

env = irsim.make()

for i in range(1000):

    env.step()
    env.render(0.05)

    if env.done():
        break

env.end()
world:
  height: 50  
  width: 50   
  control_mode: 'keyboard'  
  obstacle_map: 'cave.png'
  mdownsample: 2

robot:
  - kinematics: {name: 'acker'} 
    shape: {name: 'rectangle', length: 4.6, width: 1.6, wheelbase: 3}
    state: [5, 5, 0, 0]
    goal: [40, 40, 0]
    vel_max: [4, 1]
    plot:
      show_trail: True
      traj_color: 'g'
      show_trajectory: True
      show_goal: False

    sensors:
      - name: 'lidar2d'
        range_min: 0
        range_max: 20
        angle_range: 3.14
        number: 100
        alpha: 0.4

键盘控制按键映射#

按键

功能

w

前进

s

后退

a

左转 (diff/acker) / 左平移 (omni/omni_angular)

d

右转 (diff/acker) / 右平移 (omni/omni_angular)

q

左旋转 (omni_angular)

e

右旋转 (omni_angular)

z

降低最大角速度

c

提升最大角速度

shift+z

降低最大线速度

shift+c

提升最大线速度

alt+num

切换当前控制的机器人 ID

r

重置环境

space

暂停/继续仿真

esc

退出环境(设置 quit 标志)

x

切换键盘/自动控制

l

重新加载环境

F5

调试环境(Mac 请按 fn+F5)

v

保存当前图像

环境状态控制#

空格键可依据当前状态在“Pause”和“Running”之间切换。如果环境尚未进入 Running,首次按下可能会将其置为 Running。

可通过 env.status 属性查看环境当前状态:

import irsim

env = irsim.make()

for i in range(1000):
    env.step()
    env.render(0.05)
    
    # Check current status
    print(f"Environment status: {env.status}")
    
    if env.done():
        break

env.end()

选择键盘后端(pynput vs Matplotlib)#

  • 默认后端:pynput(全局键盘钩子,Matplotlib 窗口聚焦时生效)。若未安装,IR-SIM 会自动回退到 mpl

  • 备选后端:mpl(Matplotlib 图窗键盘事件),只要图窗获得焦点即可,无需额外依赖。

可在 YAML 根节点添加 keyboard 段落,以配置后端与关键参数:

world:
  control_mode: 'keyboard'

gui:
  keyboard:
    backend: 'pynput'      # 'pynput' (default) or 'mpl'
    global_hook: true      # capture keys globally (may require OS permissions)
    key_id: 0              # initial robot control id
    # key_lv_max: 3.0      # maximum linear velocity
    # key_ang_max: 1.0     # maximum angular velocity
    # key_lv: 0.0          # initial linear velocity
    # key_ang: 0.0         # initial angular velocity

鼠标控制#

IR-SIM 支持通过鼠标缩放环境并跟踪鼠标位置,默认开启。你可以例如用鼠标左键设置机器人的目标点。

import irsim

env = irsim.make()

for i in range(10000):
    env.step()
    env.render(0.05, show_goal=False)
    
    if env.mouse_left_pos is not None:
        env.robot.set_goal(env.mouse_left_pos)

    if env.done():
        break

env.end()
world:
  height: 50 
  width: 50  
  step_time: 0.1 
  sample_time: 0.1 
  offset: [0, 0] 
  collision_mode: 'stop' 
  control_mode: 'auto' 
  plot:
    saved_figure:
      bbox_inches: null

robot:
  - kinematics: {name: 'diff'} 
    shape: {name: 'circle', radius: 1}
    state: [5, 5, 0]
    vel_max: [4, 1]
    behavior: {name: 'dash'} 
    plot:
      show_trajectory: True
      traj_color: 'g'
      show_goals: True

    sensors:
      - name: 'lidar2d'
        range_min: 0
        range_max: 20
        angle_range: 3.14
        number: 100
        noise: False
        std: 1
        angle_std: 0.2
        offset: [0, 0, 0]
        alpha: 0.4


obstacle:
  - number: 10
    distribution: {name: 'manual'}
    shape:
      - {name: 'polygon', random_shape: true, center_range: [5, 10, 40, 30], avg_radius_range: [0.5, 2]} 

鼠标控制映射#

鼠标操作

功能

移动鼠标

跟踪鼠标位置并更新显示坐标

鼠标中键

重置缩放至默认视图

滚轮上滑

以鼠标位置为中心放大

滚轮下滑

以鼠标位置为中心缩小

鼠标位置属性#

属性

类型

说明

mouse_left_pos

tuple

左键点击位置 (x, y)

mouse_right_pos

tuple

右键点击位置 (x, y)

mouse_pos

tuple

当前鼠标位置 (x, y)