四 Gazebo学习总结之Gazebo的某些设置属性和主题订阅

1.对于Gazebo的图形用户界面(GUI)的使用与说明,由于比较简单,请参考:

http://gazebosim.org/user_guide/started_gui.html

2.Gazebo的随机数:Gazebo制造了一个随机数生成器的使用,默认情况下,随机种子被设置为正在运行的Gazebo进程的处理识别符(PID),随机数种子能手动设置,该特征的好处是获取了一串确定性的随机数序列,有利于测试重复性。Gazebo能通过使用--seed的命令行被随机数种子初始化,语句:

gazebo --seed <integer>
Gazebo订阅一个要求是msgs::WorldControl类型消息的~/world_control主题,那么,world控制消息可能包含一个随机数种子。

3.主题订阅

Gazebo的交流是在TCP/IP接口上,允许独立的程序与Gazebo接口通讯。Boost ASIO被Gazebo用于管理交流层,Google Protobufs被用于消息的传递和库的序列化,通过publisher将消息发送到一个通道上,该通道称为主题(Topic的解释请参见ROS官网教程),在主题的另一边,则是subscribers,消息被订阅、接收,总之,为了发布和接收消息,必须使用到主题。

通过TCP/CP接口与Gazebo通信的最容易方法是链接Gazebo库,使用其提供的函数。

使用gztopic list命令可发现一个正在运行中的所有主题。

举例:

该例子订阅了一个在~/world_stats主题上的WorldStatistics消息,并输出到控制台。该消息被Gazebo以1Hz的频率输出,包含了仿真时间和中断状态信息,这个例子被包含在examples/stand_alone/listener/的gazebo源分布中,假定能链接到Gazebo。

从以上连接中下载listener.cc和CMakeLists.txt,将两文件放入名为listener的文件夹中,编译例子:

cd ~/listener
    mkdir build
    cd build
    cmake ..
    make
listener应该被编译到build目录下,当在Gazebo下运行listener时,会输出如下内容:

# Starting in ~/listener/build/
    ./listener
    Msg Waiting for master
    Msg Connected to gazebo master @ http://127.0.0.1:11345
    Msg Publicized address: 192.168.1.67
    sim_time {
      sec: 1104
      nsec: 855000000
    }
    pause_time {
      sec: 0
      nsec: 0
    }
    real_time {
      sec: 1108
      nsec: 263362269
    }
    paused: false
    iterations: 1104855
    sim_time {
      sec: 1105
      nsec: 55000000
    }
    pause_time {
      sec: 0
      nsec: 0
    }
    real_time {
      sec: 1108
      nsec: 464165998
    }
    paused: false
    iterations: 1105055
代码解释:

/*载入Gazebo,运行传输系统*/

gazebo::load(_argc, _argv);
    gazebo::run();

/*创建节点,提供的功能是创建publisher和subscribers,并初始化节点*/

gazebo::transport::NodePtr node(new gazebo::transport::Node());
    node->Init();
/*在world_stats主题上创建一个订阅者,Gazebo发布一系列的数据在这个主题上*/

 gazebo::transport::SubscriberPtr sub = node->Subscribe("~/world_stats", cb);
/*为了反馈消息给控制器,需要创建一个回馈函数,程序中定义为cb*/

void cb(ConstWorldStatisticsPtr &_msg)
    {
      std::cout << _msg->DebugString();
    }
/*最后,必须有等待循环函数或做一些其他的进程,等待消息的到来*/

while (true)
      gazebo::common::Time::MSleep(10);
/*程序运行完毕后,要结束传输系统*/

gazebo::transport::fini();
4.摩擦:在Gazebo的每一个物理引擎(例如ODE,Bullet,Simbody,DART)有不同的摩擦模型,请参考SDF parameters文档,关于摩擦参数的完整清单。两个对象碰撞,例如一个球在地面滚动,一对摩擦力就产生了,在ODE中,由两部分组成,称为mu和mu2。mu是第一摩擦方向的库仑摩擦系数;mu2是第二摩擦方向的库仑系数(相对于第一摩擦系数)。

Gazebo将从碰撞对象中选择最小的mu和mu2,mu和mu2的有效范围是在0到1之间,0表示摩擦很小,1表示摩擦无线大。

部分程序如下:

<surface>
        <friction>
          <ode>
            <mu>0.01</mu>
            <mu2>0.01</mu2>
          </ode>
        </friction>
      </surface>


本文靠自己理解,翻译而来,错误之处望不吝指教!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值