【数学建模】机器人避障问题

已知:

  1. 正方形5的左下顶点坐标 ( 80 , 60 ) (80,60) (80,60),边长 150 150 150
  2. 机器人与障碍物的距离至少超过 10 10 10个单位
  3. 规定机器人的行走路径由直线段和圆弧组成,其中圆弧是机器人转弯路径。
  4. 机器人不能折线转弯,转弯路径由与直线路径相切的一段圆弧组成,也可以由两个或多个相切的圆弧路径组成,但每个圆弧的半径最小为 10 10 10个单位。
  5. 机器人直线行走的最大速度为 v 0 v_0 v0= 5单位/秒
  6. 机器人转弯时,最大转弯速度为 v = v ( p ) = v 0 / ( 1 + e 10 − 0.1 p 2 ) v = v(p) = v_0 /( {1+ e^{10-0.1p^2}}) v=v(p)=v0/(1+e100.1p2)
    其中 p p p是转弯半径。如果超过该速度,机器人将发生侧翻,无法完成行走。
  7. A点坐标 ( 300 , 300 ) (300,300) (300,300)

需要研究的问题

问题:机器人从 O ( 0 , 0 ) O(0,0) O(0,0)出发,到达A的最短时间及其路径

问题1:画出机器人只在正方形左上角拐弯,拐弯半径为10的图

第一问其实是为整个问题服务的 , 也算是先进行一个预测,写一个样例先

MATLAB
基本数据定义:

x = 80;
y = 210;
r = 10;
theta = 0:pi/20:2*pi; %角度[0,2*pi] 
hold on;

画一个正方形:

%定义x,y轴范围
xlim([0,300]);
ylim([0,300]);
%四条线形成一个正方形
line([80,80],[60,210]);
line([80,230],[210,210]);
line([80,230],[60,60]);
line([230,230],[60,210]);

在正方形左上角为圆心画圆

plot(x+r*cos(theta),y+r*sin(theta),'-');

接着求切点
建立切点模型:
设切点为 ( x 1 , x 2 ) (x_1,x_2) (x1,x2) , 正方形左上角为圆心 ( x , y ) , x = 80 ; y = 210 ; (x,y) , x = 80;y = 210; (x,y),x=80;y=210; 圆半径 r = 10 r = 10 r=10 ;切线上除切点另外一点 ( x 2 , y 2 ) (x_2,y_2) (x2,y2) ;
即圆外一点 ( x 2 , y 2 ) (x_2,y_2) (x2,y2)引两条切线方程
因为切线和切点到圆心的直线垂直
则有 ( x − x 2 ) 2 + ( y − y 2 ) 2 = r 2 + ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 (x-x_2)^2+(y-y_2)^2 = r^2 + (x_1-x_2)^2 + (y_1-y_2)^2 (xx2)2+(yy2)2=r2+(x1x2)2+(y1y2)2
并且切点在圆上有: ( x 1 − x ) 2 + ( y 1 − y ) 2 = r 2 (x_1-x)^2 + (y_1-y)^2 = r^2 x1x2+(y1y)2=r2

由切点模型和圆外一点 O ( 0 , 0 ) O(0,0) O(0,0)建立方程求解

%这里在命令行窗口求解即可
solve('(px-80)^2+(py-210)^2=100','px^2+py^2+100=210^2+80^2');

排除不符合要求的点

px =  8064/101 - (252*14^(1/2))/101;

%(252*14^(1/2))/101 + 8064/101
%8064/101 - (252*14^(1/2))/101

py = (96*14^(1/2))/101 + 21168/101;

%21168/101 - (96*14^(1/2))/101
%(96*14^(1/2))/101 + 21168/101

由切点模型和圆外一点 A ( 300 , 300 ) A(300,300) A(300,300)建立方程求解

%这里在命令行窗口求解即可
solve('(px-80)^2+(py-210)^2=100','(px-300)^2+(py-300)^2+100=220^2+90^2')

排除不符合要求的点

px2 =9084/113 - (36*141^(1/2))/113;
%(36*141^(1/2))/113 + 9084/113
%9084/113 - (36*141^(1/2))/113

py2 =(88*141^(1/2))/113 + 23748/113;
%23748/113 - (88*141^(1/2))/113
%(88*141^(1/2))/113 + 23748/113

将切线画出来

line([0,px],[0,py]);
line([px2,300],[py2,300]);

在这里插入图片描述

问题2:机器人只在正方形左上角拐弯,拐弯半径为10,求路径长度和时间

由问题一的图可知,路径分三段
先求最简单的两段直线长度

pdist([[0,0];[px,py]],'euclidean')
pdist([[300,300];[px2,py2]],'euclidean')
%直线总距离
L2 = pdist([[0,0];[px,py]],'euclidean') + pdist([[300,300];[px2,py2]],'euclidean');

机器人走直线时间

ans1 = L2/v0

再求弧线长度和机器人走弧度时间以及总时间
已知圆上弧长公式为: l = ∣ θ ∣ r , ( θ 为圆心角,弧度 ) l=|\theta|r , (\theta为圆心角,弧度) l=θr,(θ为圆心角,弧度)

建立圆上两点弧长模型:
设圆上两点分别为 ( x 1 , y 1 ) , ( x 2 , y 2 ) (x_1,y_1),(x_2,y_2) (x1,y1),(x2,y2)
则弦长为 d = ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 d= \sqrt{(x_1-x_2)^2+(y_1-y_2)^2} d=(x1x2)2+(y1y2)2

设圆心角为 θ \theta θ,则圆周角为 θ / 2 \theta/2 θ/2
连接两点,连接其中一点和圆心并且延长 交圆上一点 ( x 3 , y 3 ) (x_3,y_3) (x3,y3) ,连接 ( x 3 , y 3 ) (x_3,y_3) (x3,y3)和另外一点,构成直角三角形
可得 s i n ( θ / 2 ) = d / ( 2 r ) sin(\theta/2) = d / (2r) sin(θ/2)=d/(2r)
所以 θ = 2 ∗ arcsin ⁡ ( d / ( 2 r ) ) \theta = 2*\arcsin{(d/(2r))} θ=2arcsin(d/(2r))
弧长 l = θ ∗ r l = \theta * r l=θr

%求弧度
%圆心角
d=sqrt((px-px2)^2+(py-py2)^2);
therta=2*asin(d/20);
%弧长
L=10*therta;

总时间


%求弧度
%圆心角
d=sqrt((px-px2)^2+(py-py2)^2);
therta=2*asin(d/20);
%弧长
L=10*therta;
%直线总距离
L2 = pdist([[0,0];[px,py]],'euclidean') + pdist([[300,300];[px2,py2]],'euclidean');

v0 = 5;
vp = v0/(1+(exp(1)^(10-0.1*10*10)));

ans1 = L2/v0 + L/vp;

求得为 96.017639004032700

问题3:求出最短时间及其路径

由前两问我们得出了圆上两点弧长模型建立切点模型
这一问就是结合上面模型,求一个求最小值的最优模型

设直线总长度为 s 1 s_1 s1,弧线总长度为 s 2 s_2 s2
min ⁡ a n s = s 1 / v 0 + s 2 / v \min{ans = s_1/v0 + s_2/v} minans=s1/v0+s2/v

