本例程展示如何与MATLAB中的Gazebo仿真器进行交互,展示如何暂停Gazebo仿真、读取物理特性和获取Gazebo环境中的对象信息。

预备知识“4.2开始使用Gazebo和仿真TurtleBot”。

连接到Gazebo环境

从虚拟机的桌面或者Linux设备打开Gazebo世界,如果用户使用“4.2开始使用Gazebo和仿真TurtleBot”中的Ubuntu虚拟机,使用“Gazebo Empty”或“Gazebo Playground”。

在宿主计算机上的MATLAB实例运行如下命令,使用虚拟机的IP地址替换命令中的IP地址(192.168.1.1)。该指令初始化ROS并连接用户MATLAB实例到指定IP地址的ROS主控节点。

ipaddress = '192.168.1.1' % Replace this with the IP address of your virtual machine

rosinit(ipaddress)

注意,如果用户正在使用的网络不是你的默认网络,那么你可以手动设定IP地址,如下所示的语法。用仿真的IP地址代替“IP_OF_VM”,宿主的IP地址代替“IP_OF_HOST_COMPUTER”。

rosinit('IP_OF_VM','NodeHost','IP_OF_HOST_COMPUTER');

通过输入下面的指令,显示所有可用的ROS话题:

rostopic list

如果未能显示话题列表,那么说明网络没有正确设置。关于网络设置步骤,参考“4.2开始使用Gazebo和仿真TurtleBot”。

获得的列表应类似于:

>> rosinit('192.168.147.128')

Initializing global node /matlab_global_node_02311 with NodeURI

http://192.168.147.1:4651/

>> rostopic list

/camera/depth/camera_info

/camera/depth/image_raw

/camera/depth/points

/camera/parameter_descriptions

/camera/parameter_updates

/camera/rgb/camera_info

/camera/rgb/image_raw

/camera/rgb/image_raw/compressed

/camera/rgb/image_raw/compressed/parameter_descriptions

/camera/rgb/image_raw/compressed/parameter_updates

/clock

/cmd_vel_mux/active

/cmd_vel_mux/input/navi

/cmd_vel_mux/input/safety_controller

/cmd_vel_mux/input/teleop

/cmd_vel_mux/parameter_descriptions

/cmd_vel_mux/parameter_updates

/depthimage_to_laserscan/parameter_descriptions

/depthimage_to_laserscan/parameter_updates

/gazebo/link_states

/gazebo/model_states

/gazebo/parameter_descriptions

/gazebo/parameter_updates

/gazebo/set_link_state

/gazebo/set_model_state

/joint_states

/laserscan_nodelet_manager/bond

/mobile_base/commands/motor_power

/mobile_base/commands/reset_odometry

/mobile_base/commands/velocity

/mobile_base/events/bumper

/mobile_base/events/cliff

/mobile_base/sensors/bumper_pointcloud

/mobile_base/sensors/core

/mobile_base/sensors/imu_data

/mobile_base_nodelet_manager/bond

/odom

/rosout

/rosout_agg

/scan

/tf

通过“ExampleHelperGazeboCommunicator”类建立与Gazebo世界的连接,这将令与Gazebo的相互作用更简单。

gazebo = ExampleHelperGazeboCommunicator();

读取Gazebo引擎的物理特性

使用“ExampleHelperGazeboCommunicator”对象提取仿真的物理特性。

phys = readPhysics(gazebo)

输出与下面类似:

phys =

Gravity: [0 0 -9.8000]

UpdateRate: 100

TimeStep: 0.0100

SimulationStatus: 0

DisableBodies: 0

PreconditioningIterations: 0

InnerIterations: 50

Relaxation: 1.3000

ErrorToleranceRMS: 0

ContactWidth: 1.0000e-03

MaxCorrectingVelocity: 100

ConstantForceMixing: 0

ErrorReductionParameter: 0.2000

MaxContacts: 20

Gazebo使用SI单位。

为了探索,更改仿真的重力,使得与z轴方向相反。此外,减少数值。重置仿真的物理特性以作用于所有对象。

phys.Gravity = [0 0 0.01]; % Units are m/s^2

setPhysics(gazebo,phys);

resetSim(gazebo);

暂停、继续和重启仿真

用户可观察到TurtleBot(以及世界中的一切)缓慢加速上升离开地面。使用“theExampleHelperGazeboCommunicator”暂停仿真。

pauseSim(gazebo);

当用户暂停的时候,场景看起来类似下图。

恢复仿真,观察所有物体又开始向上移动。

resumeSim(gazebo);

重置仿真。

resetSim(gazebo);

