Gazebo Sim

API Reference

8.7.0
src/systems/detachable_joint/DetachableJoint.hh
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2019 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 
18 #ifndef GZ_SIM_SYSTEMS_DETACHABLEJOINT_HH_
19 #define GZ_SIM_SYSTEMS_DETACHABLEJOINT_HH_
20 
21 #include <gz/msgs/empty.pb.h>
22 
23 #include <memory>
24 #include <string>
25 #include <gz/transport/Node.hh>
26 
27 #include "gz/sim/Model.hh"
28 #include "gz/sim/System.hh"
29 
30 namespace gz
31 {
32 namespace sim
33 {
34 // Inline bracket to help doxygen filtering.
35 inline namespace GZ_SIM_VERSION_NAMESPACE {
36 namespace systems
37 {
72 
74  : public System,
75  public ISystemConfigure,
76  public ISystemPreUpdate
77  {
79  public: DetachableJoint() = default;
80 
82  public: void Configure(const Entity &_entity,
85  EventManager &_eventMgr) final;
86 
88  public: void PreUpdate(
89  const gz::sim::UpdateInfo &_info,
91 
93  private: transport::Node node;
94 
96  private: transport::Node::Publisher outputPub;
97 
99  private: void PublishJointState(bool attached);
100 
102  private: void OnDetachRequest(const msgs::Empty &_msg);
103 
105  private: Model model;
106 
108  private: std::string childModelName;
109 
111  private: std::string childLinkName;
112 
114  private: std::string detachTopic;
115 
117  private: std::string attachTopic;
118 
120  private: std::string outputTopic;
121 
123  private: bool suppressChildWarning{false};
124 
126  private: Entity parentLinkEntity{kNullEntity};
127 
129  private: Entity childLinkEntity{kNullEntity};
130 
132  private: Entity detachableJointEntity{kNullEntity};
133 
135  private: std::atomic<bool> detachRequested{false};
136 
138  private: std::atomic<bool> attachRequested{true};
139 
141  private: std::atomic<bool> isAttached{false};
142 
144  private: bool validConfig{false};
145 
146  };
147  }
148 }
149 }
150 }
151 
152 #endif