位置: IT常识 - 正文

python机器人编程——差速机器人小车的控制,控制模型、轨迹跟踪,轨迹规划、自动泊车(上)(python机器人编程控制)

编辑:rootadmin
python机器人编程——差速机器人小车的控制,控制模型、轨迹跟踪,轨迹规划、自动泊车(上) 目录一、前言二、差速小车机器人的运动分析三、正向运动控制模型推导3.1问题描述3.2符号定义3.3算式推导Step1 寻找数量关系,求出圆周半径,角度变化Step2 获取相对坐标Step3 坐标变换,获取大地坐标3.4 python编程一、前言

推荐整理分享python机器人编程——差速机器人小车的控制,控制模型、轨迹跟踪,轨迹规划、自动泊车(上)(python机器人编程控制),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python机器人编程好学吗,python 机器人编程,python机器人编程教程题目,python机器人编程入门,python机器人编程控制,python机器人编程案例,python机器人编程软件,python机器人编程入门,内容如对您有帮助,希望把文章链接给更多的朋友!

本篇我们依然试着用一些浅显的数学知识,来研究和实现一下常用机器人小车(如AGV)的控制,这里的小车我们先选用二轮驱动的差速小车,即通过两个驱动轮的转速控制实现所有想要的运动。我们会首先对这类小车的运动原理进行一些分析,并通过分析得出的数学步骤,用python去实现机器人小车的正向控制算法、反向控制算法(或者轨迹跟踪),并在此基础上,去尝试实现一下固定场景下,如仓储搬运、工厂转运等的机器人小车的轨迹规划、自动泊车(通常是去充电),并将首先在vrep仿真环境验证,验证完后,可以自己搭建实物去实现。

二、差速小车机器人的运动分析

如上图,我们研究的对象直观上是这样一个车,通过两个驱动轮电机控制去实现机器人小车的所有运动,当然实际中会加装一些摄像头、雷达等传感设备。 那么这样的小车我们分析一下,主要有这样的一些状态: 直观的看,小车可以有以上9种状态,前进(左前、右前、正前),倒退(左退,右退、正后退)、原地(左旋,右旋,停止),然后分别是通过左右轮的不同转速和旋转的方向的组合去实现这样的状态的。 其中这些状态,转向的实现是控制的重点。这里有一个前提是,假设在某个小间隔dt内,左右轮速度恒定,这样小车就在做圆周运动了。我们可以得出,当左轮和右轮产生速度差(线速度或转速)时候,小车就会转弯,当左轮的线速度值(不考虑方向)大于右轮时,小车转弯的半径、圆心在相对小车的右侧,反之,在小车的左侧,而且圆心始终在车轴的延长线上。 接下来来进一步研究:

三、正向运动控制模型推导3.1问题描述

本节要解决的问题是,已知此时(t),小车的位置(x,y)和方向(小车YY轴与x轴的夹角),在某个小时间间隔(dt)内,给定两车的转速(sl、sr),在下个时刻(t+dt),小车的位置会在哪里?

3.2符号定义

如上图,首先来定义一下坐标系:我们定义大地坐标系为X-Y坐标系,用于定位小车中心的位置和方向信息,小车自身的坐标系为xx-yy坐标系,用于定位下一时刻小车的位置信息。本篇所用到的符号系统定义如下: 符号说明(不区分大小写): Rw:轮子的半径,已知 L:轮子距离,已知 ω :车子中心的角速度,逆时针为正 Vc:车子中心的线速度, Vl:车子左轮的线速度, Sl: 左轮的转速,则:vl=sl2ΠRw Vr:车子右轮的线速度, Sr:右轮转速,则:vr=sr2ΠRw R:t到t+dt时刻内,车子的圆周运动半径 θt:当前时刻的小车朝向, θ(t+dt):dt后的小车朝向, dθ:dt内的转角 α:下一时刻位置点到小车原点连线与小车xx轴的夹角

3.3算式推导

基于上面的分析,我们首先来推导一下,小车圆周运动的圆心在小车右侧的情况(如上图,条件是|Vl|>|Vr|),步骤如下:

Step1 寻找数量关系,求出圆周半径,角度变化

