You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I am now trying to using genesis to generate some data for VLA model,but I can not binding my camera to the end of joint correctly,while I trying to get the joint global position,some error occured:
this is my code:
import genesis as gs
import numpy as np
import cv2
gs.init(backend=gs.gpu)
# -----------场景初始化-----------
scene = gs.Scene(show_viewer=True)
# -----------背景-----------
plane = scene.add_entity(gs.morphs.Plane())
# -----------机械臂-----------
cam = scene.add_camera(
res = (1280, 960),
pos = (3.5, 0.0, 2.5),
lookat = (0, 0, 0.5),
fov = 30,
GUI = True
)
rm_dual = scene.add_entity(
gs.morphs.URDF(file='/home/nvidia/Genesis/rm_models/dual_arm_robot/urdf/dual_arm_robot.urdf'),
)
# -----------生成初始化-----------
scene.build()
# 相机操作
# rgb, depth, segmentation, normal = cam.render(depth=True, segmentation=True, normal=True)
# 绑定对应左手控制关节
left_jnt_names = [f"Joint_left{i}" for i in range(1,7)]+[f"Joint_l_finger{i}" for i in range(1,3)]
l_dofs_idx = [rm_dual.get_joint(name).dof_idx_local for name in left_jnt_names]
# 绑定对应右手控制关节
right_jnt_names = [f"Joint_right{i}" for i in range(1,7)]+[f"Joint_r_finger{i}" for i in range(1,3)]
r_dofs_idx = [rm_dual.get_joint(name).dof_idx_local for name in right_jnt_names]
# 绑定车轮
left_wheel_names = [f'joint_wheel_lf{i}' for i in range(1,3)]+[f'joint_wheel_lb{i}' for i in range(1,3)]
right_wheel_names = [f'joint_wheel_rf{i}' for i in range(1,3)]+[f'joint_wheel_rb{i}' for i in range(1,3)]
l_wheel_dofs_idx = [rm_dual.get_joint(name).dof_idx_local for name in left_wheel_names]
r_wheel_dofs_idx = [rm_dual.get_joint(name).dof_idx_local for name in right_wheel_names]
wheel_go_names =['joint_wheel_right','joint_wheel_left']
wheel_go_index = [rm_dual.get_joint(name).dof_idx_local for name in wheel_go_names]
# 绑定相机
cam_names =['joint_camera_ro']
cam_index = [rm_dual.get_joint(name).dof_idx_local for name in cam_names]
# 设置一些运动参数
# -----------左臂参数-----------
# 设置位置增益参数
rm_dual.set_dofs_kp(
kp = np.array([4500, 4500, 3500, 3500, 2000, 2000, 100, 100]),
dofs_idx_local = l_dofs_idx,
)
# 设置速度增益参数:
rm_dual.set_dofs_kv(
kv = np.array([1000, 1000, 1000, 1000, 1000, 1000, 10, 10]),
dofs_idx_local = l_dofs_idx,
)
# 设置力控安全区间
rm_dual.set_dofs_force_range(
lower = np.array([-87, -87, -87, -87, -12, -12, -100, -100]),
upper = np.array([ 87, 87, 87, 87, 12, 12, 100, 100]),
dofs_idx_local = l_dofs_idx,
)
# -----------右臂参数-----------
# 设置位置增益参数
rm_dual.set_dofs_kp(
kp = np.array([4500, 4500, 3500, 3500, 2000, 2000, 100, 100]),
dofs_idx_local = r_dofs_idx,
)
# 设置速度增益参数
rm_dual.set_dofs_kv(
kv = np.array([1000, 1000, 1000, 1000, 1000, 1000, 10, 10]),
dofs_idx_local = r_dofs_idx,
)
# 设置力控安全区间
rm_dual.set_dofs_force_range(
lower = np.array([-87, -87, -87, -87, -12, -12, -100, -100]),
upper = np.array([ 87, 87, 87, 87, 12, 12, 100, 100]),
dofs_idx_local = r_dofs_idx,
)
# -----------设置机械轮子参数-----------
# 左侧轮子
# 设置位置增益参数
rm_dual.set_dofs_kp(
kp = np.array([100,100,100,100]),
dofs_idx_local = l_wheel_dofs_idx,
)
# 设置速度增益参数
rm_dual.set_dofs_kv(
kv = np.array([1000, 1000, 1000, 1000]),
dofs_idx_local = l_wheel_dofs_idx,
)
# 设置力控安全区间
rm_dual.set_dofs_force_range(
lower = np.array([-87, -87, -87, -87]),
upper = np.array([ 87, 87, 87, 87]),
dofs_idx_local = l_wheel_dofs_idx,
)
# 右侧轮子
rm_dual.set_dofs_kp(
kp = np.array([100,100,100,100]),
dofs_idx_local = r_wheel_dofs_idx,
)
# 设置速度增益参数
rm_dual.set_dofs_kv(
kv = np.array([1000, 1000, 1000, 1000]),
dofs_idx_local = r_wheel_dofs_idx,
)
# 设置力控安全区间
rm_dual.set_dofs_force_range(
lower = np.array([-87, -87, -87, -87]),
upper = np.array([ 87, 87, 87, 87]),
dofs_idx_local = r_wheel_dofs_idx,
)
# 前进轮
rm_dual.set_dofs_kp(
kp = np.array([100,100]),
dofs_idx_local = wheel_go_index,
)
# 设置速度增益参数
rm_dual.set_dofs_kv(
kv = np.array([1000, 1000]),
dofs_idx_local = wheel_go_index,
)
# 设置力控安全区间
rm_dual.set_dofs_force_range(
lower = np.array([-87, -87]),
upper = np.array([ 87, 87]),
dofs_idx_local = wheel_go_index,
)
# -----------运动动作预览-----------
# Hard reset
for i in range(50):
if i < 50:
rm_dual.set_dofs_position(
np.array([0,0,0,0,0,0,0.04,0.04]),
l_dofs_idx
)
rm_dual.set_dofs_position(
np.array([0,0,0,0,0,0,0.04,0.04]),
r_dofs_idx
)
rm_dual.set_dofs_position(
np.array([1.57]),
r_wheel_dofs_idx[:1]
)
rm_dual.set_dofs_position(
np.array([1.57]),
cam_index[:1]
)
scene.step()
# cam.render()
for i in range(1200):
if i == 0:
rm_dual.control_dofs_position(
np.array([0,0,0,0,0,0,0.03,0.03]),
l_dofs_idx
)
rm_dual.control_dofs_position(
np.array([0,0,0,0,0,0,0.03,0.03]),
r_dofs_idx
)
rm_dual.control_dofs_velocity(
np.array([5,-5]),
wheel_go_index
)
if i == 300:
rm_dual.control_dofs_position(
np.array([0,1,0,0,0,-1,0,0]),
l_dofs_idx
)
rm_dual.control_dofs_position(
np.array([0,-1,0,0,0,1,0,0]),
r_dofs_idx
)
rm_dual.control_dofs_velocity(
np.array([0,0]),
wheel_go_index
)
if i==600:
rm_dual.control_dofs_position(
np.array([0,1,0,0,0,-1,0.03,0.03]),
l_dofs_idx
)
rm_dual.control_dofs_position(
np.array([0,-1,0,0,0,1,0.03,0.03]),
r_dofs_idx
)
rm_dual.control_dofs_velocity(
np.array([5,5]),
wheel_go_index
)
if i==900:
rm_dual.control_dofs_position(
np.array([0,0,0,0,0,0,0,0]),
l_dofs_idx
)
rm_dual.control_dofs_position(
np.array([0,0,0,0,0,0,0.1,1]),
r_dofs_idx
)
rm_dual.control_dofs_velocity(
np.array([5,-5]),
wheel_go_index
)
# cam_pos = rm_dual.get_dofs_position(cam_index[:1])
# print(rm_dual.joints[cam_index[0]])
print(rm_dual.joints[cam_index[0]].get_pos())
scene.step()
cam.render()
and the error is:
Traceback (most recent call last):
File "/home/nvidia/Genesis/try.py", line 218, in
print(rm_dual.joints[cam_index[0]].get_pos())
File "/home/nvidia/Genesis/genesis/utils/misc.py", line 48, in wrapper
return method(self, *args, **kwargs)
File "/home/nvidia/Genesis/genesis/engine/entities/rigid_entity/rigid_joint.py", line 84, in get_pos
self._kernel_get_pos(tensor)
File "/home/nvidia/.conda/envs/Genesis/lib/python3.10/site-packages/taichi/lang/kernel_impl.py", line 1178, in call
raise type(e)("\n" + str(e)) from None
taichi.lang.exception.TaichiIndexError:
File "/home/nvidia/Genesis/genesis/engine/entities/rigid_entity/rigid_joint.py", line 94, in _kernel_get_pos:
l_info = self._solver.links_info[self._idx, i_b]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Field with dim 1 accessed with indices of dim 2
The text was updated successfully, but these errors were encountered:
It's a bug left from the legacy code. Should be fixed in PR #238
Meanwhile a quick workaround is to, at genesis/engine/entities/rigid_entity/rigid_joint.py, line 94, in _kernel_get_pos, change from
I am now trying to using genesis to generate some data for VLA model,but I can not binding my camera to the end of joint correctly,while I trying to get the joint global position,some error occured:
this is my code:
and the error is:
Traceback (most recent call last):
File "/home/nvidia/Genesis/try.py", line 218, in
print(rm_dual.joints[cam_index[0]].get_pos())
File "/home/nvidia/Genesis/genesis/utils/misc.py", line 48, in wrapper
return method(self, *args, **kwargs)
File "/home/nvidia/Genesis/genesis/engine/entities/rigid_entity/rigid_joint.py", line 84, in get_pos
self._kernel_get_pos(tensor)
File "/home/nvidia/.conda/envs/Genesis/lib/python3.10/site-packages/taichi/lang/kernel_impl.py", line 1178, in call
raise type(e)("\n" + str(e)) from None
taichi.lang.exception.TaichiIndexError:
File "/home/nvidia/Genesis/genesis/engine/entities/rigid_entity/rigid_joint.py", line 94, in _kernel_get_pos:
l_info = self._solver.links_info[self._idx, i_b]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Field with dim 1 accessed with indices of dim 2
The text was updated successfully, but these errors were encountered: