/usr/include/rviz/robot/robot.h is in librviz-dev 1.11.10+dfsg-1build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 | /*
* Copyright (c) 2008, Willow Garage, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the Willow Garage, Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef RVIZ_ROBOT_H_
#define RVIZ_ROBOT_H_
#include "link_updater.h"
#include <string>
#include <map>
#include <OgreVector3.h>
#include <OgreQuaternion.h>
#include <OgreAny.h>
namespace Ogre
{
class SceneManager;
class Entity;
class SceneNode;
class Vector3;
class Quaternion;
class Any;
class RibbonTrail;
class SceneNode;
}
namespace rviz
{
class Object;
class Axes;
}
namespace tf
{
class TransformListener;
}
namespace urdf
{
class ModelInterface;
class Link;
class Joint;
}
namespace rviz
{
class Property;
class EnumProperty;
class BoolProperty;
class Robot;
class RobotLink;
class RobotJoint;
class DisplayContext;
/**
* \class Robot
*
* A helper class to draw a representation of a robot, as specified by a URDF. Can display either the visual models of the robot,
* or the collision models.
*/
class Robot : public QObject
{
Q_OBJECT
public:
Robot( Ogre::SceneNode* root_node, DisplayContext* context, const std::string& name, Property* parent_property );
virtual ~Robot();
/**
* \brief Loads meshes/primitives from a robot description. Calls clear() before loading.
*
* @param urdf The robot description to read from
* @param visual Whether or not to load the visual representation
* @param collision Whether or not to load the collision representation
*/
virtual void load( const urdf::ModelInterface &urdf, bool visual = true, bool collision = true );
/**
* \brief Clears all data loaded from a URDF
*/
virtual void clear();
virtual void update(const LinkUpdater& updater);
/**
* \brief Set the robot as a whole to be visible or not
* @param visible Should we be visible?
*/
virtual void setVisible( bool visible );
/**
* \brief Set whether the visual meshes of the robot should be visible
* @param visible Whether the visual meshes of the robot should be visible
*/
void setVisualVisible( bool visible );
/**
* \brief Set whether the collision meshes/primitives of the robot should be visible
* @param visible Whether the collision meshes/primitives should be visible
*/
void setCollisionVisible( bool visible );
/**
* \brief Returns whether anything is visible
*/
bool isVisible();
/**
* \brief Returns whether or not the visual representation is set to be visible
* To be visible this and isVisible() must both be true.
*/
bool isVisualVisible();
/**
* \brief Returns whether or not the collision representation is set to be visible
* To be visible this and isVisible() must both be true.
*/
bool isCollisionVisible();
void setAlpha(float a);
float getAlpha() { return alpha_; }
RobotLink* getRootLink() { return root_link_; }
RobotLink* getLink( const std::string& name );
RobotJoint* getJoint( const std::string& name );
typedef std::map< std::string, RobotLink* > M_NameToLink;
typedef std::map< std::string, RobotJoint* > M_NameToJoint;
const M_NameToLink& getLinks() const { return links_; }
const M_NameToJoint& getJoints() const { return joints_; }
const std::string& getName() { return name_; }
Ogre::SceneNode* getVisualNode() { return root_visual_node_; }
Ogre::SceneNode* getCollisionNode() { return root_collision_node_; }
Ogre::SceneNode* getOtherNode() { return root_other_node_; }
Ogre::SceneManager* getSceneManager() { return scene_manager_; }
DisplayContext* getDisplayContext() { return context_; }
virtual void setPosition( const Ogre::Vector3& position );
virtual void setOrientation( const Ogre::Quaternion& orientation );
virtual void setScale( const Ogre::Vector3& scale );
virtual const Ogre::Vector3& getPosition();
virtual const Ogre::Quaternion& getOrientation();
/** subclass LinkFactory and call setLinkFactory() to use a subclass of RobotLink and/or RobotJoint. */
class LinkFactory
{
public:
virtual RobotLink* createLink( Robot* robot,
const boost::shared_ptr<const urdf::Link>& link,
const std::string& parent_joint_name,
bool visual,
bool collision);
virtual RobotJoint* createJoint( Robot* robot,
const boost::shared_ptr<const urdf::Joint>& joint);
};
/** Call this before load() to subclass the RobotLink or RobotJoint class used in the link property.
* Example:
* class MyLinkFactory : public LinkFactory
* {
* ... // overload createLink() and/or createJoint()
* }
* ...
* robot->setLinkFactory(new MyLinkFactory());
*/
void setLinkFactory(LinkFactory *link_factory);
enum LinkTreeStyle {
STYLE_LINK_LIST, // list of all links sorted by link name
STYLE_DEFAULT = STYLE_LINK_LIST,
STYLE_JOINT_LIST, // list of joints sorted by joint name
STYLE_LINK_TREE, // tree of links
STYLE_JOINT_LINK_TREE // tree of joints with links
};
/** Set the style of the link property. */
void setLinkTreeStyle(LinkTreeStyle style);
/** can be used to change the name, reparent, or add extra properties to the list of links */
Property *getLinkTreeProperty()
{
return link_tree_;
}
// set joint checkboxes and All Links Enabled checkbox based on current link enables.
void calculateJointCheckboxes();
private Q_SLOTS:
void changedLinkTreeStyle();
void changedExpandTree();
void changedHideSubProperties();
void changedEnableAllLinks();
void changedExpandLinkDetails();
void changedExpandJointDetails();
protected:
/** @brief Call RobotLink::updateVisibility() on each link. */
void updateLinkVisibilities();
/** remove all link and joint properties from their parents.
* Needed before deletion and before rearranging link tree. */
void unparentLinkProperties();
// place sub properties under detail (or not)
void useDetailProperty(bool use_detail);
/** used by setLinkTreeStyle() to recursively build link & joint tree. */
void addLinkToLinkTree(LinkTreeStyle style, Property *parent, RobotLink *link);
void addJointToLinkTree(LinkTreeStyle style, Property *parent, RobotJoint *joint);
// set the value of the EnableAllLinks property without affecting child links/joints.
void setEnableAllLinksCheckbox(QVariant val);
/** initialize style_name_map_ and link_tree_style_ options */
void initLinkTreeStyle();
static bool styleShowLink(LinkTreeStyle style);
static bool styleShowJoint(LinkTreeStyle style);
static bool styleIsTree(LinkTreeStyle style);
Ogre::SceneManager* scene_manager_;
M_NameToLink links_; ///< Map of name to link info, stores all loaded links.
M_NameToJoint joints_; ///< Map of name to joint info, stores all loaded joints.
RobotLink *root_link_;
LinkFactory *link_factory_; ///< factory for generating links and joints
Ogre::SceneNode* root_visual_node_; ///< Node all our visual nodes are children of
Ogre::SceneNode* root_collision_node_; ///< Node all our collision nodes are children of
Ogre::SceneNode* root_other_node_;
bool visible_; ///< Should we show anything at all? (affects visual, collision, axes, and trails)
bool visual_visible_; ///< Should we show the visual representation?
bool collision_visible_; ///< Should we show the collision representation?
DisplayContext* context_;
Property* link_tree_;
EnumProperty* link_tree_style_;
BoolProperty* expand_tree_;
BoolProperty* expand_link_details_;
BoolProperty* expand_joint_details_;
BoolProperty* enable_all_links_;
std::map<LinkTreeStyle, std::string> style_name_map_;
bool doing_set_checkbox_; // used only inside setEnableAllLinksCheckbox()
bool robot_loaded_; // true after robot model is loaded.
// true inside changedEnableAllLinks(). Prevents calculateJointCheckboxes()
// from recalculating over and over.
bool inChangedEnableAllLinks;
std::string name_;
float alpha_;
};
} // namespace rviz
#endif /* RVIZ_ROBOT_H_ */
|