fix very rare threading issue, let main thread compute the UID for user debug items

add collision model to cartpole.urdf
This commit is contained in:
erwincoumans
2017-10-09 22:40:53 -07:00
parent 6b4f69f733
commit e5d4c73c40
2 changed files with 16 additions and 5 deletions

View File

@@ -62,6 +62,12 @@
<mass value="10"/> <mass value="10"/>
<inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/> <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/>
</inertial> </inertial>
<collision>
<geometry>
<box size="0.05 0.05 1.0"/>
</geometry>
<origin rpy="0 0 0" xyz="0 0 0.5"/>
</collision>
</link> </link>
<joint name="cart_to_pole" type="continuous"> <joint name="cart_to_pole" type="continuous">

View File

@@ -1131,7 +1131,7 @@ public:
btAlignedObjectArray<UserDebugText> m_userDebugText; btAlignedObjectArray<UserDebugText> m_userDebugText;
UserDebugText m_tmpText; UserDebugText m_tmpText;
int m_resultUserDebugTextUid;
virtual int addUserDebugText3D( const char* txt, const double positionXYZ[3], const double orientation[4], const double textColorRGB[3], double size, double lifeTime, int trackingVisualShapeIndex, int optionFlags) virtual int addUserDebugText3D( const char* txt, const double positionXYZ[3], const double orientation[4], const double textColorRGB[3], double size, double lifeTime, int trackingVisualShapeIndex, int optionFlags)
{ {
@@ -1165,7 +1165,7 @@ public:
m_cs->setSharedParam(1, eGUIUserDebugAddText); m_cs->setSharedParam(1, eGUIUserDebugAddText);
workerThreadWait(); workerThreadWait();
return m_userDebugText[m_userDebugText.size()-1].m_itemUniqueId; return m_resultUserDebugTextUid;
} }
btAlignedObjectArray<UserDebugParameter*> m_userDebugParams; btAlignedObjectArray<UserDebugParameter*> m_userDebugParams;
@@ -1183,6 +1183,7 @@ public:
} }
return 0; return 0;
} }
int m_userDebugParamUid;
virtual int addUserDebugParameter(const char* txt, double rangeMin, double rangeMax, double startValue) virtual int addUserDebugParameter(const char* txt, double rangeMin, double rangeMax, double startValue)
{ {
@@ -1196,13 +1197,13 @@ public:
m_cs->setSharedParam(1, eGUIUserDebugAddParameter); m_cs->setSharedParam(1, eGUIUserDebugAddParameter);
workerThreadWait(); workerThreadWait();
return (*m_userDebugParams[m_userDebugParams.size()-1]).m_itemUniqueId; return m_userDebugParamUid;
} }
btAlignedObjectArray<UserDebugDrawLine> m_userDebugLines; btAlignedObjectArray<UserDebugDrawLine> m_userDebugLines;
UserDebugDrawLine m_tmpLine; UserDebugDrawLine m_tmpLine;
int m_resultDebugLineUid;
virtual int addUserDebugLine(const double debugLineFromXYZ[3], const double debugLineToXYZ[3], const double debugLineColorRGB[3], double lineWidth, double lifeTime , int trackingVisualShapeIndex) virtual int addUserDebugLine(const double debugLineFromXYZ[3], const double debugLineToXYZ[3], const double debugLineColorRGB[3], double lineWidth, double lifeTime , int trackingVisualShapeIndex)
{ {
m_tmpLine.m_lifeTime = lifeTime; m_tmpLine.m_lifeTime = lifeTime;
@@ -1223,7 +1224,7 @@ public:
m_cs->lock(); m_cs->lock();
m_cs->setSharedParam(1, eGUIUserDebugAddLine); m_cs->setSharedParam(1, eGUIUserDebugAddLine);
workerThreadWait(); workerThreadWait();
return m_userDebugLines[m_userDebugLines.size()-1].m_itemUniqueId; return m_resultDebugLineUid;
} }
int m_removeDebugItemUid; int m_removeDebugItemUid;
@@ -2171,6 +2172,7 @@ void PhysicsServerExample::updateGraphics()
B3_PROFILE("eGUIUserDebugAddText"); B3_PROFILE("eGUIUserDebugAddText");
m_multiThreadedHelper->m_userDebugText.push_back(m_multiThreadedHelper->m_tmpText); m_multiThreadedHelper->m_userDebugText.push_back(m_multiThreadedHelper->m_tmpText);
m_multiThreadedHelper->m_resultUserDebugTextUid = m_multiThreadedHelper->m_userDebugText[m_multiThreadedHelper->m_userDebugText.size()-1].m_itemUniqueId;
m_multiThreadedHelper->mainThreadRelease(); m_multiThreadedHelper->mainThreadRelease();
break; break;
} }
@@ -2190,6 +2192,8 @@ void PhysicsServerExample::updateGraphics()
m_multiThreadedHelper->m_childGuiHelper->getParameterInterface()->registerSliderFloatParameter(slider); m_multiThreadedHelper->m_childGuiHelper->getParameterInterface()->registerSliderFloatParameter(slider);
} }
m_multiThreadedHelper->m_userDebugParamUid = (*m_multiThreadedHelper->m_userDebugParams[m_multiThreadedHelper->m_userDebugParams.size()-1]).m_itemUniqueId;
//also add actual menu //also add actual menu
m_multiThreadedHelper->mainThreadRelease(); m_multiThreadedHelper->mainThreadRelease();
break; break;
@@ -2199,6 +2203,7 @@ void PhysicsServerExample::updateGraphics()
B3_PROFILE("eGUIUserDebugAddLine"); B3_PROFILE("eGUIUserDebugAddLine");
m_multiThreadedHelper->m_userDebugLines.push_back(m_multiThreadedHelper->m_tmpLine); m_multiThreadedHelper->m_userDebugLines.push_back(m_multiThreadedHelper->m_tmpLine);
m_multiThreadedHelper->m_resultDebugLineUid = m_multiThreadedHelper->m_userDebugLines[m_multiThreadedHelper->m_userDebugLines.size()-1].m_itemUniqueId;
m_multiThreadedHelper->mainThreadRelease(); m_multiThreadedHelper->mainThreadRelease();
break; break;
} }