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 ..
makelistener应该被编译到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>本文靠自己理解,翻译而来,错误之处望不吝指教!!!