51 const auto obstacles = ocHelper.
obstacles();
53 const float boxSize = occupancyGrid.
resolution;
54 const float resolution = occupancyGrid.
resolution;
56 VirtualRobot::SceneObjectSetPtr sceneObjects(
new VirtualRobot::SceneObjectSet);
59 <<
"Only occupancy grid in global frame supported.";
61 VirtualRobot::CoinVisualizationFactory factory;
63 const Eigen::Isometry3f& world_T_map = occupancyGrid.
pose;
65 for (
int x = 0;
x < obstacles.rows();
x++)
67 for (
int y = 0; y < obstacles.cols(); y++)
71 const Eigen::Vector3f pos{
72 static_cast<float>(
x * resolution),
static_cast<float>(y * resolution), 0};
74 Eigen::Isometry3f map_T_obj = Eigen::Isometry3f::Identity();
75 map_T_obj.translation() = pos;
77 Eigen::Isometry3f world_T_obj = world_T_map * map_T_obj;
79 auto cube = factory.createBox(boxSize, boxSize, boxSize);
81 VirtualRobot::CollisionModelPtr collisionModel(
82 new VirtualRobot::CollisionModel(cube));
84 VirtualRobot::SceneObjectPtr sceneObject(
new VirtualRobot::SceneObject(
85 "box_" + std::to_string(sceneObjects->getSize()), cube, collisionModel));
86 sceneObject->setGlobalPose(world_T_obj.matrix());
88 sceneObjects->addSceneObject(sceneObject);
99 const auto goalPosition = Eigen::Affine3f{Eigen::Translation3f{
x}};
100 const auto lookPosition = Eigen::Affine3f{Eigen::Translation3f{y}};
101 const Eigen::Vector3f direction = lookPosition.translation() - goalPosition.translation();
102 const auto dot = direction.x() * 0 + direction.y() * 1;
103 const auto det = direction.x() * 1 - direction.y() * 0;
104 const auto angle = -atan2(det,
dot);
105 const Eigen::Affine3f rot{Eigen::AngleAxisf{
angle, Eigen::Vector3f::UnitZ()}};
106 const auto pose = (goalPosition * rot).matrix();