Hi ! @toni.sm
I am customizing my RL env in IsaacSim. (Cannot use RL Framework by some issues :,| )
I want to compute inverse kinematics using LulaKinematicsSolver in RL library.
I used LulaKinematicsSolver class in my python code as below.
PATH/ov/pkg/isaac_sim2022.2.0/standalone_examples/api/omni.isaac.gym/robot_task.py
def set_up_scene(self, scene) -> None:
...
# Create Target point
self._target_position = [random.uniform(0.4, 0.6), random.uniform(-0.3, 0.3), random.uniform(0.75, 1.2)]
create_prim(prim_path="/World/Target", prim_type="Xform", position=self._target_position)
# Create an ArticulationView wrapper for our robot - this can be extended towards accessing multiple robots
self._robots = ArticulationView(prim_paths_expr="/World/M1013*", name="robot_view")
# Add Robot ArticulationView and ground plane to the Scene
scene.add(self._robots)
scene.add_default_ground_plane()
scene.get_object(self._robots)
# Add LulaKinematicsSolver
lula_kinematics_solver = LulaKinematicsSolver(
robot_description_path="/PATH/urdf/rmpflow/robot_descriptor.yaml",
urdf_path="/PATH/urdf/robot.urdf",
)
end_effector_name = "Mount"
my_robot=scene.get_object("/World/M1013")
self.articulation_kinematics_solver = ArticulationKinematicsSolver(my_robot,lula_kinematics_solver,end_effector_name)
...
def pre_physics_step(self, actions) -> None:
...
# compute IK solution for the current point
actions, succ = self.articulation_kinematics_solver.compute_inverse_kinematics(
target_position=get_prim_property(prim_path="/World/Target", property_name="xformOp:translate"),
target_orientation=np.array([0, 0, 1, 0]), # arbitrary orientation
)
if succ:
print("Actions result : ", actions)
pass
else:
carb.log_warn("IK did not converge for IK point.")
...
However, there are some errors like below.
Traceback (most recent call last):
File "robot_train.py", line 36, in <module>
model.learn(total_timesteps=1000000)
File "/home/idim/.local/share/ov/pkg/isaac_sim-2022.2.0/kit/python/lib/python3.7/site-packages/stable_baselines3/ppo/ppo.py", line 327, in learn
progress_bar=progress_bar,
File "/home/idim/.local/share/ov/pkg/isaac_sim-2022.2.0/kit/python/lib/python3.7/site-packages/stable_baselines3/common/on_policy_algorithm.py", line 262, in learn
continue_training = self.collect_rollouts(self.env, callback, self.rollout_buffer, n_rollout_steps=self.n_steps)
File "/home/idim/.local/share/ov/pkg/isaac_sim-2022.2.0/kit/python/lib/python3.7/site-packages/stable_baselines3/common/on_policy_algorithm.py", line 181, in collect_rollouts
new_obs, rewards, dones, infos = env.step(clipped_actions)
File "/home/idim/.local/share/ov/pkg/isaac_sim-2022.2.0/kit/python/lib/python3.7/site-packages/stable_baselines3/common/vec_env/base_vec_env.py", line 162, in step
return self.step_wait()
File "/home/idim/.local/share/ov/pkg/isaac_sim-2022.2.0/kit/python/lib/python3.7/site-packages/stable_baselines3/common/vec_env/dummy_vec_env.py", line 44, in step_wait
self.actions[env_idx]
File "/home/idim/.local/share/ov/pkg/isaac_sim-2022.2.0/kit/python/lib/python3.7/site-packages/stable_baselines3/common/monitor.py", line 94, in step
observation, reward, done, info = self.env.step(action)
File "/home/idim/.local/share/ov/pkg/isaac_sim-2022.2.0/exts/omni.isaac.gym/omni/isaac/gym/vec_env/vec_env_base.py", line 133, in step
self._task.pre_physics_step(actions)
File "/home/idim/.local/share/ov/pkg/isaac_sim-2022.2.0/standalone_examples/api/omni.isaac.gym/Kcloud/robot_task.py", line 161, in pre_physics_step
target_orientation=np.array([0, 0, 1, 0]), # arbitrary orientation
File "/home/idim/.local/share/ov/pkg/isaac_sim-2022.2.0/exts/omni.isaac.motion_generation/omni/isaac/motion_generation/articulation_kinematics_solver.py", line 85, in compute_inverse_kinematics
warm_start = self._joints_view.get_joint_positions()
File "/home/idim/.local/share/ov/pkg/isaac_sim-2022.2.0/exts/omni.isaac.core/omni/isaac/core/articulations/articulation_subset.py", line 25, in decorator
if not self.is_initialized:
File "/home/idim/.local/share/ov/pkg/isaac_sim-2022.2.0/exts/omni.isaac.core/omni/isaac/core/articulations/articulation_subset.py", line 68, in is_initialized
return self.articulation.handles_initialized
AttributeError: 'NoneType' object has no attribute 'handles_initialized'
2023-03-17 11:58:42 [15,268ms] [Warning] [carb.audio.context] 1 contexts were leaked
Is it possible to implement the computation of IK in this case ?
Thank you !