假设t到t+dt时刻,小车的左轮速度为vl,右轮为vr,小车在以半径为R的圆周运动,当两个轮子产生速度差时,为曲线运动,两个轮子速度越接近,越趋向直线运动,左轮和右轮在车轴的延长线上J为圆心,车子的其角速度为ω ,因为两个轮子必须保持位置固定,否则就变形了: (1)当|Vl|>|Vr|,圆运动圆心在车右边(如上图): ω=vc/R=vl/(R+L/2)=vr/(R-L/2) 可得: Vc=ωR Vl=ω(R+L/2) Vr=ω*(R-L/2) 进而可得: Vc=(vl+vr)/2 (1) ω=(Vl-vr)/L (2) R=vc/ω=L/2*(vl+vr)/(Vl-vr), dθ=ω*Dt 当vr+vl>0,即前右拐,小车方向角减小: θ(t+dt)=θt-|dθ| 当vr+vl<0,即右退,小车方向角增大: θ(t+dt)=θt+|dθ|

python机器人编程——差速机器人小车的控制,控制模型、轨迹跟踪,轨迹规划、自动泊车(上)(python机器人编程控制)

(2)当|Vl|<|Vr|,圆运动圆心在车左边(如上图),此时逆时针圆周运动为正: ω=vc/R=vl/(R-L/2)=vr/(R+L/2) 可得: Vc=ωR Vl=ω(R-L/2) Vr=ω*(R+L/2) 进而可得: Vc=(vl+vr)/2 (1) ω=(Vr-vl)/L (2) R=vc/ω=L/2*(vl+vr)/(vr-vl), dθ=ω*dt 当vr+vl>0,即前左拐,使小车方向角增大: θ(t+dt)=θt+|dθ| 当vr+vl<0,即左退,使小车方向角减小: θ(t+dt)=θt-|dθ|

Step2 获取相对坐标

(1)当|Vl|>|Vr| 如图所示,t+dt时刻的状态B,相对于t时刻的小车坐标系上的位置(dxx,dyy),我们可以根据三角形(ABJ)性质及坐标偏移很容易得出: |AB|=|JA|2+|JB|2-2cos(θ)|JA||JB|=R*sqrt(2(1-cos(θ))) 当vr+vl>0,即前右拐,B状态点在第一象限: α =(pi-θ)/2 等腰三角形可得 dxx=|AB|*cos(α) dyy=|AB|*sin(α) 当vr+vl<0,即右退,B状态点在第四象限: α=(θ-pi)/2 dxx=|AB|*cos(pi/2+dθ)=|AB|cos(α) dyy=|AB|sin(pi/2+(pi-θ)/2)=|AB|sin(α) (2)当|Vl|<|Vr| |AB|=|JA|2+|JB|2-2cos(θ)|JA||JB|=Rsqrt(2(1-cos(θ))) 当vr+vl>0,即前右拐,B状态点在第二象限: α =pi-(pi-θ)/2=(pi+θ)/2 dxx=|AB|*cos(α) dyy=|AB|*sin(α) 当vr+vl<0,即右退,B状态点在第三象限: α=-(pi+θ)/2 dxx=|AB|cos(α) dyy=|AB|sin(α)

Step3 坐标变换,获取大地坐标

上一步计算得到了t+dt时刻状态B的相对坐标(dxx,dyy) 而我们目标是要求状态B的世界坐标,这里我们引入旋转和平移变换的知识: 一个坐标系上一点(x,y),经过坐标系原点逆时针旋转θ后得到的新坐标上的坐标为(x*,y*)则:

经过坐标系原点顺时针旋转θ后得到的新坐标上的坐标为(x*,y*)则:

坐标平移也有类似矩阵形式:

求解的问题,我们可以通过先旋转变化到与世界坐标系平行,然后再平移变换,就可得到B状态在世界坐标系的坐标(x_next,y_next)了: 至此小车拐弯的运动正向计算模型就完成了。 此外,小车原地旋转,正向前进后退等,很容易表达,这里就不再赘述。接卸来就可以撸python代码实现了。

3.4 python编程

以下为实现小车右转向的核心代码:

def NextState(xt, yt, theta, sl, sr,l=0.5,dt=1,Rw=0.4): """ xt,yt: 当前小车机器人位置坐标 theta: 当前小车机器人方位角,弧度表示 vl:当前dt,左轮转速值,当为负值为反转 vr:当前dt,右轮转速值,当为负值为反转 dt:当前速度持续时间 l:两个轮子的宽度 Rw:轮子半径 return: 返回t+dt时刻的小车位置坐标、朝向 """ #小车存在差速的情况, vl=sl*2*math.pi*Rw vr=sr*2*math.pi*Rw print("左右速度:",vl,vr) if vl!=vr: if np.abs(vl)>np.abs(vr): #圆心在右侧情况,圆周运动 # 小车的线速度 vc=(vl+vr)/2 #小车的角速度 omiga=(vl-vr)/l print("旋转角度:",omiga) #小车的圆周运动半径 R=vc/omiga print("圆半径:",R) #小车的旋转角增量 theta_dt=omiga*dt res,line=sovle_lineBy(R,R,theta_dt) if res: #小车下一时刻的方向角 if vr+vl>0:#小车右前拐,方向角变小 df=-1 alpha=(math.pi-theta_dt)/2 if vr+vl<0:#小车右后拐,方向角变大 df=1 alpha=(theta_dt-math.pi)/2 print("alpha:",alpha) dxx=line*math.cos(alpha) dyy=line*math.sin(alpha) theta_next=theta+np.abs(theta_dt)*df #平移矩阵 T=np.array([[1,0,xt], [0,1,yt], [0,0,1]]) #旋转矩阵 Tangle=math.pi/2-theta R=np.array([[math.cos(Tangle),math.sin(Tangle),0], [-math.sin(Tangle),math.cos(Tangle),0], [0,0,1]]) XY_t=np.array([[dxx], [dyy], [1]]) xy_next=np.dot(T, np.dot(R,XY_t)) x_next=xy_next[0][0] y_next=xy_next[1][0] print(xy_next) print("dxx,dyy",dxx,dyy) else: print("sovle_lineBy failure") return False,None,None,None

发现,改变左右轮速度,可以玩出无限花样的运动轨迹:

本节完整源码已经上传点击链接

本篇就到此了,接下来我们来研究以下这个小车的逆向控制,叫它指那到哪。

本文链接地址:https://www.jiuchutong.com/zhishi/299879.html 转载请保留说明!

上一篇:VueRouter的两种模式(vuerouter模块化)