TurtleBot又继续上浮。

“resetSim”函数并没有重置物理特性到原始值,使用“setPhysics”手动重置物理特性。

四分之一速度运行仿真

本小节描述如何以慢速度运行Gazebo仿真器,使用慢速度在仔细检查突发或短暂的物理交互或者行为是非常有益的。通过更改物理过程的更新速度使得仿真运行在减缓的速度,用户可以看到运行在1/4速度的情况。

pauseSim(gazebo);

phys = readPhysics(gazebo);

phys.UpdateRate = phys.UpdateRate/4;

setPhysics(gazebo,phys);

设置重力位正常数值。

phys.Gravity = [0 0 -9.8]; % Set gravity back to normal value (m/s^2)

setPhysics(gazebo,phys);

resumeSim(gazebo);

当用户恢复仿真,TurtleBot回落到地上,但以慢动作。

转换更新速率到正常值,使得仿真运行在真实的时间。

phys.UpdateRate = phys.UpdateRate*4; % Set update rate back to normal value

setPhysics(gazebo,phys);

获取Gazebo世界的模型列表

“ExampleHelperGazeboCommunicator”类允许用户发现世界中的所有模型:

models = getSpawnedModels(gazebo)

模型列表输出看起来类似如下:

models =

'ground_plane'

'mobile_base'

从模型获取链接

使用“ExampleHelperGazeboSpawnedModel”类为模型创建对象,获取有关模型(此处,Kobuki TurtleBot)的指定信息。

kobuki = ExampleHelperGazeboSpawnedModel('mobile_base',gazebo)

[kobukiLinks, kobukiJoints] = getComponents(kobuki)

该指令的输出类似如下:

kobuki =

ExampleHelperGazeboSpawnedModel with properties:

Name: 'mobile_base'

Links: {3x1 cell}

Joints: {2x1 cell}

kobukiLinks =

'base_footprint'

'wheel_left_link'

'wheel_right_link'

kobukiJoints =

'wheel_left_joint'

'wheel_right_joint'

读取模型的位姿和方向属性

对TurtleBot使用“ExampleHelperGazeboSpawnedModel”对象,通过使用“getState”函数获得位置、方向和速度。

[position, orientation, velocity] = getState(kobuki)

状态指令的输出类似如下:

position =

0.0011 0.0095 -0.0011

orientation =

-0.6015 -0.4581 0.0028

velocity =

Linear: [1.0093e-05 3.8059e-05 -9.3143e-06]

Angular: [-3.7350e-04 -2.4515e-04 -4.5738e-05]

从Gazebo在线模型数据库获取模型列表

使用“exampleHelperGazeboListModels”函数显示所有可用的Gazebo模型,以从Gazebo网站下载。

builtInModels = exampleHelperGazeboListModels()

下面是用户见到的项目的一部分列表,即使用户的虚拟机没有连接到互联网,如果宿主计算机连接互联网那么还是可以看到该列表。注意,在这种情况下,用户不能产生这些模型。

builtInModels =

'ball_bearing'

'beer'

'bookshelf'

'bowl'

'breakable_test'

'brick_box_3x1x3'

'cabinet'

'cafe'

'cafe_table'

'camera'

'cart_front_steer'

'cart_rigid_suspension'

'cart_soft_suspension'

'cessna'

'cinder_block'

'cinder_block_2'

'cinder_block_wide'

'coke_can'

'construction_barrel'

'construction_cone'

'cordless_drill'

'create'

'cricket_ball'

'cube_20k'

'door_handle'

'double_pendulum_with_base'

'drc_practice_2x4'

'drc_practice_2x6'

'drc_practice_4x4x20'

'drc_practice_4x4x40'

关闭

当用户完成工作后,清楚工作空间中的发布器、订阅器和其它有关ROS的对象是个良好的习惯。

clear

建议当完成ROS网络有关的工作之后,使用“rosshutdown”指令关闭全局节点和断开与Gazebo的连接。

rosshutdown

