Gazebo-插件-程序化世界控制

  1. 1. 世界
  2. 2. 代码
  3. 3. 运行

https://classic.gazebosim.org/tutorials?tut=plugins_world_properties&cat=write_plugin
以编程的方式修改重力。

1. 世界

创建world_edit.world,详情略。

2. 代码

#include <sdf/sdf.hh>
#include <ignition/math/Pose3.hh>
#include "gazebo/gazebo.hh"
#include "gazebo/common/Plugin.hh"
#include "gazebo/msgs/msgs.hh"
#include "gazebo/physics/physics.hh"
#include "gazebo/transport/transport.hh"

/// This example creates a WorldPlugin, initializes the Transport system by
/// creating a new Node, and publishes messages to alter gravity.

namespace gazebo
{
    class WorldEdit : public WorldPlugin
    {
        public: void Load(physics::WorldPtr _parent, sdf::ElementPtr _sdf)
        {
            // Create a new transport node
            transport::NodePtr node(new transport::Node());

            // Initialize the node with the world name
            node->Init(_parent->Name());

            // Create a publisher on the ~/physics topic
            transport::PublisherPtr physicsPub = node->Advertise<msgs::Physics>("~/physics");

            msgs::Physics physicsMsg;
            physicsMsg.set_type(msgs::Physics::ODE);

            // Set the step time
            physicsMsg.set_max_step_size(0.01);

            // Change gravity
            msgs::Set(physicsMsg.mutable_gravity(), ignition::math::Vector3d(0.01, 0, 0.1));
            physicsPub->Publish(physicsMsg);
        }
    };

    // Register this plugin with the simulator
    GZ_REGISTER_WORLD_PLUGIN(WorldEdit)
}

3. 运行

编译后运行world_edit.world,放入场景中的盒子会飘起来。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 cdd@ahucd.cn

×

喜欢就点赞,疼爱就打赏

B站 cdd的庇护之地 github itch