下一篇:自然语言处理(NLP)与知识图谱(KG)的发展史(自然语言处理算法)

  • win10企业版影响游戏吗(win10企业版会不会影响游戏性能)

    win10企业版影响游戏吗(win10企业版会不会影响游戏性能)

  • 中国移动wifi密码忘记了(中国移动WiFi密码忘记了在路由器上有吗)

    中国移动wifi密码忘记了(中国移动WiFi密码忘记了在路由器上有吗)

  • 苹果se来电闪光灯怎么设置(苹果se来电闪光怎么关闭)

    苹果se来电闪光灯怎么设置(苹果se来电闪光怎么关闭)

  • 钉钉直播能看到学生吗(钉钉直播下载)

    钉钉直播能看到学生吗(钉钉直播下载)

  • vivo突然掉电很快(vivo掉电量快怎么回事)

    vivo突然掉电很快(vivo掉电量快怎么回事)

  • 开机检测不到硬盘原因(开机检测不到硬盘重启又好了)

    开机检测不到硬盘原因(开机检测不到硬盘重启又好了)

  • 屏幕摔了没碎但是黑屏(屏幕摔了没碎但是黑屏修多少钱)

    屏幕摔了没碎但是黑屏(屏幕摔了没碎但是黑屏修多少钱)

  • 2020iphonese2双卡还是单卡(iphonese2 双卡双待)

    2020iphonese2双卡还是单卡(iphonese2 双卡双待)

  • 行距30磅怎么设置(行距30磅怎么设置wps)

    行距30磅怎么设置(行距30磅怎么设置wps)

  • 苹果6s充电器是几安(苹果6s充电器是1a还是2a)

    苹果6s充电器是几安(苹果6s充电器是1a还是2a)

  • 怎么知道对方是拉黑还是删除(怎么知道对方是不是二婚)

    怎么知道对方是拉黑还是删除(怎么知道对方是不是二婚)

  • 小米手表支持华为手机吗(小米手表支持华为手机的超级终端吗)

    小米手表支持华为手机吗(小米手表支持华为手机的超级终端吗)

  • 千牛账号是淘宝账号吗(千牛账号淘宝账号怎么切换)

    千牛账号是淘宝账号吗(千牛账号淘宝账号怎么切换)

  • 手机屏幕一会亮一会暗怎么回事(手机屏幕一会亮一会灭怎么回事)

    手机屏幕一会亮一会暗怎么回事(手机屏幕一会亮一会灭怎么回事)

  • 怎么看淘宝号是哪一年注册的(怎么看淘宝号是不是被盾了)

    怎么看淘宝号是哪一年注册的(怎么看淘宝号是不是被盾了)

  • 夫妻微信视频画面能被监控吗(夫妻亲密视频在微信上看得到吗)

    夫妻微信视频画面能被监控吗(夫妻亲密视频在微信上看得到吗)

  • 华为gt3什么时候出

    华为gt3什么时候出

  • 苹果怎么取消隔空播放(苹果怎么取消隔空播放屏幕)

    苹果怎么取消隔空播放(苹果怎么取消隔空播放屏幕)

  • x27没有人脸识别吗(x27没有人脸识别功能)

    x27没有人脸识别吗(x27没有人脸识别功能)

  • 苹果手机超200m怎么下载(苹果手机超200m b下载不了软件怎么回事)

    苹果手机超200m怎么下载(苹果手机超200m b下载不了软件怎么回事)

  • 5g时代的到来对我们的影响(5g时代的到来对中国的意义)

    5g时代的到来对我们的影响(5g时代的到来对中国的意义)

  • 百度小程序如何开发(百度小程序如何打开)

    百度小程序如何开发(百度小程序如何打开)

  • 苹果在保修期内维修免费么(苹果在保修期内可以换电池吗)

    苹果在保修期内维修免费么(苹果在保修期内可以换电池吗)

  • 安全的无线连接的秘密_当心无线的弱点(安全的无线连接软件)

    安全的无线连接的秘密_当心无线的弱点(安全的无线连接软件)

  • sentstrt.exe - sentstrt进程是什么文件  有什么用

    sentstrt.exe - sentstrt进程是什么文件 有什么用

  • 用idea创建vue项目(idea可以编写vue吗)

    用idea创建vue项目(idea可以编写vue吗)

  • 什么,BOM指的是物料清单?(bom也称为)

    什么,BOM指的是物料清单?(bom也称为)

  • 投资者从其投资企业借款
  • 报废汽车增值税税率
  • 公司老板有钱吗
  • 出差误餐补助是谁承担
  • 三证合一后个体户注销流程
  • 去年缴纳印花税忘记做账了怎么办呢
  • 增值税应税销售额包括哪些
  • 加油发票样式图
  • 工资中事假扣款执行依据
  • 附加税减半征收政策从什么时候开始
  • 一般增值税纳税人和小规模纳税人
  • 外购货物应抵扣的进项税额税率
  • 分公司与总公司承担责任的法律规定
  • 未交税金期末数
  • 物业公司代收供暖费,可以开发票吗
  • 小规模纳税人没有成本票怎么做账
  • 物业管理公司如何纳税
  • 业务招待费中的营业收入包括哪些
  • 销售已作进项税转出的固定资产怎样缴税?
  • 境外受控公司
  • 对公账户发工资的利弊
  • 小型微利企业普惠性企业所得税减免政策解读
  • 办公室租金可以计入办公费吗
  • 勒索病毒文件怎么恢复
  • 应收账款贷方余额怎么在资产负债表中填列
  • 增值税专用发票有几联?
  • 贸易公司销售
  • 简单才能极致
  • win7系统中怎样没有智能卡这一选项
  • 股东变更股权转让未分配利益
  • PHP:preg_quote()的用法_PCRE正则函数
  • PHP:stream_context_get_options()的用法_Stream函数
  • 销售使用过的固定资产怎么填申报表
  • 库存现金盘亏会计分录原因待查
  • thinkphp钩子场景
  • 发票已认证当月未申报怎么办
  • 给php开发者的编程代码
  • 超级本轻薄本
  • 税务安全证书不成功什么意思
  • 免税农产品进项转出计算
  • 微信小程序父子通信
  • 这可能是最好的144平米小平层户型
  • .size()
  • 红字申请表开错了怎么办
  • 研发入库的产品销售出库怎样做账
  • 对附属单位补助的资金性质是财政预算资金
  • 应收账款的差额计入哪里
  • phpcms不支持缩略图和水印怎么办
  • 环保税计税依据怎么算
  • 计提本月应交增值税会计科目
  • 受托代销商品的代销方式有哪两种
  • 资本公积占比多少合适
  • 免税申报表里的免税销售额是不含税
  • 增值税附加税的税收优惠政策
  • 临时工工资应计入什么科目
  • 丁字账户例题及解析
  • 商标权的入账价值有哪些
  • 在建工程进项税额抵扣最新通知
  • 以银行存款支付固定资产修理费
  • 支付给劳务人员劳务费需缴纳印花
  • 关联公司往来款怎么做账
  • 购车的费用包括哪些费用
  • 应付职工薪酬属不属于流动负债
  • 公司不注销有什么影响吗
  • mysql修改允许远程连接
  • mysql5.6解压版安装教程
  • 苹果电脑dock栏是什么意思
  • linux计划任务怎么写
  • linux的grep命令详解
  • centos云服务器
  • 电脑windows8怎么样
  • 比较漂亮的一个字
  • shell备份文件脚本
  • 简单实现异步编码的方法
  • javascript基础教程教材答案
  • jqueryw3c
  • 税务一证通进入哪个网站
  • 江苏宿迁个体户那个园区好
  • 请问到税务局办里退税都需要什么手续
  • 水利基金按什么计提
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设