trait KeyboardControlled:
    signal_interface:
        flip_right_wheel_angular_vel_input is Control.Virtual.AffineTransform1DInput:
            field_name: "angular_velocity"
            scale: -1
            offset: 0
            target: front_right_drive_motor.target_angular_velocity_input
        wheels_velocity_input is Control.Virtual.BroadcastInput:
            targets: [front_left_drive_motor.target_angular_velocity_input, signal_interface.flip_right_wheel_angular_vel_input]

    keyboard_controller is Control.Keyboard.Controller:
        enabled: true
        up is Control.Keyboard.KeyBinding:
            keys: ["up"]
            hold becomes Control.Keyboard.Actions.Set:
                targets: [signal_interface.wheels_velocity_input]
                value becomes Real: 10.0
            release becomes Control.Keyboard.Actions.Set:
                targets: keyboard_controller.up.hold.targets
                value becomes Real: 0.0
        down is Control.Keyboard.KeyBinding:
            keys: ["down"]
            hold becomes Control.Keyboard.Actions.Set:
                targets: [signal_interface.wheels_velocity_input]
                value becomes Real: -10.0
            release becomes Control.Keyboard.Actions.Set:
                targets: keyboard_controller.up.hold.targets
                value becomes Real: 0.0
