1.对于Gazebo的图形用户界面(GUI)的使用与说明,由于比较简单,请参考:
http://gazebosim.org/user_guide/started_gui.html。
2.Gazebo的随机数:Gazebo制造了一个随机数生成器的使用,默认情况下,随机种子被设置为正在运行的Gazebo进程的处理识别符(PID),随机数种子能手动设置,该特征的好处是获取了一串确定性的随机数序列,有利于测试重复性。Gazebo能通过使用--seed的命令行被随机数种子初始化,语句:
gazebo --seedGazebo订阅一个要求是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表示摩擦无线大。
部分程序如下:
0.01 0.01
本文靠自己理解,翻译而来,错误之处望不吝指教!!!