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

news2024/11/25 21:27:50

目录

  • 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深度学习实战》
  • 《机器学习强基计划》
  • 《运动规划实战精讲》

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

P6入门:项目初始化6-项目详情之资金Funding

前言 使用项目详细信息查看和编辑有关所选项目的详细信息,在项目创建完成后,初始化项目是一项非常重要的工作,涉及需要设置的内容包括项目名,ID,责任人,日历,预算,资金,分类码等等&…

Socket网络编程(服务端和客户端代码示例)

本文主要讲解Socket网络编程。 首先介绍socket,包括TCP和UDP通信过程;然后介绍常用的函数;最后编写client-server例子,并进行测试。 文章目录 Socket介绍TCP通信过程服务器端通信过程:客户端通信过程: UDP通…

SpringBoot整合Activiti7——定时器事件(九)

文章目录 定时器事件时间定义时间固定时间段时间周期 1.开始事件2.中间事件3.边界事件代码实现xml文件自定义服务任务监听器自定义用户任务监听器测试流程流程执行步骤 定时器事件 可以用在开始事件、中间事件、边界事件上,边界事件可以是中断和非中断边界事件 需要…

腾讯云双11,多款云服务器优惠多多!新用户优惠超值!

腾讯云在2023年的双11优惠活动中推出了多种优惠的云服务器配置,本文将为您介绍其中的几款服务器配置以及价格优惠。 2核2G3M带宽云服务器 该款云服务器配置为2核2G3M,优惠活动价格为88元/年。该配置适合小型网站、个人博客等轻量级应用。 腾讯云88元服…

医疗器械维修工程师必须重视的方面

彩虹医疗器械维修技能培训开班报名中 长期班低至五折, 打破常规培训模式轻松愉快技术学习! 两个多月时间,提升自我! 点击进入 彩虹实训基地 理论实践结合教学 小班授课 立即咨询 1 工程师须重视 在医疗行业中,…

SpringBoot整合Dubbo和Nacos

1.概述 dubbo是一个高性能、轻量级的开源分布式服务框架,早期由阿里巴巴进行开源。它提供了服务注册、发现、调用和负载均衡等分布式服务治理功能,为分布式开发提供了极大便利。dubbo核心概念包括:Provider(消费提供者&#xff0…

速看!人物百度百科怎么创建?5分钟教会你创建人物百度百科词条

百度人物百科是一个广受欢迎的在线百科平台,它为用户提供了一个便捷的方式来了解各种各样的人物信息。如果你有一个人物的详细资料,你可以通过创建一个百度人物百科页面来分享这些信息。 下面是分媒互动分享的创建百度人物百科页面的步骤以及需要注意的几…

Java民营医院、门诊部、卫生院、连锁医院、公立医院云HIS信息管理系统源码

基于云计算技术的B/S架构的医院管理系统(简称云HIS),为医疗机构提供标准化的、信息化的、高效可靠的医疗信息管理系统,实现医患事务管理和临床诊疗管理等标准医疗管理信息系统的功能。利用云计算平台的技术优势,建立统一的云HIS、云病历、云P…

vue中使用iconfont图标

1. 选择一个图标加入购物车 2、点击右上角购物车图标。点击下载代码,并添加至项目。 3、将下载好的代码文件放入项目中的assets目录的styles下 iconfont.css直接放在styles下 在styles目录下新建目录iconfont,将iconfont.ttf、iconfont.woff、iconfont…

ARM PMU

PMU单元概览 ARM PMU概要 PMU作为一个扩展功能,是一种非侵入式的调试组件。 对PMU寄存器的访问可以通过CP15协处理器指令和Memory-Mapped地址。 基于PMUv2架构,A7处理器在运行时可以收集关于处理器和内存的各种统计信息。对于处理器来说这些统计信息中…

Elasticsearch:ES|QL 动手实践

在我之前的文章 “Elasticsearch:ES|QL 查询语言简介”,我对 Elasticsearch 的最新查询语言 ES|QL 做了一个简单的介绍。在今天的文章中,我们详细来使用一些例子来展示 ES|QL 强大的搜索与分析功能。 安装 如果你还没有安装好自己的 Elastic…

LCM-LoRA:通用stable diffusion 加速模块!2023.11.13顶会论文速递!

整理:AI算法与图像处理 欢迎关注公众号 AI算法与图像处理,获取更多干货: 推荐 微信交流群现已有2000从业人员交流群,欢迎进群交流学习,微信:nvshenj125 B站最新成果demo分享地址:https://space.…

Actipro Software WinForms Controls 23.1.2

Actipro它被认为是一组 UI 控件,用于为用户和开发人员创建漂亮的窗口窗体以及桌面应用程序。Actipro Software 创建于 1999 年,被认为是为用户和开发人员(主要为 Microsoft 平台 .NET)提供软件组件的私营提供商。基于克利夫兰&…

Rust编程中的共享状态并发执行

1.共享状态并发 虽然消息传递是一个很好的处理并发的方式,但并不是唯一一个。另一种方式是让多个线程拥有相同的共享数据。在学习Go语言编程过程中大家应该听到过一句口号:"不要通过共享内存来通讯"。 在某种程度上,任何编程语言中的信道都类…

Actipro Software WPF Controls 23.1.3

Actipro Software WPF Controls v23.1.3 Actipro Software 为 Microsoft 提供软件组件和 .NET 平台。它位于克利夫兰,重点主要是提供高质量的用户界面软件组件以及客户的过程,以便他们有能力信任,以便为用户应用程序添加强大的功能。自 .NET…

Vscode舒适的主题推荐

1. One Dark Pro与One Dark Pro Darker 感觉配色特别好看,强烈推荐

如何编写一个Perl爬虫程序

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

【算法与数据结构】46、47、LeetCode全排列I, II

文章目录 一、46.全排列I二、47.全排列II三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、46.全排列I 思路分析:本题要求是全排列,意味着每次递归的时候startIndex都要从0开始,否则…

基于 Letterize.js + Anime.js 实现炫酷文本特效

如上面gif动图所示,这是一个很炫酷的文字动画效果,文字的每个字符呈波浪式的扩散式展开。本次文章将解读如何实现这个炫酷的文字效果。 基于以上的截图效果可以分析出以下是本次要实现的主要几点: 文案呈圆环状扩散开,扩散的同时…

代驾预约小程序系统源码 :提起预约,避免排队 带完整搭建教程

大家好啊,又到罗峰来给大家分享好用的源码系统的时间了。今天要给大家分享的第一款代驾预约小程序源码系统。传统的代驾服务中,用户往往需要在酒后代驾、长途驾驶等场景下,面对排队等待代驾司机空闲时间的繁琐过程。这不仅浪费了用户的时间和…