SLAM从入门到精通(计算点到直线的距离)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        大家一开始看到这个题目的时候,也许比较吃惊。为什么会有这样的题目?但是做过slam的同学,应该就比较熟悉和了解了。我们都知道,大部分机器人运动的时候,都是按照特定的轨迹进行移动的。这个时候,有一件非常重要的事情需要去做,那就是实时计算机器人和运动直线之间的距离。一方面,可以验证我们的slam效果好不好,另外一方面也可以在发生意外的时候,提前让机器人停止住,这样也能避免发生意外。

1、已知条件

        假设直线的起点和终点分别是(x1、y1)、(x2、y2),计算的点是(x0、y0)

2、首先计算直线的方程

k1=(y2-y1)/(x2-x1)
b1=y1-k1*x1

3、计算垂直于当前直线的法线

k0=-1/k1
b0=y0-k0*x0

        这里k0=-1/k1是关键,两条垂直相交的直线,斜率乘积为-1。

4、求解相交的直线点

y=k1*x+b1
y=k0*x+b0x=(b1-b0)/(k0-k1)
y=k1*x+b1

5、求解距离

distance=sqrt((x0-x)^2 + (y0-y)^2)

6、其他要注意的事项

        计算的过程当中,需要提前判断下x1和x0的差值,如果两者比较相近,可以直接判断直线角度为90度,或者是pi/2。另外,除了计算点到直线的距离之外,一般还需要对机器人的动态环境和静态环境进行判断。

        所谓的动态环境,就是机器人在行走的时候,对于突发的外部干扰,需要立即做出反应。这种干扰主要就是避障,包括但不限于人、车、门、物等等。而静态环境则比较好理解,就是slam建图的时候就已经存在于地图之上的障碍物,这部分也是不能发生摩擦或者碰撞的。

        安全检测是机器人行走的重要环节,这部分一定要慎之又慎。机器人参与到工业生产当中,本身是为了降低成本、提高效率之用,但这一切如果没有以安全作为前提,那么所有的工作也就失去了意义。所以今天的这篇文章看上去是求解一道几何计算题目,实际上是告诉大家如何在生产中运用数学知识实现机器人的正常行走和运行。

7、实际部署前仿真的必要性

        每一个机器人都有自己的外形结构,也有自己的底盘结构,所以在机器人部署之前,一定要借助于仿真工具,或者是上位机工具,让机器人在将要行走的道路上过一遍。这个仿真的过程是十分必要的。很多时候,研发人员没有办法亲自到现场,那么现场工程师在部署环境或者熟悉现场之前,就需要通过cad、仿真软件看一下机器人在规划的道路上运行是否存在安全隐患。

        一般来说,如果仿真本身都问题连连,那么实际测试肯定会有问题。但是如果仿真没有问题了,那么这个时候就应该再把机器人拉到现场,每条路线重新走一遍,确认下是不是真的没问题。这才是slam项目真正用起来的关键所在。

附录

        最后给出完整的python代码

import os
import sys
import re
import mathdef main():x0 = 0.0y0 = 0.0 x1 = 0.0y1 = 1.0x2 = 2.0y2 = 0.0 k1 = (y2-y1)/(x2-x1)b1 = y1-k1*x1k0 = (-1.0)/k1b0 = y0-k0*x0x = (b1-b0)/(k0-k1)y = y0-k0*xd = math.sqrt((x0-x)*(x0-x) + (y0-y)*(y0-y)) print(d)if __name__ == '__main__':main()

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

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

相关文章

Echats-自定义图表1

效果图&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"zh-cmn-Hans"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>…

day49

省市联动jQuery快速入门 jQuery介绍 1.jQuery是一个轻量级、兼容多浏览器的JavaScript库 2.jQuery使用户能够更方便地处理HTML Document、Events、实现动画效果、方便地进行Ajax交互&#xff0c;能够极大地简化JavaScript编程。它的宗旨就是&#xff1a;“Write less, do mor…

uniapp生命周期

uniapp生命周期包括应用生命周期、页面生命周期和组件生命周期&#xff1b; 1、应用生命周期 app.vue/uvue是uni-app的朱组件。所有页面都是在app.vue下进行切换&#xff0c;是应用入口文件。但app.vue本身不是页面&#xff0c;这里补鞥编写视图元素&#xff0c;也就没有。 这…

vue回到顶部组件

组件代码 <!--返回顶部组件--> <template><transition :name"transitionName"><divv-show"visible":style"customStyle"class"back-to-ceiling"click"backToTop"><svgwidth"16"heigh…

vue生命周期

1、vue声明周期及生命周期函数 vue声明周期 每一个vue实例从创建到销毁的过程&#xff0c;就是这个vue实例的生命周期。在这个过程中&#xff0c;他经历了从开始创建、初始化数据、编译模板、挂载Dom、渲染→更新→渲染、卸载等一系列过程&#xff1b; 生命周期&#xff1a;…

postgresql数组重叠(有共同元素)查询

直接上最终代码&#xff1a; select distinct id from a where string_to_array(in_area,,) && (select ARRAY_AGG( code) from areas where code like 11% or code 100000)::TEXT[] pg语法&#xff1a; 表 9.48显示了可用于数组类型的运算符。 表 9.48。数组运算符…

大数据之LibrA数据库系统告警处理(ALM-12012 NTP服务异常)

