建模分析 | 差速轮式移动机器人运动学建模(附Python/Matlab仿真)

目录

  • 0 专栏介绍
  • 1 差速模型定义
  • 2 控制量与驱动量
  • 3 运动学方程
  • 4 仿真实现
    • 4.1 Python仿真
    • 4.2 Matlab仿真

0 专栏介绍

🔥附C++/Python/Matlab全套代码🔥课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规划(DWA、APF等);曲线优化(贝塞尔曲线、B样条曲线等)。

🚀详情:图解自动驾驶中的运动规划(Motion Planning),附几十种规划算法


1 差速模型定义

差速轮式移动机器人是一种机器人平台,其运动控制基于两个或多个并行但独立驱动的轮子。这些轮子通常位于机器人的两侧,通过分别控制每个轮子的速度和方向,机器人能够实现灵活的运动和转向。

差速轮式移动机器人的核心是通过调整两个轮子的速度差异,使其能够前进、后退、转向、旋转等。这种设计使得差速轮式移动机器人在室内和室外环境中都能够有效地导航和执行各种任务,如物品搬运、勘探、巡逻等。

差速轮式移动机器人的经典结构如图所示

在这里插入图片描述

此模型中设移动机器人的几何中心和质心重合,且重合点在轮轴中点上。用 p = [ x y θ ] T \boldsymbol{p}=\left[ \begin{matrix} x& y& \theta\\\end{matrix} \right] ^T p=[xyθ]T表示该移动机器人在全局坐标系 x O y xOy xOy中的位姿, M ( x , y ) M\left( x,y \right) M(x,y)表示该移动机器人质心在全局坐标系的坐标。设移动机器人车轮直径为 2 r 2r 2r,两驱动轮间距为 2 d 2d 2d

设移动机器人局部坐标系为 x ′ O y ′ x'Oy' xOy,则定义机器人瞬时线速度 v v v为其沿 x ′ x' x轴(亦即前进方向)的速度,位姿角 θ \theta θ x ′ x' x轴与全局坐标系 x x x轴的夹角,角速度 ω \omega ω x ′ x' x轴绕 M M M点的瞬时旋转角速率,整个系统以 u = [ v ω ] T \boldsymbol{u}=\left[ \begin{matrix} v& \omega\\\end{matrix} \right] ^T u=[vω]T输入控制量。设 ω L \omega _L ωL ω R \omega _R ωR v L v_L vL v R v_R vR分别为机器人左右驱动轮的角速度、线速度,也为驱动量

2 控制量与驱动量

下面考察控制量与驱动量间的关系,首先有

v = v L + v R 2 v=\frac{v_L+v_R}{2} v=2vL+vR

在这里插入图片描述

如图所示,设在时间 Δ t → 0 \varDelta t\rightarrow 0 Δt0内,机器人由位姿 p 1 \boldsymbol{p}_1 p1移动到位姿 p 2 \boldsymbol{p}_2 p2,位姿角 θ \theta θ变化了 Δ θ \varDelta \theta Δθ,一轮比另一轮多运动了 Δ l = ( v R − v L ) Δ t \varDelta l=\left( v_R-v_L \right) \varDelta t Δl=(vRvL)Δt,则 Δ θ ≈ sin ⁡ Δ θ = Δ l / ( 2 d ) \varDelta \theta \approx \sin \varDelta \theta ={{\varDelta l}/{\left( 2d \right)}} ΔθsinΔθ=Δl/(2d),从而

ω = Δ θ Δ t = v R − v L 2 d \omega =\frac{\varDelta \theta}{\varDelta t}=\frac{v_R-v_L}{2d} ω=ΔtΔθ=2dvRvL

进而得到机器人运动半径

r = v ω = v R + v L v R − v L d r=\frac{v}{\omega}=\frac{v_R+v_L}{v_R-v_L}d r=ωv=vRvLvR+vLd

所以控制量与驱动量的关系用矩阵表示为:

[ v ω ] = [ 1 2 1 2 1 2 d − 1 2 d ] [ v R v L ] \left[ \begin{array}{c} v\\ \omega\\\end{array} \right] =\left[ \begin{matrix} \frac{1}{2}& \frac{1}{2}\\ \frac{1}{2d}& -\frac{1}{2d}\\\end{matrix} \right] \left[ \begin{array}{c} v_R\\ v_L\\\end{array} \right] [vω]=[212d1212d1][vRvL]

3 运动学方程

差速移动机器人的运动学方程容易得到

p ˙ = [ x ˙ y ˙ θ ˙ ] = [ cos ⁡ θ 0 sin ⁡ θ 0 0 1 ] [ v ω ] = S ( q ) u \boldsymbol{\dot{p}}=\left[ \begin{array}{c} \dot{x}\\ \dot{y}\\ \dot{\theta}\\\end{array} \right] =\left[ \begin{matrix} \cos \theta& 0\\ \sin \theta& 0\\ 0& 1\\\end{matrix} \right] \left[ \begin{array}{c} v\\ \omega\\\end{array} \right] =S\left( \boldsymbol{q} \right) \boldsymbol{u} p˙= x˙y˙θ˙ = cosθsinθ0001 [vω]=S(q)u

