matlab定义机器人位置,ROS与Matlab语言入门教程-差动机器人的路径跟踪
该例程演示如何使用机器人运动模型控制机器人跟踪目标路径。该例程使用“Pure Persuit”路径跟踪控制器驱动仿真机器人沿着预先决定的路径运动。要求的路径时一系列的陆标,该陆标是明确定义的或者由路径规划器计算的得到。创建仿真差动机器人的“Pure Persuit”路径规划器,计算控制指令以跟踪给定路径。计算的控制指令用于驱动仿真机器人沿着要求的轨迹基于“Pure Persuit”控制器。
定义陆标
为机器人定义一系列要求路径的路标点。
path = [2.00 1.00;
1.25 1.75;
5.25 8.25;
7.25 8.75;
11.75 10.75;
12.00 10.00];
可视化要求的路径。
plot(path(:,1), path(:,2),'k--d')
xlim([0 13])
ylim([0 13])
定义机器人运动模型
当没有外部仿真器或者实际机器人可用的情况下,就需要机器人运动模型。在本例中使用的仿真运动模型,根据给定的输入,更新和返回机器人的位姿。外部仿真或真实机器人将需要定位机制以提供机器人更新的位姿。
设置当前的位置和机器人的目标位置,目标位置由路径定义。
robotCurrentLocation = path(1,:);
robotGoal = path(end,:);
假设机器人的初始方向(机器人的初始方向是机器人的航向和X轴正方向的夹角,以逆时针的方式测量)。
initialOrientation = 0;
定义机器人的当前位姿[x,y,theta]:
robotCurrentPose = [robotCurrentLocation initialOrientation];
初始化仿真机器人对象的当前位姿,仿真机器人具有两轮机器人的运动学方程。该仿真机器人对象能够基于这些运动方程和线性、角度速度输入。具备绘图的能力显示机器人的当前位置和绘制机器人的轨迹。
robot = ExampleHelperDifferentialDriveRobot(robotCurrentPose);
定义路径跟踪控制器
根据上文定义的路径和机器人运动模型,用户需要一个路径跟踪控制器以驱动机器人沿着路径运动。使用“robotics.PurePursuit”对象创建路径跟踪控制器。
controller = robotics.PurePursuit
controller =
System: robotics.PurePursuit
Properties:
Waypoints: []
MaxAngularVelocity: 1
LookaheadDistance: 1
DesiredLinearVelocity: 0.1
使用上面定义的路径为控制器设置要求的路标。
controller.Waypoints = path;
设置路径跟踪控制器的参数,本例中要求的线性速度设置为0.3m/s。
controller.DesiredLinearVelocity = 0.3;
最大角速度作为旋转速度的饱和限制,本例中设置为2rad/s。
controller.MaxAngularVelocity = 2;
作为一般规则,为了平滑的路径,向前的距离应该比要求的线性速度大。当向前距离大时,机器人可能抄近路。相反的,向前距离小可能时可能导致不稳定的路径跟踪表现。本例选择0.5m。
controller.LookaheadDistance = 0.5;
使用路径跟踪控制器,在需要的路标驱动机器人
路径跟踪控制器为机器人提供输入控制信号,机器人使用该信号驱动自己沿着要求的路径。
定义目标半径,作为机器人最终位置和要求距离阈值,一旦机器人与目标位置的距离小于该值,则停止。此外,计算机器人的当前位置和目标位置的距离,持续的比较该值与目标半径,当该距离小于目标半径的时候,机器人将会停止。注意,如果目标半径太小可能导致机器人错过目标,这可能会导致目标附近预料之外的表现。
goalRadius = 0.1;
distanceToGoal = norm(robotCurrentLocation - robotGoal);
“robotics.PurePursuit.step”函数计算控制命令给机器人,使用这些指令驱动机器人直到抵达目标半径之内。如果用户使用一个外部的仿真器或者真实机器人,那么控制器的输出需要应用到机器人,而且需要一个定位系统更新机器人的位姿。
while( distanceToGoal > goalRadius )
% Compute the controller outputs, i.e., the inputs to the robot
[v, omega] = step(controller, robot.CurrentPose);
% Simulate the robot using the controller outputs.
drive(robot, v, omega)
% Extract current location information ([X,Y]) from the current pose of the
% robot
robotCurrentLocation = robot.CurrentPose(1:2);
% Re-compute the distance to the goal
distanceToGoal = norm(robotCurrentLocation - robotGoal);
end
仿真机器人使用路径跟踪控制器沿着要求的路径已经到达目标位置。如果目标路标集由路径规划器计算,路径跟踪控制器应用的样式相同。导入一个简单的地图用于计算路径。
filePath = fullfile(fileparts(which('PathFollowingControllerExample')), 'data', 'exampleMaps.mat');
load(filePath)
map = robotics.BinaryOccupancyGrid(simpleMap, 2)
map =
BinaryOccupancyGrid with properties:
GridSize: [26 27]
Resolution: 2
XWorldLimits: [0 13.5000]
YWorldLimits: [0 13]
GridLocationInWorld: [0 0]
显示地图:
show(map)
用户可以使用PRM路径规划算法计算路径。
robotRadius = 0.2;
mapInflated = copy(map);
inflate(mapInflated,robotRadius);
prm = robotics.PRM(mapInflated);
prm.NumNodes = 100;
prm.ConnectionDistance = 10;
寻找开始位置和结束位置的路径,注意,由于PRM算法的随机性,路径将会有所不同。
startLocation = [2.0 1.0];
endLocation = [12.0 10.0];
path = findpath(prm, startLocation, endLocation)
path =
2.0000 1.0000
1.5851 1.3808
4.0668 6.7417
7.0353 8.6624
12.2282 10.3257
12.0000 10.0000
显示路径:
hold on
show(prm, 'Map', 'off', 'Roadmap', 'off');
hold off
在上文定义了一个路径跟踪控制器,用户可以在本地图重新使用以计算机器人的控制指令。为了重新使用控制器和重新定义路标点,同时保持其它信息不变,使用“robotics.PurePursuit.release”函数。
release(controller)
controller.Waypoints = path;
设置当前的位置和机器人的目标位置,正如路径所定义的。
robotCurrentLocation = path(1,:);
robotGoal = path(end,:);
假设机器人的初始方向:
initialOrientation = 0;
定义机器人运动的当前位姿[x,y,theta]
robotCurrentPose = [robotCurrentLocation initialOrientation];
使用当前位姿,重新创建仿真机器人对象。
robot = ExampleHelperDifferentialDriveRobot(robotCurrentPose);
计算与目标位置的距离:
distanceToGoal = norm(robotCurrentLocation - robotGoal);
定义目标半径:
goalRadius = 0.1;
在给定的地图上,使用控制器的输出驱动机器人,直到抵达目标位置。
while( distanceToGoal > goalRadius )
% Compute the controller outputs, i.e., the inputs to the robot
[v, omega] = step(controller, robot.CurrentPose);
% Simulate the robot using the controller outputs
drive(robot, v, omega)
% Extract current location information from the current pose
robotCurrentLocation = robot.CurrentPose(1:2);
% Re-compute the distance to the goal
distanceToGoal = norm(robotCurrentLocation - robotGoal);
end
matlab定义机器人位置,ROS与Matlab语言入门教程-差动机器人的路径跟踪相关推荐
- c语言中结构体数组的引用,【C语言入门教程】7.2 结构体数组的定义和引用
7.2 结构体数组的定义和引用 当需要使用大量的结构体变量时,可使用结构体定义数组,该数组包含与结构体相同的数据结构所组成的连续存储空间.如下例所示: struct student stu_a[50] ...
- c++ 结构体赋值_《零基础看得懂的C语言入门教程》—(十二)结构体是这么回事
一.学习目标 了解C语言的结构体的使用方法 了解C语言结构体的结构的赋值 了解多种C语言结构体变量的赋值方法和取值方法 目录 <零基础看得懂的C语言入门教程>--(二)简单带你了解流程 & ...
- 2017年Go语言入门教程-徐培成-专题视频课程
2017年Go语言入门教程-3763人已学习 课程介绍 Go语言入门教程,只要你懂中文都可以看的懂本套教程,为任何想学习Go语言研制的教程. 课程收益 让任何人都可以轻松掌握G ...
- GO语言入门教程(二)
Hello,各位小伙伴,在接着之前发表的Go语言系列教程之投石问路之后,我们大致了解了一下Go语言的发展史和Go语言的优势,另外我也带着小伙伴进行了Go语言环境的安装和常用命令的介绍.接下来我们就正式 ...
- 小白都能看懂的C语言入门教程
文章目录 C语言入门教程 1. 第一个C语言程序HelloWorld 2. C语言的数据类型 3. 常量变量的使用 4. 自定义标识符#define 5. 枚举的使用 6. 字符串和转义字符 7. 判 ...
- 计算机语言中的逻辑型数据,零基础易语言入门教程(五)之逻辑型数据类型
在上篇文章给大家介绍了零基础易语言入门教程(四)之数据类型,上篇针对数值到文本类型知识,今天给大家介绍下逻辑型数据. 具体方法和步骤如下所示: 1.逻辑型数据非真即假: 首先申请一个局部变量(A)类型 ...
- iOS开发之c语言入门教程
苹果作为移动互联的高端品牌,iOS操作系统也被用户公认为是最好用的移动互联网操作系统.据了解,曾一度拒绝为iOS平台对出浏览器的火狐在今年5月份的时候,他们却食言了.今天,Mozilla宣布iOS版F ...
- c语言5基础教程,[简001]《极简C语言入门教程》共5章
Saturday,May 18,2019 ---Andy ###目录: 前言 第一章 数据类型 1.1 数据类型 1.2 宏定义.常量.变量(一般和指针型) 第二章 格式化输入输出 2.1 输入 2. ...
- 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 ...
最新文章
- Altium.Designer的学习视频 分享~~
- Hybris Commerce Cloud backoffice的一些使用截图 - home工作中心
- 阿里云产品头条(2017年12月刊)
- leetcode - 813. 最大平均值和的分组
- Android Service基本使用
- Atitit mybatis返回多个数据集总结 目录 1.1. 配置handleResult接受,但是只有第一个select语句的结果	1 2. 配置resultMap ok	1 2.1. 调
- vue页面中样式修改子组件的样式
- 指标权重确定方法之熵权法
- ei加声调怎么加_大班拼音ei的教案
- 拳打电脑管家,脚踢金山毒霸,3分钟用Python撸一个杀毒软件
- oracle 18c,Oracle 18c
- 迅雷快车旋风链接转换成普通链接工具
- 阅读笔记:Poison Over Troubled Forwarders: A Cache Poisoning Attack Targeting DNS Forwarding Devices
- html表格填充空白单元格,Excel表格数据录入:怎么快速填充所有空白单元格?
- _access()函数
- PMP项目管理 | 项目质量管理
- 超定线性方程组Ax=b极小L1范数求解——MATLAB/Python实现
- lammps教程:in文件结构详解以及一个比较实用的in文件模板
- 付呗聚合支付快速教程 基础篇①——基本介绍和配置
- ERPS环网络端口角色
热门文章
- 如何解决本地虚拟机安装宝塔面板访问面板后台打不开?
- MFC操作——设置静态文本 大小 字体格式 颜色
- 计算机二级考点210109,顶伯试卷管理与组卷系统
- 网络猫只有计算机和机顶盒两个口,光猫为什么有千兆口和百兆口,两个不同的接口?二者有什么区别?...
- 前端js的数字转化为字符串相互转化
- Image Formation Pipeline --- 从2D到3D(二)
- 字符串系列② -- 替换空格
- 软件测试面试了十几家公司,全是这种“套路题”
- 深入浅出- ABP 多租户
- 自适应进化极限学习机SaDE_ELM程序源码和使用方法