@@ -407,6 +407,9 @@ def _load_scene(self, morph, surface):
407407 j_info ["dofs_stiffness" ] = np .zeros (6 )
408408 j_info ["dofs_invweight" ] = np .zeros (6 )
409409 j_info ["dofs_damping" ] = np .zeros (6 )
410+ if isinstance (morph , gs .morphs .Drone ):
411+ mass_tot = sum (l_info ["inertial_mass" ] for l_info in l_infos )
412+ j_info ["dofs_damping" ][3 :] = mass_tot * morph .default_base_ang_damping_scale
410413 j_info ["dofs_armature" ] = np .zeros (6 )
411414 j_info ["dofs_kp" ] = np .zeros ((6 ,), dtype = gs .np_float )
412415 j_info ["dofs_kv" ] = np .zeros ((6 ,), dtype = gs .np_float )
@@ -1113,13 +1116,13 @@ def inverse_kinematics_multilink(
11131116 gs .raise_exception ("Target link not provided." )
11141117
11151118 if len (poss ) == 0 :
1116- poss = [None ] * n_links
1119+ poss = [None for _ in range ( n_links )]
11171120 pos_mask = [False , False , False ]
11181121 elif len (poss ) != n_links :
11191122 gs .raise_exception ("Accepting only `poss` with length equal to `links` or empty list." )
11201123
11211124 if len (quats ) == 0 :
1122- quats = [None ] * n_links
1125+ quats = [None for _ in range ( n_links )]
11231126 rot_mask = [False , False , False ]
11241127 elif len (quats ) != n_links :
11251128 gs .raise_exception ("Accepting only `quats` with length equal to `links` or empty list." )
@@ -1300,8 +1303,19 @@ def _kernel_inverse_kinematics(
13001303 for i_sample in range (max_samples ):
13011304 for _ in range (max_solver_iters ):
13021305 # run FK to update link states using current q
1303- self ._solver ._func_forward_kinematics_entity (self ._idx_in_solver , i_b )
1304-
1306+ self ._solver ._func_forward_kinematics_entity (
1307+ self ._idx_in_solver ,
1308+ i_b ,
1309+ self ._solver .links_state ,
1310+ self ._solver .links_info ,
1311+ self ._solver .joints_state ,
1312+ self ._solver .joints_info ,
1313+ self ._solver .dofs_state ,
1314+ self ._solver .dofs_info ,
1315+ self ._solver .entities_info ,
1316+ self ._solver ._rigid_global_info ,
1317+ self ._solver ._static_rigid_sim_config ,
1318+ )
13051319 # compute error
13061320 solved = True
13071321 for i_ee in range (n_links ):
@@ -1386,7 +1400,19 @@ def _kernel_inverse_kinematics(
13861400
13871401 if not solved :
13881402 # re-compute final error if exited not due to solved
1389- self ._solver ._func_forward_kinematics_entity (self ._idx_in_solver , i_b )
1403+ self ._solver ._func_forward_kinematics_entity (
1404+ self ._idx_in_solver ,
1405+ i_b ,
1406+ self ._solver .links_state ,
1407+ self ._solver .links_info ,
1408+ self ._solver .joints_state ,
1409+ self ._solver .joints_info ,
1410+ self ._solver .dofs_state ,
1411+ self ._solver .dofs_info ,
1412+ self ._solver .entities_info ,
1413+ self ._solver ._rigid_global_info ,
1414+ self ._solver ._static_rigid_sim_config ,
1415+ )
13901416 solved = True
13911417 for i_ee in range (n_links ):
13921418 i_l_ee = links_idx [i_ee ]
@@ -1480,7 +1506,19 @@ def _kernel_inverse_kinematics(
14801506 # restore original qpos and link state
14811507 for i_q in range (self .n_qs ):
14821508 self ._solver .qpos [i_q + self ._q_start , i_b ] = self ._IK_qpos_orig [i_q , i_b ]
1483- self ._solver ._func_forward_kinematics_entity (self ._idx_in_solver , i_b )
1509+ self ._solver ._func_forward_kinematics_entity (
1510+ self ._idx_in_solver ,
1511+ i_b ,
1512+ self ._solver .links_state ,
1513+ self ._solver .links_info ,
1514+ self ._solver .joints_state ,
1515+ self ._solver .joints_info ,
1516+ self ._solver .dofs_state ,
1517+ self ._solver .dofs_info ,
1518+ self ._solver .entities_info ,
1519+ self ._solver ._rigid_global_info ,
1520+ self ._solver ._static_rigid_sim_config ,
1521+ )
14841522
14851523 @gs .assert_built
14861524 def forward_kinematics (self , qpos , qs_idx_local = None , links_idx_local = None , envs_idx = None ):
@@ -1549,7 +1587,19 @@ def _kernel_forward_kinematics(
15491587 # set new qpos
15501588 self ._solver .qpos [qs_idx [i_q_ ], envs_idx [i_b_ ]] = qpos [i_b_ , i_q_ ]
15511589 # run FK
1552- self ._solver ._func_forward_kinematics_entity (self ._idx_in_solver , envs_idx [i_b_ ])
1590+ self ._solver ._func_forward_kinematics_entity (
1591+ self ._idx_in_solver ,
1592+ envs_idx [i_b_ ],
1593+ self ._solver .links_state ,
1594+ self ._solver .links_info ,
1595+ self ._solver .joints_state ,
1596+ self ._solver .joints_info ,
1597+ self ._solver .dofs_state ,
1598+ self ._solver .dofs_info ,
1599+ self ._solver .entities_info ,
1600+ self ._solver ._rigid_global_info ,
1601+ self ._solver ._static_rigid_sim_config ,
1602+ )
15531603
15541604 ti .loop_config (serialize = self ._solver ._para_level < gs .PARA_LEVEL .PARTIAL )
15551605 for i_l_ , i_b_ in ti .ndrange (links_idx .shape [0 ], envs_idx .shape [0 ]):
@@ -1563,7 +1613,19 @@ def _kernel_forward_kinematics(
15631613 # restore original qpos
15641614 self ._solver .qpos [qs_idx [i_q_ ], envs_idx [i_b_ ]] = self ._IK_qpos_orig [qs_idx [i_q_ ], envs_idx [i_b_ ]]
15651615 # run FK
1566- self ._solver ._func_forward_kinematics_entity (self ._idx_in_solver , envs_idx [i_b_ ])
1616+ self ._solver ._func_forward_kinematics_entity (
1617+ self ._idx_in_solver ,
1618+ envs_idx [i_b_ ],
1619+ self ._solver .links_state ,
1620+ self ._solver .links_info ,
1621+ self ._solver .joints_state ,
1622+ self ._solver .joints_info ,
1623+ self ._solver .dofs_state ,
1624+ self ._solver .dofs_info ,
1625+ self ._solver .entities_info ,
1626+ self ._solver ._rigid_global_info ,
1627+ self ._solver ._static_rigid_sim_config ,
1628+ )
15671629
15681630 # ------------------------------------------------------------------------------------
15691631 # --------------------------------- motion planing -----------------------------------
0 commit comments