How to Control a Character's Movement Using Keyboard (WASD) in Isaac Sim?

Hi everyone,

I’m working with Isaac Sim and using the built-in humanoid Character system (with CharacterBehavior and animation graph setup).

What I’d like to do is:

🔹 Control the character in the scene using keyboard input — W, A, S, D — to move forward, backward, and turn left/right interactively during simulation.

I’ve tried:

  • Injecting GoTo commands through AgentManager.inject_command(...), which works for moving the character to specific positions.
  • Listening for keyboard input using carb.input.acquire_input_interface() — I can detect key presses.
  • But I’m not sure how to link real-time key input to character direction and movement, or if there is an official API or pattern for this.

My questions:

  1. 🧭 Is there a recommended way to continuously move the character based on keypress (like holding down W to walk forward)?
  2. 🎮 Should I inject commands repeatedly, or is there a more responsive way via Animation Graph or NavigationManager?
  3. 🧠 If using OmniGraph (Action Graph), is it possible to drive character behavior with OnKeyboardEvent nodes + animation control?

Any pointers, examples, or official demos that show keyboard-driven character navigation would be greatly appreciated!

Thanks in advance!

Best,

Thank you for your question! We will take a look and get back to you.

Hi,

By default, omni.anim.people dose not support keyboard movment, but doing that is not impossible. In fact you can do that by simply controling its anim graph.

Once character is set up by omni.anim.people, an invidible Biped would be created. The character will be attached by the Biped anim graph. Inside the anim graph there is a “Walk” state, and the PathPoints variables:


This is how character walk. Basically you need to switch to this walk state and provide PathPoints

The control druing each keyboard event would be like this:

import omni.anim.graph.core as ag
c = ag.get_character(character_skelroot_prim_path) # Get character
c.set_variable(“Action”, “Walk”) # Enter walk state
c.set_variable(“Walk”, 1.0) # Activate walk aniamtions
c.set_variable(“PathPoints”, continuous_pathpoints) # Provide target points to walk to
c.set_variable(“Action”, None) # Exit walk state when keyboard event ends

[continuous_pathpoints] from above can be calculated from the character current forward, left, right, backward directions.

Here is the example code to get current forward direction:


get_character_forward.txt (1.4 KB)
(cannot upload python file so I saved the code as txt)

Hope this information can help you create your own character controller.