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

news2024/11/27 10:25:30

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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+b0

x=(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 math

def main():
	x0 = 0.0
	y0 = 0.0 
	x1 = 0.0
	y1 = 1.0
	x2 = 2.0
	y2 = 0.0 

	k1 = (y2-y1)/(x2-x1)
	b1 = y1-k1*x1
	k0 = (-1.0)/k1
	b0 = y0-k0*x0
	x = (b1-b0)/(k0-k1)
	y = y0-k0*x
	d = math.sqrt((x0-x)*(x0-x) + (y0-y)*(y0-y)) 
	print(d)

if __name__ == '__main__':
	main()

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

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

相关文章

Mysql库操作

一:库的操作 1:创建数据库 mysql> create database test1; Query OK, 1 row affected (0.00 sec)mysql> create database test2 charsetutf8;create database test2 character utf8;Query OK, 1 row affected (0.00 sec)mysql> create databa…

Linux学习笔记之二(环境变量)

Linux learning note 1、环境变量1.1、修好PATH环境变量 1、环境变量 环境变量(environment variables)即系统运行的一些环境参数。主要的环境变量有以下这些: PATH:决定了系统查找可执行文件的目录范围。HOME:指定当前用户的主目录路径。U…

【C++心愿便利店】No.11---C++之string语法指南

文章目录 前言一、 为什么学习string类二、标准库中的string类 前言 👧个人主页:小沈YO. 😚小编介绍:欢迎来到我的乱七八糟小星球🌝 📋专栏:C 心愿便利店 🔑本章内容:str…

4.网络之TCP

TCP协议(传输层) 文章目录 TCP协议(传输层)1. TCP报文格式2. TCP相关机制2.1 确认应答机制2.2 超时重传机制2.3 连接管理机制(重点)2.3.1 三次握手2.3.2 四次挥手 2.4 滑动窗口机制2.5 流量控制机制2.6 拥塞控制机制2.7 延迟应答机制2.8 捎带应答机制 3.…

c++ | 字符串与指针的恩断情仇

我想&#xff0c;c/c中难的不是指针&#xff0c;而是其中的变化&#xff0c;尤其是思维的转变。很多东西 就是容易掉进陷阱。好在&#xff0c;你我都是善于思考的码农&#xff01; 大致情况是这样的&#xff0c;底层<–>c语言<–>c<–>应用 而数据的传输的最…

攻击域控丝滑小连招~

点击星标&#xff0c;即时接收最新推文 如果已经获得本地管理员账号或是域管理员账号&#xff0c;那么下一个目标通常是域控制器&#xff0c;对于渗透测试人员来说&#xff0c;光荣与荣耀的那一刻就是成功从域控制器提取所有的哈希值。但即使是拥有管理员权限&#xff0c;也无法…

windows10编译高版本openssl

参考文章 参考文章中的windows编译为低版本&#xff0c;在高版本的openssl编译中已经没有&#xff1a;“ms\do_ms.bat”这个脚本了&#xff0c;现记录下编译过程 1、准备工作 安装ActivePerl&#xff0c;安装后会自动写入环境变量&#xff0c;参照参考文章测试安装成功与否&a…

封装element-table合计行Hooks方法

背景: 在我们常做的后台管理系统中&#xff0c;经常的会遇到关于表格合计行的计算以及显示&#xff0c;如下图&#xff0c;我们采用的是element框架这一套 封装&#xff1a; 由于考虑到该需求是最常见的&#xff0c;每个中心可能都会涉及到&#xff0c;我们封装公共方法&#…

解决方案中word中分节符的使用

解决方案中必不可少的两个“符号”&#xff0c;分页符&#xff0c;分节符 有了分节符&#xff0c;可以为不同节设置不同的页眉页脚、分栏格式、纸张大小及方向、页边距、不同节间采用不同的页码序号&#xff0c;常用的功能主要是把word下一次的由原来的“竖版”&#xff0c;变…

pygame游戏编程库:初始化和显示(01/8)

一、说明 pygame是一个Python库&#xff0c;用于编写2D游戏和多媒体应用程序。它提供了一整套工具&#xff0c;可以帮助开发者创建图像、声音、动画等内容&#xff0c;并与用户进行交互。pygame还可以用于创建交互式教育软件、演示文稿、音乐应用程序等。它基于SDL库&#xff0…

线程锁、进程锁、分布式锁_Linux网络编程

线程锁 1、互斥锁&#xff1a;互斥锁首先是一个睡眠锁&#xff0c;如下图当线程C没有获取到资源时&#xff0c;线程锁会结束线程B切换到线程C。 2、自旋锁&#xff1a;而自旋锁在未获取到资源时线程C循环等待&#xff0c;尝试获取锁&#xff0c;一直占用核心。 3、读写锁:若一…

css基础之实现轮播图

原理介绍 图片轮播的原理是通过控制显示和隐藏不同的图片来实现图像的切换&#xff0c;从而创建连续播放的效果。用到的知识点有定位和定时器。 实现步骤&#xff1a; HTML 结构&#xff1a; 首先&#xff0c;需要在HTML中创建一个包含轮播图片的容器&#xff0c;通常使用 &l…

采用springboot、avue框架开发的:大型医院绩效考核系统成品源码

医院绩效考核系统全套源码&#xff08;演示自主版权医院应用案例&#xff09; 医院绩效考核系统&#xff0c;建立以医院发展目标为导向&#xff0c;以医务人员劳动价值、工作量为评价基础&#xff0c;统筹效率、质量、成本的绩效管理和绩效工资分配体系。系统支持RBRVS&#xf…

0003Java安卓程序设计-springboot基于Android的学习生活交流APP

文章目录 **摘** **要**目 录系统设计开发环境 编程技术交流、源码分享、模板分享、网课教程 &#x1f427;裙&#xff1a;776871563 摘 要 网络的广泛应用给生活带来了十分的便利。所以把学习生活交流管理与现在网络相结合&#xff0c;利用java技术建设学习生活交流APP&…

python机器学习——实现Kmeans算法

K-means算法 关于K-means算法&#xff0c;它是一种无监督学习算法&#xff0c;用于将数据集分成预定数量的簇&#xff08;clusters&#xff09;。 K-means算法比较适合用来做聚类分析&#xff0c;而不是用来预测&#xff0c;换句话来说&#xff0c;K-means算法不擅长预测 K-…

基于SSM的搬家预约系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

数据结构之堆的实现(图解➕源代码)

一、堆的定义 首先明确堆是一种特殊的完全二叉树&#xff0c;分为大根堆和小根堆&#xff0c;接下来我们就分别介绍一下这两种不同的堆。 1.1 大根堆&#xff08;简称&#xff1a;大堆&#xff09; 在大堆里面&#xff1a;父节点的值 ≥ 孩子节点的值 我们的兄弟节点没有限制&…

“利用Lazada API揭秘电商数据:一键获取海量商品评论列表!“

要使用Lazada API获取Lazada商品评论列表&#xff0c;您需要先注册Lazada开发者账号并获取授权码和密钥。然后&#xff0c;通过调用Lazada API的item_comments接口&#xff0c;传入商品ID和国家域名后缀&#xff0c;即可获取到商品的评论列表。 以下是使用Lazada API获取Lazad…

4+1视图的理解和使用

软件架构 原文&#xff1a; Architectural Blueprints—The “41” View Model of Software Architecture 老外的原文还是很值得一看的&#xff0c;互联网上的很多文章理解得都比较粗浅 什么是软件架构&#xff1f;面试的时候很多面试官可能会问你最近在做的项目的架构。其实这…

uniapp原生插件之安卓TCP原生插件

插件介绍 安卓TCP插件支持自定义心跳数据&#xff0c;自定义心跳时间&#xff0c;断开连接时返回自定义数据等 插件地址 安卓TCP原生插件 - DCloud 插件市场 超级福利 uniapp 插件购买超级福利 详细使用文档 uniapp 安卓TCP原生插件使用文档 用法 在需要使用插件…