告警解释 当节点NTP服务无法与主OMS节点NTP服务正常同步时间时产生该告警。 当节点NTP服务与主OMS节点NTP服务正常同步时间时恢复该告警。 告警属性 告警ID 告警级别 可自动清除 12012 严重 是 告警参数 参数名称 参数含义 ServiceName 产生告警的服务名称。 Rol…

分布式多主关系数据库的底线业务优势

当今的应用程序&#xff08;包括企业应用程序&#xff09;需要始终开启且始终可用&#xff0c;并且通常必须为全球用户提供服务&#xff0c;这些用户无论身在何处都希望获得几乎即时的响应时间。 应对这些挑战不仅仅意味着让用户更满意&#xff1a;每个能够解决低延迟和超高可…

唇形驱动媲美头部厂商,青否数字人SaaS系统6.0重磅发布!

青否数字人SaaS系统6.0重磅发布&#xff01;唇形驱动效果及清晰度媲美硅基等头部厂商&#xff0c;同时优化数字人短视频模块。 唇形驱动媲美头部 青否数字人SaaS系统6.0版本重点优化了唇形驱动&#xff0c;AI技术已经实现与真人形象的1:1克隆&#xff0c;唇形、牙齿和舌头高清…

当科技遇上神器:用Streamlit定制AI可视化问答界面

Streamlit是一个开源的Python库&#xff0c;利用Streamlit可以快速构建机器学习应用的用户界面。 本文主要探讨如何使用Streamlit构建大模型外部知识检索的AI问答可视化界面。 我们先构建了外部知识检索接口&#xff0c;然后让大模型根据检索返回的结果作为上下文来回答问题。…

【AUTOSAR】【以太网】DoIp

AUTOSAR专栏——总目录_嵌入式知行合一的博客-CSDN博客文章浏览阅读217次。本文主要汇总该专栏文章,以方便各位读者阅读。https://xianfan.blog.csdn.net/article/details/132072415 目录 一、概述 二、功能描述 2.1 Do

DNS 域名解析协议

作用 将域名转化位IP地址 域名 用’ . ’ 隔开的字符串&#xff0c;如&#xff1a;www.badu.com,就是为了赋予IP特殊含义。 一级域名 .com &#xff1a;公用 .cn&#xff1a;中国 .gov&#xff1a;政府 .us&#xff1a;美国 .org&#xff1a;组织 .net&#xff1a;网站 对应一级…

HTML脚本、字符实体、URL

HTML脚本&#xff1a; JavaScript 使 HTML 页面具有更强的动态和交互性。 <script> 标签用于定义客户端脚本&#xff0c;比如 JavaScript。<script> 元素既可包含脚本语句&#xff0c;也可通过 src 属性指向外部脚本文件。 JavaScript 最常用于图片操作、表单验…

Doris常用语句

SWITCH mysql_report; SWITCH mysql_floweda; SWITCH mysql_base; SWITCH internal;select * from mysql_floweda.flow_eda.eda_flow;select * from mysql_report.cz_report.etl_flow; select * from mysql_report.cz_report.etl_flow_log;#外部数据物化视图 create materi…

Vue路由导航(replace、push、forward、back、go)

Vue路由导航&#xff08;replace、push、forward、back、go&#xff09; 先了解栈结构&#xff0c;再学习以下内容 栈的数据结构&#xff1a;先进后出&#xff0c;后进先出。原理&#xff1a;push将元素压入栈内&#xff0c;pop将元素弹出&#xff0c;栈有分别有栈底指针和栈顶…

C++11 initializer_list 轻量级初始化列表的使用场景(让自定义类可以用初始化列表的形式来实例化对象)

initializer_list 是 C11 中的一个特性&#xff0c;它允许你使用花括号 {} 中的值列表来初始化容器或数组。通常用于初始化标准库容器&#xff0c;比如 std::vector、std::set、std::map 以及数组。 场景一&#xff1a;用初始化列表初始化容器 std::vector<int> arr {…

Java中Deque栈对象的增删查(所有方法详解)

1、Deque栈的增删查方法总结 2、方法增删查 栈顶添加&#xff1a;push、offFirst栈尾添加&#xff1a;add、offer、offerLast栈顶删除&#xff1a;remove、pop、poll、pollFirst栈尾删除&#xff1a;pollLast栈顶查看&#xff1a;peek、peekFirst栈尾查看&#xff1a;peekLast…

搭载基于RK3229的Android5.1修改开机默认桌面Launcher

1、找到ActivityManagerService.java 在..\rk3229_5.1_box\frameworks\base\services\core\java\com\android\server\am目录找到ActivityManagerService.java文件。在文件里找到startHomeActivityLocked函数里的setDefaultLauncher。 boolean startHomeActivityLocked(int use…

WebService客户端几种实现方式

客户端几种实现方式&#xff08;转载&#xff09; Demo-HttpClient public static void main(String[] args) throws Exception {//soap服务地址String url "http://10.104.168.38:6906/sip/services/XJSSServices?wsdl";StringBuilder soapBuilder new StringBu…

软件设计模式原则(一)迪米特法则

开一个小专题——详细总结一下软件设计模式原则&#xff0c;这部分在《软计》和《java设计模式》中算是很重要的知识点&#xff0c;值得展开详细讲解一下~首先介绍的是【迪米特法则】 一.定义 迪米特法则又称为最少知识原则&#xff0c;其定义为&#xff1a;一个软件实体应当尽…