MATLAB+ROS Robot仿真(ExampleHelperRobotSimulator)类

325
0
2020年11月24日 09时45分

 

ExampleHelperRobotSimulator类

文章目录

  • ExampleHelperRobotSimulator类
    • 1. 介绍
    • 2. 使用方法
    • 连接ROS
    • 模拟器属性
    • robot class

1. 介绍

ExampleHelperRobotSimulator是MATLAB机器人仿真中常用的一个类,此类旨在作为Gazebo(R)中TurtleBot(R)模拟的轻量级替代品。该类可以实现简单的机器人仿真及控制,具体用法将在下面的章节中介绍。

2. 使用方法

OBJ = ExampleHelperRobotSimulator 

 

为差分驱动机器人创建一个简单的模拟器。 如果启用了ROS接口,则机器人会在’/ mobile_base / commands / velocity’主题上接收速度命令(类型为’geometry_msgs / Twist’的消息),并将odometry信息(类型为’nav_msgs / Odometry’的消息)发送给’ / odom’主题。 此外,它还会更新一个显示机器人当前位置的图形窗口。

 

OBJ = ExampleHelperRobotSimulator(MAPNAME)

 

在模拟器中加载预定义的地图(MAP)。 MAPNAME是一个字符串,可以是以下之一:‘simpleMap’(默认),‘emptyMap’,‘borderMap’或’complexMap’。 默认地图的分辨率为2 cells/m。

 

OBJ = ExampleHelperRobotSimulator(MAPNAME,MAPRESOLUTION)

 

使用MAPNAME加载预定义的映射,并将分辨率设置为MAPRESOLUTION(以cells / m为单位)。 默认情况下,分辨率为2cells/m。

 

%OBJ = ExampleHelperRobotSimulator(BOG)

 

导入自己定义的MAP,即将robotics.BinaryOccupancyGrid对象BOG定义的地图加载到模拟器中。

连接ROS

1)ExampleHelperRobotSimulator的ROS接口需要初始化MATLAB ROS功能后才可以使用。 通过调用输入命令ROSINIT % 用于本地ROS主服务器或调用ROSINIT(MASTER_IP) % 来连接外部主服务器来完成此操作。

 

2)停止模拟器时,可以关闭相关的图形窗口或删除对象。

启用ROS界面后,您可以通过ROS控制模拟机器人的运动。 模拟器处理发布/订阅消息的主题和服务如下:

ExampleHelperRobotSimulator发布主题:

  • /odom – 当前机器人测距信息(位姿和速度)
  • /scan – 来自模拟激光扫描仪的数据
  • /mobile_base/sensors/bumper – 指示机器人是否遇到障碍物
  • /ground_truth_pose – 地面真相机器人位姿

ExampleHelperRobotSimulator已订阅的主题:

  • /mobile_base/commands/velocity – 机器人的速度命令

ExampleHelperRobotSimulator服务:

  • /sim/new_robot_pose – 将机器人移动到新的起始位姿
  • /sim/reset_poses – 将机器人的位姿重置为上一个已知的起始位姿
  • /gazebo/reset_world – 将机器人的位姿重置为上一个已知的起始位姿

 

模拟器属性

可以通过改变下述各种属性来更改模拟器的其他一些行为。
ExampleHelperRobotSimulator属性:

  • Map – 机器人使用的地图
  • Robot – 表示差动驱动机器人的对象。
  • LaserSensor – 表示模拟范围传感器的对象。
  • HasROSInterface – 指示对象是否具有ros接口。
  • HasFigureWindow – 指示对象是否具有GUI界面。
  • HasLaser – 指示模拟机器人是否具有激光传感器。
  • PlotTrajectory – 指示是否绘制机器人的轨迹。

 

ExampleHelperRobotSimulator使用方法:

  • enableLaser – 设置激光传感器接口。
  • enableROSInterface – 设置ROS发布者,订阅者和服务服务器。
  • showTrajectory – 绘制机器人的轨迹。
  • setRobotSize – 设置机器人的边界半径等于大小。
  • getRobotPose – 返回世界框架中的地面真实机器人姿势。
  • getRobotOdom – 返回机器人的测距数据。
  • drive – 以线速度v和角速度omega驱动机器人。
  • getRangeData – 以范围和角度返回激光扫描数据。
  • delete – 关闭模拟器。
  • randomizeLocation – 将机器人位置设置为随机位置。
  • resetSimulation – 将机器人位置设置为初始条件。

例如:

 

%启动ROS
rosinit   
%创建模拟器
%robotsim = ExampleHelperRobotSimulator;  
%启用ROS接口
%enableROSInterface(robotsim,true);  
%启用激光传感器
enableLaser(robotsim,true);  
%绘制机器人轨迹
showTrajectory(robotsim,true);   
%关闭模拟器
delete(robotsim)   
%关闭ROS
rosshutdown

另请参阅robotics.BinaryOccupancyGrid,ExampleHelperSimRangeSensor,ExampleHelperSimDifferentialDriveRobot。

robot class

 

classdef ExampleHelperRobotSimulator < handle
	properties(Constant, Access = protected)
		Step = 0.05
		PlotInterval = 0.1
		FigureName = 'Robot Simulator'
		FigureTag = 'ExampleHelperRobotSimulator'
	end	
 	properties (SetAccess = private)
	 	Robot
	 	LaserSensor
	 	HasROSInterface = false
	 	HasFigureWindow
	 	HasLaser
	 	PlotTrajectory = false
    end
	properties (Hidden)
        Axes
    end  
    properties (Dependent)
        Map
    end  
    properties (Access = {?ExampleHelperRobotSimulator, ?matlab.unittest.TestCase})
        InternalMap
        KinematicsTimer = timer.empty       
        PlotTimer = timer.empty
        InitialRobotState = [0 0 0]     
        RobotBodyFaceColor = [0.866 0.918 0.753]
        RobotBodyTriangleVertices = [[-0.3, -0.05,-0.3,0.8]; [-0.5,0,0.5,0]] * 0.5;
        RobotSize = 0.4;
        TrajectoryBufferCapacity = 5000;
        TrajectoryBuffer
        TrajectoryIndex = 0;
        TrajectoryUpdateTolerance = 0.01;
        ScanRanges
        ScanAngles
        ScanCollisionLoc
        GlobalNode
        LaserScanPublisher
        BumperStatePublisher
        VelCmdPublisher
        OdometryPublisher
		GroundTruthPosePublisher
        TransformTree
        LaserScanMessage
        BumperStateMessage
        LastVelocityCmd = rosmessage('geometry_msgs/Twist')
        PoseMessage
        TransformMessage
        VelCmdSubscriber
        ResetSimulationService
        RandomizeLocationService
        GazeboResetModelPosesService
        MyFigureTag
        Figure = []
        RobotBodyHandle = []
        ScanLineHandles = matlab.graphics.chart.primitive.Line.empty
        ScanPointHandles = matlab.graphics.chart.primitive.Line.empty
        TrajectoryHandle = [] 
        RandomLocationButton
        ResetSimulationButton
    end

发表评论

后才能评论