chore: release v0.0.1

This commit is contained in:
motphys-developers
2025-11-20 08:57:48 +00:00
commit 5133830b5a
105 changed files with 8789 additions and 0 deletions

78
scripts/view.py Normal file
View File

@@ -0,0 +1,78 @@
# Copyright (C) 2020-2025 Motphys Technology Co., Ltd. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ==============================================================================
import gymnasium as gym
import numpy as np
from absl import app, flags
from motrix_envs import registry
from motrix_envs.np.env import NpEnv
from motrix_envs.np.renderer import NpRenderer
_ENV = flags.DEFINE_string("env", "cartpole", "The env to view")
_SIM_BACKEND = flags.DEFINE_string("sim-backend", None, "The simulation backend to use.")
_NUM_ENVS = flags.DEFINE_integer("num-envs", 1, "Number of parallel environments.")
class NpEnvRunner:
_renderer: NpRenderer
def __init__(self, env: NpEnv):
self._env = env
self._renderer = NpRenderer(env)
def _sample_random_action(self):
action_space = self._env.action_space
if isinstance(action_space, gym.spaces.Box):
size = (self._env.num_envs, *action_space.shape)
return np.random.uniform(
low=action_space.low,
high=action_space.high,
size=size,
).astype(action_space.dtype)
else:
raise NotImplementedError("Only Box action space is supported")
def step(self):
actions = self._sample_random_action()
self._env.step(actions)
def start(self):
import time
env_dt = self._env.cfg.ctrl_dt
while True:
t0 = time.monotonic()
actions = self._sample_random_action()
self._env.step(actions)
self._renderer.render()
real_dt = time.monotonic() - t0
sleep_dt = env_dt - real_dt
if sleep_dt > 0:
time.sleep(sleep_dt)
def main(argv):
env_name = _ENV.value
sim_backend = _SIM_BACKEND.value
num_envs = _NUM_ENVS.value
env = registry.make(env_name, sim_backend=sim_backend, num_envs=num_envs)
runner = NpEnvRunner(env)
runner.start()
if __name__ == "__main__":
app.run(main)