也可以根据控制量和驱动量的关系进一步写出

p ˙ = [ x ˙ y ˙ θ ˙ ] = [ cos ⁡ θ 0 sin ⁡ θ 0 0 1 ] [ 1 2 1 2 1 2 d − 1 2 d ] [ v R v L ] = S ~ ( q ) u \boldsymbol{\dot{p}}=\left[ \begin{array}{c} \dot{x}\\ \dot{y}\\ \dot{\theta}\\ \end{array} \right] =\left[ \begin{matrix} \cos \theta& 0\\ \sin \theta& 0\\ 0& 1\\ \end{matrix} \right] \left[ \begin{matrix} \frac{1}{2}& \frac{1}{2}\\ \frac{1}{2d}& -\frac{1}{2d}\\ \end{matrix} \right] \left[ \begin{array}{c} v_R\\ v_L\\ \end{array} \right] =\tilde{S}\left( \boldsymbol{q} \right) \boldsymbol{u} p˙= x˙y˙θ˙ = cosθsinθ0001 [212d1212d1][vRvL]=S~(q)u

由上式可知自主移动机器人是状态向量维数为3,但控制输入量为2维的非完整约束系统,因此自主移动机器人存在无法全向移动的运动约束,在路径规划中需要协调路径平滑与连续性。

4 仿真实现

4.1 Python仿真

核心的运动学迭代公式实现如下

def lookforward(self, state: np.ndarray, u: np.ndarray, dt: float) -> np.ndarray:
	F = np.array([[1, 0, 0, 0, 0],
	              [0, 1, 0, 0, 0],
	              [0, 0, 1, 0, 0],
	              [0, 0, 0, 0, 0],
	              [0, 0, 0, 0, 0]])
	B = np.array([[dt * math.cos(state[2]),  0],
	              [dt * math.sin(state[2]),  0],
	              [                      0, dt],
	              [                      1,  0],
	              [                      0,  1]])
	new_state = F @ state + B @ u
	return new_state

在这里插入图片描述

4.2 Matlab仿真

核心的运动学迭代公式实现如下

function robot = f(robot, u, dt)
%@breif: robotic kinematic
    F = [ 1 0 0 0 0
             0 1 0 0 0
             0 0 1 0 0
             0 0 0 0 0
             0 0 0 0 0];
 
    B = [dt * cos(robot.theta) 0
            dt * sin(robot.theta)  0
            0                                dt
            1                                 0
            0                                 1];
 
    x = [robot.x; robot.y; robot.theta; robot.v; robot.w];
    x_star = F * x + B * u';
    robot.x = x_star(1); robot.y = x_star(2); robot.theta = x_star(3);
    robot.v = x_star(4); robot.w = x_star(5);
end

在这里插入图片描述

完整工程代码请联系下方博主名片获取


🔥 更多精彩专栏

  • 《ROS从入门到精通》
  • 《Pytorch深度学习实战》
  • 《机器学习强基计划》
  • 《运动规划实战精讲》

👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/143053.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

性价比高的台灯推荐,呼声最高的五款护眼台灯推荐

台灯可以说家家必备!家中有上学的小孩更是需要一款好台灯,因为看书、写字、做作业都离不开台灯,一款好的台灯不仅会提供明亮的学习环境,而且还能保护视力,预防近视,因此,挑选台灯绝对不可以马虎…

HelloWorld -从Houdini导出HDA到UE5

1.配置插件 在Houdini安装目录下找到对应版本引擎的插件,例如这里是Houdini19对应UE5.2的版本,我们就要保证先下载好UE5.2: 将Houdini插件粘贴到UE安装目录的Plugins文件夹下: 目前插件配置完成,打开UE会自动启用插…

基于opencv+tensorflow+神经网络的智能银行卡卡号识别系统——深度学习算法应用(含python、模型源码)+数据集(一)

目录 前言总体设计系统整体结构图系统流程图 运行环境Python环境TensorFlow 环境OpenCV环境 相关其它博客工程源代码下载其它资料下载 前言 本项目基于从网络获取的多种银行卡数据集,采用OpenCV库的函数进行图像处理,并通过神经网络进行模型训练。最终实…

基于springboot实现小学家校一体“作业帮”系统项目【项目源码】

基于springboot实现小学家校一体“作业帮”系统演示 Java语言简介 Java是由SUN公司推出,该公司于2010年被oracle公司收购。Java本是印度尼西亚的一个叫做爪洼岛的英文名称,也因此得来java是一杯正冒着热气咖啡的标识。Java语言在移动互联网的大背景下具…

放假通知!2024年全国中小学寒假时间发布!

进入冬季, 学生们都迫不及待地 期盼着寒假的到来。 近日,全国多地已经明确了 2024年中小学寒假的起止时间。 一起来看看你所在的城市寒假放几天 北京 据“首都教育”微信公众号消息, 普通中小学、中等职业学校 义务教育阶段2024年寒…

用CHAT如何写视频剪辑思路?

