Actor.hh
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2012 Open Source Robotics Foundation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16 */
17 #ifndef GAZEBO_PHYSICS_ACTOR_HH_
18 #define GAZEBO_PHYSICS_ACTOR_HH_
19 
20 #include <string>
21 #include <map>
22 #include <vector>
23 
24 #include <ignition/math/Color.hh>
25 
26 #include "gazebo/physics/Model.hh"
27 #include "gazebo/common/Time.hh"
29 #include "gazebo/util/system.hh"
30 
31 namespace gazebo
32 {
33  namespace common
34  {
35  class Mesh;
36  class Skeleton;
37  }
38 
39  namespace physics
40  {
43  class GZ_PHYSICS_VISIBLE TrajectoryInfo
44  {
46  public: TrajectoryInfo();
47 
49  public: unsigned int id;
50 
53  public: std::string type;
54 
56  public: double duration;
57 
59  public: double startTime;
60 
62  public: double endTime;
63 
65  public: bool translated;
66  };
67 
70 
74  class GZ_PHYSICS_VISIBLE Actor : public Model
75  {
77  public: typedef std::map<std::string, common::SkeletonAnimation *>
79 
82  public: explicit Actor(BasePtr _parent);
83 
85  public: virtual ~Actor();
86 
89  public: void Load(sdf::ElementPtr _sdf);
90 
92  public: virtual void Init();
93 
95  public: virtual void Play();
96 
98  public: virtual void Stop();
99 
102  public: virtual bool IsActive() const;
103 
105  public: void Update();
106 
108  public: virtual void Fini();
109 
112  public: virtual void UpdateParameters(sdf::ElementPtr _sdf);
113 
116  public: virtual const sdf::ElementPtr GetSDF();
117 
119  public: void Reset();
120  using Model::Reset;
121 
126  public: void SetScriptTime(const double _time);
127 
132  public: double ScriptTime() const;
133 
137  public: const SkeletonAnimation_M &SkeletonAnimations() const;
138 
145  public: void SetCustomTrajectory(TrajectoryInfoPtr &_trajInfo);
146 
151  public: TrajectoryInfoPtr CustomTrajectory() const;
152 
155  public: void ResetCustomTrajectory();
156 
161  public: virtual bool GetSelfCollide() const;
162 
168  public: virtual void SetSelfCollide(bool _selfCollide);
169 
174  public: virtual bool WindMode() const;
175 
181  public: virtual void SetWindMode(const bool _enabled);
182 
188  private: void AddSphereInertia(const sdf::ElementPtr &_linkSdf,
189  const ignition::math::Pose3d &_pose,
190  const double _mass, const double _radius);
191 
198  private: void AddSphereCollision(const sdf::ElementPtr &_linkSdf,
199  const std::string &_name,
200  const ignition::math::Pose3d &_pose,
201  const double _radius);
202 
209  private: void AddBoxCollision(const sdf::ElementPtr &_linkSdf,
210  const std::string &_name,
211  const ignition::math::Pose3d &_pose,
212  const ignition::math::Vector3d &_size);
213 
221  private: void AddSphereVisual(const sdf::ElementPtr &_linkSdf,
222  const std::string &_name,
223  const ignition::math::Pose3d &_pose, const double _radius,
224  const std::string &_material,
225  const ignition::math::Color &_ambient);
226 
234  private: void AddBoxVisual(const sdf::ElementPtr &_linkSdf,
235  const std::string &_name,
236  const ignition::math::Pose3d &_pose,
237  const ignition::math::Vector3d &_size,
238  const std::string &_material,
239  const ignition::math::Color &_ambient);
240 
245  private: void AddActorVisual(const sdf::ElementPtr &_linkSdf,
246  const std::string &_name,
247  const ignition::math::Pose3d &_pose);
248 
253  private: bool LoadSkin(sdf::ElementPtr _sdf);
254 
260  private: void LoadAnimation(sdf::ElementPtr _sdf);
261 
264  private: void LoadScript(sdf::ElementPtr _sdf);
265 
271  private: void SetPose(
272  std::map<std::string, ignition::math::Matrix4d> _frame,
273  std::map<std::string, std::string> _skelMap,
274  const double _time);
275 
277  protected: const common::Mesh *mesh = nullptr;
278 
280  protected: common::Skeleton *skeleton = nullptr;
281 
283  protected: std::string skinFile;
284 
286  protected: double skinScale;
287 
290  protected: double startDelay;
291 
293  protected: double scriptLength;
294 
296  protected: bool loop;
297 
299  protected: bool active;
300 
303  protected: bool autoStart;
304 
306  protected: LinkPtr mainLink;
307 
310 
313 
317  protected: std::map<unsigned int, common::PoseAnimation *> trajectories;
318 
323  protected: std::vector<TrajectoryInfo> trajInfo;
324 
330 
339  protected: std::map<std::string, std::map<std::string, std::string> >
341 
344  // direction.
347  protected: std::map<std::string, bool> interpolateX;
348 
350  protected: ignition::math::Vector3d lastPos;
351 
353  protected: double pathLength;
354 
356  protected: unsigned int lastTraj;
357 
359  protected: std::string visualName;
360 
362  protected: uint32_t visualId;
363 
366 
369  private: double scriptTime;
370 
373  private: TrajectoryInfoPtr customTrajectoryInfo;
374  };
376  }
377 }
378 #endif
379 
unsigned int lastTraj
Id of the last trajectory.
Definition: Actor.hh:356
double startTime
Start time of this keyframe within the trajectory, in seconds.
Definition: Actor.hh:59
std::vector< TrajectoryInfo > trajInfo
A vector of trajectory information, which contains information such as their durations,...
Definition: Actor.hh:323
virtual void SetWindMode(const bool _enabled)
Override set wind mode method to make it impossible to set it to true for actors.
virtual void Fini()
Finalize the actor.
Forward declarations for the common classes.
Definition: Animation.hh:26
double scriptLength
Total time length of the script, in seconds.
Definition: Actor.hh:293
A Time class, can be used to hold wall- or sim-time. stored as sec and nano-sec.
Definition: Time.hh:44
std::map< std::string, std::map< std::string, std::string > > skelNodesMap
Skeleton to node map:
Definition: Actor.hh:340
void SetScriptTime(const double _time)
Set the current script time.
common::Skeleton * skeleton
The actor's skeleton.
Definition: Actor.hh:280
ignition::math::Vector3d lastPos
Last position of the actor.
Definition: Actor.hh:350
std::string visualName
Name of the visual representing the skin.
Definition: Actor.hh:359
boost::shared_ptr< Publisher > PublisherPtr
Definition: TransportTypes.hh:49
const common::Mesh * mesh
Pointer to the actor's mesh.
Definition: Actor.hh:277
virtual bool GetSelfCollide() const
Get whether the links in the actor can collide with each other.
TrajectoryInfoPtr CustomTrajectory() const
Get the custom trajectory.
const SkeletonAnimation_M & SkeletonAnimations() const
Returns a dictionary of all the skeleton animations associated with the actor.
virtual void Stop()
Stop playing the script.
uint32_t visualId
ID for the visual representing the skin.
Definition: Actor.hh:362
unsigned int id
ID of the trajectory.
Definition: Actor.hh:49
void SetCustomTrajectory(TrajectoryInfoPtr &_trajInfo)
Set a custom trajectory for the actor, using one of the existing animations.
virtual void Play()
Start playing the script.
double endTime
End time of this keyframe within the trajectory, in seconds.
Definition: Actor.hh:62
double pathLength
Length of the actor's path.
Definition: Actor.hh:353
double duration
Duration of this keyframe in seconds.
Definition: Actor.hh:56
SkeletonAnimation_M skelAnimation
Map of skeleton animations, indexed by their names.
Definition: Actor.hh:329
TrajectoryInfo()
Constructor.
A skeleton.
Definition: Skeleton.hh:52
double ScriptTime() const
Get the current script time.
virtual ~Actor()
Destructor.
void Update()
Update the actor.
LinkPtr mainLink
Pointer to the actor's canonical link.
Definition: Actor.hh:306
void Reset()
Reset the model.
std::string skinFile
Filename for the skin.
Definition: Actor.hh:283
void Load(sdf::ElementPtr _sdf)
Load the actor.
double skinScale
Scaling factor to apply to the skin.
Definition: Actor.hh:286
virtual void SetSelfCollide(bool _selfCollide)
Override set self collide method to make it impossible to set it to true for actors.
bool autoStart
True if the actor should start running automatically, otherwise it will only start once Play is calle...
Definition: Actor.hh:303
std::shared_ptr< TrajectoryInfo > TrajectoryInfoPtr
Definition: PhysicsTypes.hh:101
A model is a collection of links, joints, and plugins.
Definition: Model.hh:59
virtual void UpdateParameters(sdf::ElementPtr _sdf)
Update the parameters using new sdf values.
boost::shared_ptr< Base > BasePtr
Definition: PhysicsTypes.hh:77
Information about a trajectory for an Actor.
Definition: Actor.hh:43
common::Time prevFrameTime
Time of the previous frame.
Definition: Actor.hh:309
virtual bool IsActive() const
Returns true when actor is playing animation.
virtual bool WindMode() const
Get whether the links in the actor are affected by wind.
common::Time playStartTime
Time when the animation was started.
Definition: Actor.hh:312
GAZEBO_VISIBLE void Init(google::protobuf::Message &_message, const std::string &_id="")
Initialize a message.
boost::shared_ptr< Link > LinkPtr
Definition: PhysicsTypes.hh:109
double startDelay
Time to wait before starting the script.
Definition: Actor.hh:290
Actor(BasePtr _parent)
Constructor.
virtual const sdf::ElementPtr GetSDF()
Get the SDF values for the actor.
A 3D mesh.
Definition: Mesh.hh:42
bool translated
True if the trajectory is translated.
Definition: Actor.hh:65
void Reset()
Reset the actor.
std::string type
Type of trajectory.
Definition: Actor.hh:53
std::map< std::string, common::SkeletonAnimation * > SkeletonAnimation_M
Typedef the skeleton animation map, indexed by their names.
Definition: Actor.hh:78
bool active
True if the actor is being updated.
Definition: Actor.hh:299
void ResetCustomTrajectory()
Reset custom trajectory of the actor.
bool loop
True if the animation should loop.
Definition: Actor.hh:296
Actor class enables GPU based mesh model / skeleton scriptable animation.
Definition: Actor.hh:74
std::map< unsigned int, common::PoseAnimation * > trajectories
Map of all the trajectories (pose animations) and their indices.
Definition: Actor.hh:317
std::map< std::string, bool > interpolateX
Map of animation types (the same name as in skelAnimation and skelNodesMap) and whether they should b...
Definition: Actor.hh:347
transport::PublisherPtr bonePosePub
Publisher to send bone info.
Definition: Actor.hh:365
virtual void Init()
Initialize the actor.