summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorerwincoumans <erwincoumans@google.com>2021-11-12 05:28:32 +0000
committerGitHub <noreply@github.com>2021-11-12 05:28:32 +0000
commit88c04a8eaec4d8846a9e21e329a378801aef7753 (patch)
tree67804f6e727dfa5149bc99c947803b74129c4d11
parent98254b51a934371e6c6bab6e42d98784c79b3598 (diff)
parent63446558cd10cf22a0c40fb876ca9ad8c61fa98b (diff)
downloadbullet3-88c04a8eaec4d8846a9e21e329a378801aef7753.tar.gz
Merge pull request #4016 from stephentu/patch-1
Fix bug in server handling of inverse dynamics
-rw-r--r--examples/SharedMemory/PhysicsServerCommandProcessor.cpp17
1 files changed, 7 insertions, 10 deletions
diff --git a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp
index ff6ad05ee..0d826af41 100644
--- a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp
+++ b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp
@@ -11555,17 +11555,17 @@ bool PhysicsServerCommandProcessor::processInverseDynamicsCommand(const struct S
btInverseDynamics::vecx nu(num_dofs + baseDofQdot), qdot(num_dofs + baseDofQdot), q(num_dofs + baseDofQdot), joint_force(num_dofs + baseDofQdot);
//for floating base, inverse dynamics expects euler angle x,y,z and position x,y,z in that order
- //PyBullet expects quaternion, so convert and swap to have a more consistent PyBullet API
+ //PyBullet expects xyz and quaternion in that order, so convert and swap to have a more consistent PyBullet API
if (baseDofQ)
{
btVector3 pos(clientCmd.m_calculateInverseDynamicsArguments.m_jointPositionsQ[0],
clientCmd.m_calculateInverseDynamicsArguments.m_jointPositionsQ[1],
clientCmd.m_calculateInverseDynamicsArguments.m_jointPositionsQ[2]);
- btQuaternion orn(clientCmd.m_calculateInverseDynamicsArguments.m_jointPositionsQ[0],
- clientCmd.m_calculateInverseDynamicsArguments.m_jointPositionsQ[1],
- clientCmd.m_calculateInverseDynamicsArguments.m_jointPositionsQ[2],
- clientCmd.m_calculateInverseDynamicsArguments.m_jointPositionsQ[3]);
+ btQuaternion orn(clientCmd.m_calculateInverseDynamicsArguments.m_jointPositionsQ[3],
+ clientCmd.m_calculateInverseDynamicsArguments.m_jointPositionsQ[4],
+ clientCmd.m_calculateInverseDynamicsArguments.m_jointPositionsQ[5],
+ clientCmd.m_calculateInverseDynamicsArguments.m_jointPositionsQ[6]);
btScalar yawZ, pitchY, rollX;
orn.getEulerZYX(yawZ, pitchY, rollX);
q[0] = rollX;
@@ -11575,12 +11575,9 @@ bool PhysicsServerCommandProcessor::processInverseDynamicsCommand(const struct S
q[4] = pos[1];
q[5] = pos[2];
}
- else
+ for (int i = 0; i < num_dofs; i++)
{
- for (int i = 0; i < num_dofs; i++)
- {
- q[i] = clientCmd.m_calculateInverseDynamicsArguments.m_jointPositionsQ[i];
- }
+ q[i + baseDofQ] = clientCmd.m_calculateInverseDynamicsArguments.m_jointPositionsQ[i + baseDofQ];
}
for (int i = 0; i < num_dofs + baseDofQdot; i++)
{