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 <memory>
23 #include <vector>
24 
25 #include <ignition/math/Color.hh>
26 
27 #include "gazebo/physics/Model.hh"
28 #include "gazebo/common/Time.hh"
30 #include "gazebo/util/system.hh"
31 
32 namespace gazebo
33 {
34  namespace common
35  {
36  class Mesh;
37  class Skeleton;
38  }
39 
40  namespace physics
41  {
42  class ActorPrivate;
43 
46  class GZ_PHYSICS_VISIBLE TrajectoryInfo
47  {
49  public: TrajectoryInfo();
50 
52  public: unsigned int id;
53 
56  public: std::string type;
57 
59  public: double duration;
60 
62  public: double startTime;
63 
65  public: double endTime;
66 
68  public: bool translated;
69  };
70 
73 
77  class GZ_PHYSICS_VISIBLE Actor : public Model
78  {
80  public: typedef std::map<std::string, common::SkeletonAnimation *>
82 
85  public: explicit Actor(BasePtr _parent);
86 
88  public: virtual ~Actor();
89 
92  public: void Load(sdf::ElementPtr _sdf);
93 
95  public: virtual void Init();
96 
98  public: virtual void Play();
99 
101  public: virtual void Stop();
102 
105  public: virtual bool IsActive() const;
106 
108  public: void Update();
109 
111  public: virtual void Fini();
112 
115  public: virtual void UpdateParameters(sdf::ElementPtr _sdf);
116 
119  public: virtual const sdf::ElementPtr GetSDF();
120 
122  public: void Reset();
123  using Model::Reset;
124 
129  public: void SetScriptTime(const double _time);
130 
135  public: double ScriptTime() const;
136 
140  public: const SkeletonAnimation_M &SkeletonAnimations() const;
141 
148  public: void SetCustomTrajectory(TrajectoryInfoPtr &_trajInfo);
149 
154  public: TrajectoryInfoPtr CustomTrajectory() const;
155 
158  public: void ResetCustomTrajectory();
159 
164  public: virtual bool GetSelfCollide() const;
165 
171  public: virtual void SetSelfCollide(bool _selfCollide);
172 
177  public: virtual bool WindMode() const;
178 
184  public: virtual void SetWindMode(const bool _enabled);
185 
191  private: void AddSphereInertia(const sdf::ElementPtr &_linkSdf,
192  const ignition::math::Pose3d &_pose,
193  const double _mass, const double _radius);
194 
201  private: void AddSphereCollision(const sdf::ElementPtr &_linkSdf,
202  const std::string &_name,
203  const ignition::math::Pose3d &_pose,
204  const double _radius);
205 
212  private: void AddBoxCollision(const sdf::ElementPtr &_linkSdf,
213  const std::string &_name,
214  const ignition::math::Pose3d &_pose,
215  const ignition::math::Vector3d &_size);
216 
224  private: void AddSphereVisual(const sdf::ElementPtr &_linkSdf,
225  const std::string &_name,
226  const ignition::math::Pose3d &_pose, const double _radius,
227  const std::string &_material,
228  const ignition::math::Color &_ambient);
229 
237  private: void AddBoxVisual(const sdf::ElementPtr &_linkSdf,
238  const std::string &_name,
239  const ignition::math::Pose3d &_pose,
240  const ignition::math::Vector3d &_size,
241  const std::string &_material,
242  const ignition::math::Color &_ambient);
243 
248  private: void AddActorVisual(const sdf::ElementPtr &_linkSdf,
249  const std::string &_name,
250  const ignition::math::Pose3d &_pose);
251 
256  private: bool LoadSkin(sdf::ElementPtr _sdf);
257 
263  private: void LoadAnimation(sdf::ElementPtr _sdf);
264 
267  private: void LoadScript(sdf::ElementPtr _sdf);
268 
274  private: void SetPose(
275  std::map<std::string, ignition::math::Matrix4d> _frame,
276  std::map<std::string, std::string> _skelMap,
277  const double _time);
278 
280  protected: const common::Mesh *mesh = nullptr;
281 
283  protected: common::Skeleton *skeleton = nullptr;
284 
286  protected: std::string skinFile;
287 
289  protected: double skinScale;
290 
293  protected: double startDelay;
294 
296  protected: double scriptLength;
297 
299  protected: bool loop;
300 
302  protected: bool active;
303 
306  protected: bool autoStart;
307 
309  protected: LinkPtr mainLink;
310 
313 
316 
320  protected: std::map<unsigned int, common::PoseAnimation *> trajectories;
321 
326  protected: std::vector<TrajectoryInfo> trajInfo;
327 
333 
342  protected: std::map<std::string, std::map<std::string, std::string> >
344 
347  // direction.
350  protected: std::map<std::string, bool> interpolateX;
351 
353  protected: ignition::math::Vector3d lastPos;
354 
356  protected: double pathLength;
357 
359  protected: unsigned int lastTraj;
360 
362  protected: std::string visualName;
363 
365  protected: uint32_t visualId;
366 
369 
372  private: double scriptTime;
373 
376  private: TrajectoryInfoPtr customTrajectoryInfo;
377 
379  private: std::unique_ptr<ActorPrivate> dataPtr;
380  };
382  }
383 }
384 #endif
385 
transport::PublisherPtr bonePosePub
Publisher to send bone info.
Definition: Actor.hh:368
A 3D mesh.
Definition: Mesh.hh:42
boost::shared_ptr< Link > LinkPtr
Definition: PhysicsTypes.hh:109
A skeleton.
Definition: Skeleton.hh:52
Forward declarations for the common classes.
Definition: Animation.hh:26
double startTime
Start time of this keyframe within the trajectory, in seconds.
Definition: Actor.hh:62
ignition::math::Vector3d lastPos
Last position of the actor.
Definition: Actor.hh:353
bool loop
True if the animation should loop.
Definition: Actor.hh:299
std::vector< TrajectoryInfo > trajInfo
A vector of trajectory information, which contains information such as their durations, uniquely identifiable by their IDs.
Definition: Actor.hh:326
Actor class enables GPU based mesh model / skeleton scriptable animation.
Definition: Actor.hh:77
boost::shared_ptr< Publisher > PublisherPtr
Definition: TransportTypes.hh:49
unsigned int id
ID of the trajectory.
Definition: Actor.hh:52
std::shared_ptr< TrajectoryInfo > TrajectoryInfoPtr
Definition: PhysicsTypes.hh:101
double scriptLength
Total time length of the script, in seconds.
Definition: Actor.hh:296
std::string skinFile
Filename for the skin.
Definition: Actor.hh:286
std::map< unsigned int, common::PoseAnimation * > trajectories
Map of all the trajectories (pose animations) and their indices.
Definition: Actor.hh:320
A model is a collection of links, joints, and plugins.
Definition: Model.hh:59
SkeletonAnimation_M skelAnimation
Map of skeleton animations, indexed by their names.
Definition: Actor.hh:332
uint32_t visualId
ID for the visual representing the skin.
Definition: Actor.hh:365
Information about a trajectory for an Actor.
Definition: Actor.hh:46
double endTime
End time of this keyframe within the trajectory, in seconds.
Definition: Actor.hh:65
double duration
Duration of this keyframe in seconds.
Definition: Actor.hh:59
std::string visualName
Name of the visual representing the skin.
Definition: Actor.hh:362
bool translated
True if the trajectory is translated.
Definition: Actor.hh:68
std::map< std::string, std::map< std::string, std::string > > skelNodesMap
Skeleton to node map:
Definition: Actor.hh:343
bool autoStart
True if the actor should start running automatically, otherwise it will only start once Play is calle...
Definition: Actor.hh:306
std::map< std::string, common::SkeletonAnimation * > SkeletonAnimation_M
Typedef the skeleton animation map, indexed by their names.
Definition: Actor.hh:81
LinkPtr mainLink
Pointer to the actor&#39;s canonical link.
Definition: Actor.hh:309
GAZEBO_VISIBLE void Init(google::protobuf::Message &_message, const std::string &_id="")
Initialize a message.
double skinScale
Scaling factor to apply to the skin.
Definition: Actor.hh:289
double pathLength
Length of the actor&#39;s path.
Definition: Actor.hh:356
bool active
True if the actor is being updated.
Definition: Actor.hh:302
unsigned int lastTraj
Id of the last trajectory.
Definition: Actor.hh:359
common::Time prevFrameTime
Time of the previous frame.
Definition: Actor.hh:312
common::Time playStartTime
Time when the animation was started.
Definition: Actor.hh:315
double startDelay
Time to wait before starting the script.
Definition: Actor.hh:293
std::string type
Type of trajectory.
Definition: Actor.hh:56
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:350
boost::shared_ptr< Base > BasePtr
Definition: PhysicsTypes.hh:77
A Time class, can be used to hold wall- or sim-time.
Definition: Time.hh:44