/* * Copyright (C) 2015 Open Source Robotics Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ #ifndef _GAZEBO_TRANSPORTER_PLUGIN_HH_ #define _GAZEBO_TRANSPORTER_PLUGIN_HH_ #include #include namespace gazebo { // Forward declare private data class class TransporterPluginPrivate; /// \brief A plugin that allows models to transport (teleport) to /// a new location. A transporter plugin uses multiple named , where /// each defines an outgoing region, an incoming pose, and /// a destination pad. /// /// When a model enters a pad's outgoing region it is moved to the /// destination pad's incoming pose. This means the transporter plugin is /// only useful if at least two pads are defined. /// /// The following is example usage in SDF: /// /** \verbatim ~/transporter pad2 auto -.5 -.5 0 .5 .5 1 2 3.5 0 0 0 0 pad1 manual -.5 3.0 0 .5 4.0 1 2 0 0 0 0 0 \endverbatim */ class GAZEBO_VISIBLE TransporterPlugin : public WorldPlugin { /// \brief Constructor. public: TransporterPlugin(); /// \brief Destructor. public: virtual ~TransporterPlugin(); // Documentation inherited public: virtual void Load(physics::WorldPtr _world, sdf::ElementPtr _sdf); /// \brief Update the plugin. This is updated every iteration of /// simulation. private: void Update(); /// \brief Callback that receives activation messages. /// \param[in] _msg String message that indicates what transporter pad /// was activated. private: void OnActivation(ConstGzStringPtr &_msg); /// \brief Private data pointer. private: TransporterPluginPrivate *dataPtr; }; } #endif