ExampleHelperRobotSimulator类
1. 介绍
ExampleHelperRobotSimulator是MATLAB机器人仿真中常用的一个类,此类旨在作为Gazebo(R)中TurtleBot(R)模拟的轻量级替代品。该类可以实现简单的机器人仿真及控制,具体用法将在下面的章节中介绍。
2. 使用方法
<code class="prism language-c has-numbering">OBJ <span class="token operator">=</span> ExampleHelperRobotSimulator </code>
为差分驱动机器人创建一个简单的模拟器。 如果启用了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