最优的话拐弯半径和圆心肯定会变化
设转弯圆心为 ( x , y ) (x,y) (x,y),半径为 r r r
分别以 ( 0 , 0 ) 和 ( 300 , 300 ) (0,0)和(300,300) (0,0)(300,300)为圆外一点的切点分别为 ( x 1 , y 1 ) , ( x 2 , y 2 ) (x_1,y_1),(x_2,y_2) (x1,y1),(x2,y2)
由建立切点模型我们可得以下方程
{ x 2 + y 2 = r 2 + x 1 2 + y 1 2 ( x 1 − x ) 2 + ( y 1 − y ) 2 = r 2 ( x − 300 ) 2 + ( y − 300 ) 2 = r 2 + ( x 1 − 300 ) 2 + ( y 1 − 300 ) 2 ( x 2 − x ) 2 + ( y 2 − y ) 2 = r 2 \begin{cases} x^2+y^2 = r^2 + x_1^2 + y_1^2 \\ (x_1-x)^2 + (y_1-y)^2 = r^2 \\ (x-300)^2+(y-300)^2 = r^2 + (x_1-300)^2 + (y_1-300)^2\\ (x_2-x)^2 + (y_2-y)^2 = r^2 \end{cases} x2+y2=r2+x12+y12x1x2+(y1y)2=r2(x300)2+(y300)2=r2+(x1300)2+(y1300)2x2x2+(y2y)2=r2

由圆上两点弧长模型和上述切点 ( x 1 , y 1 ) , ( x 2 , y 2 ) (x_1,y_1),(x_2,y_2) (x1,y1),(x2,y2)可得方程
s 2 = 2 ∗ ( arcsin ⁡ ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 / ( 2 r ) ) ∗ r s_2 = 2 * (\arcsin{\sqrt{(x_1-x_2)^2+(y_1-y_2)^2}/(2r)})*r s2=2(arcsin(x1x2)2+(y1y2)2 /(2r))r

由圆心之间可得直线距离方程
s 1 = x 2 + y 2 − r 2 / v + ( x − 300 ) 2 + ( y − 300 ) 2 − r 2 / v s_1 = \sqrt{x^2+y^2-r^2}/v + \sqrt{(x-300)^2+(y-300)^2-r^2}/v s1=x2+y2r2 /v+(x300)2+(y300)2r2 /v
或者有上述切点可得直线距离方程为
s 1 = x 1 2 + y 1 2 / v + ( x 2 − 300 ) 2 + ( y 2 − 300 ) 2 / v s_1 = \sqrt{x_1^2+y_1^2}/v + \sqrt{(x_2-300)^2+(y_2-300)^2}/v s1=x12+y12 /v+(x2300)2+(y2300)2 /v

由于在左上角的时候是极限情况,圆心连接正方形左上角并延长出去距离必须大于等于10可得
r − ( x − 80 ) 2 + ( y − 210 ) 2 ≥ 10 r - \sqrt{(x-80)^2 + (y-210)^2}\ge10 r(x80)2+(y210)2 10

LINGO求解

data:
v0 = 5;
e = 2.71828;
enddata
s = 2*r * @asin(@sqrt((x1-x2)^2 + (y1-y2)^2)/(2*r));
v = v0 / (1+e^(10-0.1*r^2)); 
min  = @sqrt(x^2 + y^2 - r^2)/5 + @sqrt((x-300)^2 + (y-300)^2 - r^2 )/5 + s/v;
x1^2 + y1^2 + r^2 = x^2 + y^2;
(x2 - 300)^2 + (y2-300)^2 + r^2 = (x-300)^2 + (y-300)^2;
(x1-x)^2 + (y1-y)^2 = r^2;
(x2-x)^2 + (y2-y)^2 =  r^2;
r-@sqrt((x-80)^2+(y-210)^2)>=10;
x1<80;
y2>210;
x>=80 ; x<=230;
y>=60; y<=210;

得出

  Objective value:                              94.22825
  Objective bound:                              94.22825
 Variable           Value        Reduced Cost
                             V0        5.000000            0.000000
                              E        2.718280            0.000000
                              S        11.78994            0.000000
                              R        12.98856            0.000000
                             X1        69.80452            0.000000
                             X2        77.74917            0.000000
                             Y1        211.9779            0.000000
                             Y2        220.1387            0.000000
                              V        4.994814            0.000000
                              X        82.14139            0.000000
                              Y        207.9153            0.000000

将数据带入前两问已经写好的MATLAB中可得图像

x = 82.14139;
y = 207.9153;
r = 12.98856;
theta = 0:pi/20:2*pi; %角度[0,2*pi] 
plot(x+r*cos(theta),y+r*sin(theta),'-');
hold on;
xlim([0,300]);
ylim([0,300]);
line([80,80],[60,210]);
line([80,230],[210,210]);
line([80,230],[60,60]);
line([230,230],[60,210]);

px =  69.80452;
py = 211.9779;
px2 =77.74917;
py2 =220.1387;

line([0,px],[0,py]);
line([px2,300],[py2,300]);

%求距离
pdist([[0,0];[px,py]],'euclidean')
pdist([[300,300];[px2,py2]],'euclidean')

%求弧度
%圆心角
d=sqrt((px-px2)^2+(py-py2)^2);
therta=2*asin(d/(2*r));
%弧长
L=r*therta;
%直线总距离
L2 = pdist([[0,0];[px,py]],'euclidean') + pdist([[300,300];[px2,py2]],'euclidean');

v0 = 5;
vp = v0/(1+(exp(1)^(10-0.1*r*r)));

ans1 = L2/v0 + L/vp;


在这里插入图片描述
MATLAB数据算出来 , 验证成功

94.228254381074020

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

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

相关文章

【C++算法】线性DP详解:数字三角形、最长上升子序列、最长公共子序列、最长公共子串、字符串编辑距离

文章目录 1&#xff09;数字三角形1&#xff1a;顺推2&#xff1a;逆推 2&#xff09;最长上升子序列1&#xff1a;线性DP做法2&#xff1a;二分优化 3&#xff09;最长公共子序列4&#xff09;最长公共子串5&#xff09;字符串编辑距离 1&#xff09;数字三角形 1&#xff1a…

git修改本地提交历史邮箱地址

1、Git&#xff08;Git&#xff09; 2、修改Git本地提交历史中的邮箱地址 使用 git rebase 命令进行交互式重置。 具体步骤如下&#xff1a;&#xff08;https://git-scm.com/docs/git-rebase&#xff09; 1、查看提交历史&#xff1a; 使用 git log 命令列出提交历史&#x…

HCIE考试第三题:业务容器化及割接

文章目录 业务容器化及割接题目和做题步骤如下3.1业务容器化及割接3.1创建CCE集群solo3.2创建NAT网关3.2.1申请EIP3.2.2创建NAT网关3.2.3添加SNAT规则3.3创建节点池3.3.1 创建namespace3.3.2创建节点池3.4 安装命令行工具kubectl3.4.1上传kubectl3.4.2上传kubeconfig配置文件3.…

Linux文件IO(3):使用文件IO进行文件的打开、关闭、读写、定位等相关操作

目录 1. 文件IO的概念 2. 文件描述符概念 3. 函数介绍 3.1 文件IO-open函数 3.2 文件IO-close函数 3.3 文件IO-read函数 3.4 文件IO-write函数 3.5 文件IO-lseek函数 4. 代码练习 4.1 要求 4.2 具体实现代码 4.3 测试结果 5. 总结 1. 文件IO的概念 posix(可移植操作系统接…

【React】路由鉴权

需求 未登录状态下&#xff0c;某些页面不可访问&#xff0c;白名单中的页面可以。未登录状态下&#xff0c;拦截通过修改url直接访问页面。判断是否有权访问某些页面。路由规则中每个页面都需要调用某个接口。 前提 使用的react-router-dom6 &#xff0c;这里只是举例&…

HarmonyOS开发实例:【数字管家app】

一&#xff0e;概述 本应用是基于RK3399开发板&#xff0c;使用OpenHarmony3.1-Release开发的应用。通过OpenHarmony的分布式技术&#xff0c;使多人能够一起画画。 1.应用运行效果图&#xff1a; 2.分布式画板使用示意图 如上图所示&#xff0c;用户1、用户2在各自本地端进行…

AcWing 1111. 字母 解题思路及代码

先贴个题目&#xff1a; 简单的dfs&#xff0c;没啥难点&#xff0c;直接上代码。 #include<iostream> #include<cmath> using namespace std;const int N 30;int r, s; int ans 0; char map[N][N]; bool st[26]; int dx[4] {0, 0, -1, 1}, dy[4] {1, -1, 0, …

stack的简单实现

stack的简单实现 适配器模式stack的实现代码实现 为什么没有迭代器的实现&#xff1f;实际默认容器是deque&#xff08;了解即可&#xff09;dequedeque的优缺点 谢谢观看 适配器模式 stack和我们之前学的list 和 vector 不一样采用的适配器模式 什么叫适配器呢&#xff1f;我…

【前端Vue】Vue3+Pinia小兔鲜电商项目第5篇:整体认识和路由配置,本资源由 收集整理【附代码文档】

Vue3ElementPlusPinia开发小兔鲜电商项目完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;认识Vue3&#xff0c;使用create-vue搭建Vue3项目1. Vue3组合式API体验,2. Vue3更多的优势,1. 认识create-vue,2. 使用create-vue创建项目,1. setup选项的写法和执行…

LinkedHashMap 是如何保证返回的顺序性的?

LinkedHashMap 源码阅读 public class LinkedHashMap<K,V>extends HashMap<K,V>implements Map<K,V>先来看一下 LinkedHashMap 的继承关系&#xff0c;它继承了 HashMap&#xff0c;并且实现了 Map 接口。 LinkedHashMap 底层是 数组 链表 的形式&#xf…

Eland上传bge-base-zh-v1.5向量化模型到ElasticSearch中

最近需要做一些向量检索&#xff0c;试试ES 一、准备 系统&#xff1a;MacOS 14.3.1 ElasticSearch&#xff1a;8.13.2 Kibana&#xff1a;8.13.2 本地单机环境&#xff0c;无集群&#xff0c;也不基于Docker BGE是一个常见的文本转向量的模型&#xff0c;在很多大模型RAG应…

RK3588平台开发系列讲解(GMAC delay开发篇)

目录 RGMII Delayline 获取步骤 代码确认 节点确认 扫描 delayline 窗口 测试扫描出来的中间值 自动扫描 硬件 RGMII Delayline 获取步骤 如果你的项目具有千兆以太网功能&#xff0c;使用的是 RGMII 接口&#xff0c;只要有硬件差别&#xff0c;都需要重新做一次 delay…

今天讲讲MYSQL数据库事务怎么实现的!

目录 什么是数据库事务 Mysql如何保证原子性 Mysql如何保证持久性 MySQL怎么保证隔离性 事务隔离级别 脏读的解决 不可重复读的解决 幻读的解决 MVCC实现 Read View 那么RC、RR级别下的InnoDB快照读有什么不同&#xff1f; 什么是数据库事务 数据库事务是指一组数据…

鸿蒙让我赚到了第一笔桶金!年薪33.6W!

抢人&#xff01;抢人&#xff01;抢人&#xff01; 所谓抢滩鸿蒙&#xff0c;人才先行。鸿蒙系统火力全开后&#xff0c;抢人已成鸿蒙市场的主题词&#xff01; 智联招聘数据显示&#xff0c;春节后首周&#xff0c;鸿蒙相关职位数同比增长163%&#xff0c;是去年同期的2.6倍…

【包编译】库文件安装错位置怎么办

背景&#xff1a; 在建图的工作空间mapping中&#xff0c;编译好了GeographphicLib-2.3之后&#xff0c;对工作空间mapping进行编译&#xff0c;报错&#xff0c;找不到下面这俩。 总结&#xff1a; 原因&#xff1a;因为GeographphicLib的库文件在编译的时候没有放到默认系统…

“人工智能+数字人”,让数字技术赋能多领域智能化管理、数字化服务

AI数字人结合了语音合成、语音识别、语义理解、图像处理、虚拟形象驱动等多项AI核心技术&#xff0c;可以实现导览服务、信息播报、互动交流、业务咨询等智能化功能。 如今&#xff0c;AI数字人逐渐被政务、文旅、展馆展厅、博物馆、数字会议、金融、校园等等领域多元化应用&am…

springboot如何切换内置web服务器?

切换内置web服务器 这是没有引入web依赖的服务 这是引入web依赖的服务 由此可知默认是tomcat服务器 那么如何切换内置服务器 只要有对应服务器的坐标即可自动切换&#xff0c;先排除tomcat再引入依赖&#xff0c;比如切换成jetty服务器 <dependency><groupId>org…

SQL Serve---查询

概要 1、order by子句 —默认asc&#xff08;升序&#xff09;、desc&#xff08;降序&#xff09; 2、distinct关键字 3、group by子句 4、聚合函数 —max()、min()、sum()、avg()、count() 5、having子句 6、compute子句 英文关键字 order by 排序 asc…

【SpringBoot整合系列】SpringBoot整合FastDFS(二)

目录 SpringBoot整合FastDFSJava客户端/依赖常用api接口解释1.uploadFile参数返回值 2.uploadSlaveFile参数返回值 3.getMetadata参数返回值 4.overwriteMetadata参数&#xff1a;返回值&#xff1a;无 5.mergeMetadata参数&#xff1a;返回值&#xff1a;无 6.queryFileInfo参…

linux重定向符号

将ls命令执行结果重定向到a文件中 将错误ls命令执行结果重定向到a文件中&#xff08;这里用到前面的标准错误输出重定向&#xff09;