matlab gazebo,ROS与Matlab语言入门教程-从Gazebo读取模型和仿真性能相关推荐

  1. matlab怎么删除对象,ROS与Matlab语言入门教程-在Gazebo中增加、建立和移除对象

    本例程探索如何深层次地与MATLAB中的Gazebo仿真器交互.主题包括创建简单的模型.增加链接和加入模型.将模型连接在一起和应用力到物体. 预备知识:"4.2 开始使用Gazebo和仿真的 ...

  2. c语言用户输入编程,C语言入门教程-Printf:读取用户输入

    Printf:读取用户输入 前面的程序很好,但要是如果能从用户那里读入值5和7而不是使用固定的值的话,那就更好了.可以改为下面的程序: #include int main() {int a, b, c ...

  3. c++ 结构体赋值_《零基础看得懂的C语言入门教程》—(十二)结构体是这么回事

    一.学习目标 了解C语言的结构体的使用方法 了解C语言结构体的结构的赋值 了解多种C语言结构体变量的赋值方法和取值方法 目录 <零基础看得懂的C语言入门教程>--(二)简单带你了解流程 & ...

  4. c语言入门教程文库,C语言入门教程(全集)课件

    C语言入门教程(全集)课件 01123364105 Y N p AB X=0? YN P1 A A P2 a a b b Y Y N N y n A B P A A B X=0? 3 a97 3 U ...

  5. 2017年Go语言入门教程-徐培成-专题视频课程

    2017年Go语言入门教程-3763人已学习 课程介绍         Go语言入门教程,只要你懂中文都可以看的懂本套教程,为任何想学习Go语言研制的教程. 课程收益     让任何人都可以轻松掌握G ...

  6. GO语言入门教程(二)

    Hello,各位小伙伴,在接着之前发表的Go语言系列教程之投石问路之后,我们大致了解了一下Go语言的发展史和Go语言的优势,另外我也带着小伙伴进行了Go语言环境的安装和常用命令的介绍.接下来我们就正式 ...

  7. java编程输出平行四边形_JAVA语言入门教程之打印图形实例——打印平行四边形...

    本文主要向大家介绍了JAVA语言入门教程之打印图形实例--打印平行四边形,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 输出平行四边形: public class Parallelo ...

  8. C语言入门教程学习 C语言学习包括哪些?

    嵌入式开发有一定了解的朋友们知道是在操作系统内部开发的,对于操作系统内部来说基本上都是用C语言来进行编译的,所以说对于C语言的学习在嵌入式开发过程中是非常重要的.下面就给大家介绍一些C语言入门教程的相 ...

  9. 小白都能看懂的C语言入门教程

    文章目录 C语言入门教程 1. 第一个C语言程序HelloWorld 2. C语言的数据类型 3. 常量变量的使用 4. 自定义标识符#define 5. 枚举的使用 6. 字符串和转义字符 7. 判 ...

  10. 计算机语言中的逻辑型数据,零基础易语言入门教程(五)之逻辑型数据类型

    在上篇文章给大家介绍了零基础易语言入门教程(四)之数据类型,上篇针对数值到文本类型知识,今天给大家介绍下逻辑型数据. 具体方法和步骤如下所示: 1.逻辑型数据非真即假: 首先申请一个局部变量(A)类型 ...

最新文章

  1. android如何看百分比版本,【JAVA】Android百分比布局
  2. iOS开发小知识之正则表达式的简单用法
  3. 宽度定死、按照行间距、字体算出label高度
  4. CentOS 7 更新软件源和系统
  5. 面试官:你了解JVM的锁优化吗?
  6. 2top 存储过程 查看_S7-1500 PLC的存储区
  7. java登录界面命令_Java命令行界面(第19部分):jClap
  8. 身份验证和授权作为开源解决方案服务
  9. HTTP和WebSocket协议(二)
  10. 二分图最大权匹配:Kuhn-Munkres算法
  11. (转)让页面自动滚动到刷新页面之前的控件处,减少页面刷新带来的不便。
  12. 【造轮子】实现 memset、bzero 函数
  13. mysql-python:_mysql.c(42) : fatal error C1083: Cannot open include file: 'config-win.h' 非权威指南
  14. easyui支持ie8浏览器
  15. 火狐浏览器更新版本之后总是在当前页面打开新链接覆盖掉原先内容
  16. 面对疫情,我们普通人能做什么?
  17. 黑马程序员————集合2(day17)
  18. vux微信签名拿openid设计
  19. ubuntu18.04使用蓝牙适配器
  20. 正态总体下的假设检验

热门文章

  1. L'Hospital法则
  2. 你的宽带ip地址被100.64了吗?
  3. java各位数字补位,左边补0
  4. 揭秘工业互联网的内涵、热点与难点!
  5. What the f*ck Python!
  6. 设计模式---002适配模式(转载自我的老师 Alley-巷子)
  7. 基于S变换的电压暂降检测研究及仿真设计
  8. python股票预测_利用Keras长短期记忆(LSTM)模型预测股票价格
  9. 【论文阅读】Iterative Answer Prediction with Pointer-Augmented Multimodal Transformers for TextVQA
  10. 关于高德地图的分析报告