diff --git a/VirtualRobot/EndEffector/EndEffectorActor.cpp b/VirtualRobot/EndEffector/EndEffectorActor.cpp index 242d7c372e02db4bb407259cb36733588e2d7cfc..c12c09b6f44910297cc5a25456caa9f5ca1645d5 100644 --- a/VirtualRobot/EndEffector/EndEffectorActor.cpp +++ b/VirtualRobot/EndEffector/EndEffectorActor.cpp @@ -182,6 +182,7 @@ bool EndEffectorActor::isColliding(EndEffectorPtr eef, SceneObjectSetPtr obstacl if( (n->colMode & checkColMode) && ((*o)->getCollisionModel()) && + n->robotNode->getCollisionModel() && colChecker->checkCollision(n->robotNode->getCollisionModel(), (*o)->getCollisionModel())) { @@ -211,7 +212,7 @@ bool EndEffectorActor::isColliding(SceneObjectSetPtr obstacles, CollisionMode c { for(std::vector<ActorDefinition>::iterator n = actors.begin(); n != actors.end(); n++) { - if( (n->colMode & checkColMode) && colChecker->checkCollision(n->robotNode->getCollisionModel(), obstacles)) + if( (n->colMode & checkColMode) && n->robotNode->getCollisionModel() && colChecker->checkCollision(n->robotNode->getCollisionModel(), obstacles)) return true; } return false; @@ -219,12 +220,12 @@ bool EndEffectorActor::isColliding(SceneObjectSetPtr obstacles, CollisionMode c bool EndEffectorActor::isColliding(SceneObjectPtr obstacle, CollisionMode checkColMode) { - if(!obstacle) + if(!obstacle || !obstacle->getCollisionModel()) return false; for(std::vector<ActorDefinition>::iterator n = actors.begin(); n != actors.end(); n++) { - if( (n->colMode & checkColMode) && colChecker->checkCollision(n->robotNode->getCollisionModel(), obstacle->getCollisionModel())) + if( (n->colMode & checkColMode) && n->robotNode->getCollisionModel() && colChecker->checkCollision(n->robotNode->getCollisionModel(), obstacle->getCollisionModel())) return true; } return false; @@ -312,6 +313,7 @@ bool EndEffectorActor::isColliding( EndEffectorPtr eef, SceneObjectPtr obstacle, { if( (n->colMode & checkColMode) && + n->robotNode->getCollisionModel() && colChecker->checkCollision(n->robotNode->getCollisionModel(), obstacle->getCollisionModel())) { col = true; diff --git a/VirtualRobot/Nodes/RobotNode.h b/VirtualRobot/Nodes/RobotNode.h index b002818502f5ca1d7bd95aad690ac57f3972e14f..fb1b332f99358b352911c4b8723d1e46a520b6fc 100644 --- a/VirtualRobot/Nodes/RobotNode.h +++ b/VirtualRobot/Nodes/RobotNode.h @@ -62,6 +62,7 @@ class VIRTUAL_ROBOT_IMPORT_EXPORT RobotNode : public SceneObject { public: friend class Robot; + friend class RobotIO; friend class RobotNodeSet; friend class RobotConfig; friend class RobotFactory; diff --git a/VirtualRobot/XML/RobotIO.cpp b/VirtualRobot/XML/RobotIO.cpp index 16a7409bcc417846ff1c6319863c60e9c74c5df9..2ba17caa2cb7c96f3fb165e39e12a77cccd734e9 100644 --- a/VirtualRobot/XML/RobotIO.cpp +++ b/VirtualRobot/XML/RobotIO.cpp @@ -356,6 +356,15 @@ RobotNodePtr RobotIO::processJointNode(rapidxml::xml_node<char> *jointXMLNode, c robotNode->setMaxVelocity(maxVelocity); robotNode->setMaxAcceleration(maxAcceleration); robotNode->setMaxTorque(maxTorque); + + if (robotNode->isRotationalJoint() || robotNode->isTranslationalJoint()) + { + if (robotNode->jointValue < robotNode->jointLimitLo) + robotNode->jointValue = robotNode->jointLimitLo; + else if (robotNode->jointValue > robotNode->jointLimitHi) + robotNode->jointValue =robotNode->jointLimitHi; + } + return robotNode; } diff --git a/VirtualRobot/examples/RobotViewer/showRobotWindow.cpp b/VirtualRobot/examples/RobotViewer/showRobotWindow.cpp index 26be1ecf8342e49d9ada2c3d8308da63694942e1..19845afb522368e62bd574f3551b518bb944820b 100644 --- a/VirtualRobot/examples/RobotViewer/showRobotWindow.cpp +++ b/VirtualRobot/examples/RobotViewer/showRobotWindow.cpp @@ -480,7 +480,7 @@ void showRobotWindow::closeHand() void showRobotWindow::openHand() { -#if 1 +#if 0 if (robot) { float randMult = (float)(1.0/(double)(RAND_MAX));