问CHAT:我的行业是国学教育,我的工作是视频剪辑师,给我推荐几个剪辑思路 CHAT回复: 作为一个国学教育视频剪辑师,你的主要任务是通过剪辑创作引人入胜、富有教育性的视频。 以下是一些可能对你有帮助的剪辑思路&…

抖音直播招聘报白企业或者人力资源公司怎么做?

抖音招聘是一种新颖、高效的招聘方式,它可以为公司带来更大的曝光度和吸引力,帮助公司吸引更多优秀的人才。通过抖音直播招聘报白,企业或者人力资源公司可以利用抖音的短视频流量红利,触达到每天超过8亿的活跃用户群体。通过抖音直…

推荐一款高速CAN FD收发器NCV7343D20R2G 车规级 高达5Mbps数据速率

NCV7343D20R2G CAN FD收发器是控制器局域网(CAN)协议控制器和物理总线之间的接口。收发器向总线提供差分传输能力,向CAN控制器提供差分接收能力。NCV7343D20R2G是CAN高速收发器系列的一个补充,补充了NCV7343D20R2G CAN独立收发器和…

Cesium:绘制点

作者:CSDN _乐多_ 本文记录了在Cesium中绘制点的函数。 文章目录 data() 里面设置点的样式 pointOption: {show: true,pixelSize: 10,heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,color: Cesium.Color.RED,outlineColor: Cesium.Color.YELLOW,outl…

微信怎么群发消息?答案在这,1分钟就能学会!

微信群发消息是一种方便快捷的消息发送方式,该功能允许用户一次性给多个好友发送相同的内容。一般来说,群发消息比较适用于发送节日祝福、通知、品牌推广等场景。微信怎么群发消息?本文将给大家详细介绍微信群发消息的操作方法,只…

智慧城市井盖选择,智能井盖传感器特点介绍

在不断发展的智慧城市技术领域,创新的过程一直是永无止境的。 顺应科学技术的发展潮流,一项惠民的举措正在悄然改变人们的生活。智能井盖传感器看似是不起眼的设备,但是它们就在我们脚下,正在悄无声息的完善城市基础设施和城市生命…

Python中的filter函数用法详解

目录 引言 一、filter函数基本用法 二、filter函数应用场景 1、筛选符合条件的元素 2、数据清洗和预处理 3、复杂条件筛选 4、与其他函数结合使用 三、filter函数与lambda表达式 四、filter函数与列表推导式 五、总结 引言 Python中的filter函数是一种内置的高效过滤…

excel中的OFFSET函数

介绍 OFFSET函数是确定从基点出发移动后的引用区域。它有5个参数: 第1个参数是引用的参考基点区域第2个参数是移动的行数,正数代表向下移动的行数,负数代表向上移动的行数第3个参数是移动的列数,正数代表向右移动的列数&#xf…

电脑远程监控软件大揭秘

电脑远程监控软件是一种通过互联网远程控制另一台电脑的软件,通常需要安装在被监控的电脑上,并由控制者通过电脑或手机进行远程操作。 这种软件广泛应用于企业、学校、家庭等场景,可以帮助管理者监控员工或孩子的电脑使用情况,保护…

死锁的发生原因和怎么避免

(本文摘录mic老师面试文档) 普通人 临场发挥… 高手 (如图),死锁,简单来说就是两个或者两个以上的线程在执行的过程中,争夺同一个共 享资源造成的相互等待的现象。 如果没有外部干预,线程会一直阻塞无…

如何编写一个Perl爬虫程序

要编写一个Perl爬虫程序,首先需要安装LWP::UserAgent模块。你可以使用cpan命令来安装该模块: cpan LWP::UserAgent 安装完成后,可以使用以下代码来编写爬虫程序: use LWP::UserAgent; use HTML::TreeBuilder; my $proxy_host …

Session、Token、Jwt三种登录方案介绍

新开发一个应用首先要考虑的就是登录怎么去做,登录本身就是判断一下输入的用户名和密码与系统存储的是否一致,但因为Http是无状态协议,用户请求其它接口时是怎么判断该用户已经登录了呢?下面聊一个三种实现方案。 一、传统sessio…

国际阿里云:云服务器灾备方案!!!

保障企业业务稳定、IT系统功能正常、数据安全十分重要,可以同时保障数据备份与系统、应用容灾的灾备解决方案应势而生,且发展迅速。ECS可使用快照、镜像进行备份。 灾备设计 快照备份 阿里云ECS可使用快照进行系统盘、数据盘的备份。目前,阿…

中睿天下受邀参加2023电力数字化大会并荣获“闪电杯”大赛三等奖

11月1日至2日,中国电力发展促进会、国家电网有限公司信息通信分公司、国家电网有限公司大数据中心、国家电投集团数字科技有限公司在京联合举办2023电力数字化大会。 大会以“数智赋能新型电力系统”为主题,邀请院士、企业领导、专家学者,探讨…

搭建网站选择弹性云服务器

​ 弹性云服务器已成为建站的首选方案,弹性云服务器并从成本、灵活性、可扩展性和安全性等多个角度进行分析。 一、成本控制弹性云服务器以其优势的弹性计费模式,在建站初期成本控制中占据了重要地位。与传统的物理服务器相比,弹性云服务器可…