【激光雷达码盘偏摆角的真假点映射关系】

激光雷达码盘偏摆角的真假点映射关系

  • 一、概要
  • 二、完架构流程
  • 三、技术细节
  • 四、完整代码

一、概要

  本代码主要计算激光雷达码盘偏摆角(也可以理解为雷达的零位角)导致的实际slam建图距离的偏差,只取了第一个象限作为分析目标。最终得出的结论是:如图1、2,在15米处,码盘偏摆角或者雷达的零位角偏差为0.28°,对点云图不产生畸变(即直线就是直线,不会出现弯曲等现象),只会出现点云图旋转的情况,旋转角度即为零位角偏差。仅以此文记录当时的分析过程
在这里插入图片描述

图1 实际点云偏差散点图

在这里插入图片描述

图2 点云偏转示意图

二、完架构流程

  这段代码的主要流程可以分为以下几个部分:

  1. 初始化变量:首先,初始化了一些空列表,这些列表将用于存储计算过程中的一些值。同时,也定义了一些初始参数,比如offset_angle
  2. 计算与存储数据:然后,代码进入一个for循环,以步长为3,从3开始,到45结束。在每次循环中,根据当前的correct_angleoffset_angle计算offset_pointcorrect_point,并计算他们的差值,然后将这些值以及correct_angle添加到相应的列表中。同时,还根据offset_pointcorrect_angle计算了x和y坐标,并将他们添加到相应的列表中。
  3. 创建图表:使用matplotlib库创建了一个图表。然后,将图表的canvas的’button_press_event’事件连接到一个名为mouse_event的函数。
  4. 设置图表属性:设置了x轴的刻度范围,然后创建了两个列表,一个用于x轴的刻度间隔,一个用于y轴的刻度间隔。同时,设置了x轴和y轴的刻度格式和范围。
  5. 绘制散点图:根据前面计算的数据,使用两种不同的颜色在图表上绘制了两个散点图,一个是理论点云,一个是偏差点云。
  6. 设置图表标签和标题:设置了图表的x轴和y轴的标签,以及图表的标题。
  7. 显示图表:最后,使用plt.show()函数显示图表。
  8. 这段代码中使用了中文作为图表的标签和标题,因此需要使用plt.rcParams['font.sans-serif'] = ['Simhei']plt.rcParams['axes.unicode_minus'] = False来确保图表能正确显示中文。

三、技术细节

  这段代码主要使用了math库和matplotlib库,实现的功能是:

  1. 对于一系列的角度值(从3开始,以3为步长,到45结束),计算对应的偏移点和正确点的坐标,以及他们的差值。这些计算基于一个给定的偏移角度(offset_angle = 0.28)。
  2. 将这些计算的结果存储在几个列表中:offset_point_list, correct_point_list, value_list, a_list, x_list, y_list, y_correct_list。
  3. 使用matplotlib库创建一个散点图,展示“理论点云”和“偏差点云”。其中,“理论点云”的y坐标是y_correct_list,“偏差点云”的y坐标是y_list。x坐标都是15000。
  4. 设置了图表的x轴和y轴的刻度间隔,范围,以及标签。同时,设置了图表的标题,以及当鼠标点击图表时的响应函数(mouse_event)。

四、完整代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2023-08-20 9:32
# @Author : Leuanghing Chen
# @Blog : https://blog.csdn.net/weixin_46153372?spm=1010.2135.3001.5421
# @File : 激光雷达码盘偏摆角的真假点映射关系.py
# @Software : PyCharmimport math
from matplotlib import pyplot as plt
from matplotlib.pyplot import MultipleLocator, FormatStrFormatter
import random# 鼠标点击时显示一个点的坐标
def mouse_event(event):print('x: {} and y: {}'.format(event.xdata, event.ydata))if __name__ == '__main__':offset_point_list = []correct_point_list = []value_list = []a_list = []# 偏移点坐标值x_list = []y_list = []# 真实点集y_correct_list = []offset_angle = 0.28    # 偏差角度for correct_angle in range(3, 45, 3):# offset_angle = random.randint(0, 50) / 100   # 随机点,模拟码盘随机角度偏差offset_point = 15000/math.cos(math.radians(correct_angle + offset_angle))correct_point = 15000/math.cos(math.radians(correct_angle))value = float(offset_point) - float(correct_point)a_list.append(correct_angle)offset_point_list.append(float('%.3f' % offset_point))correct_point_list.append(float('%.3f' % correct_point))value_list.append(float('%.3f' % value))# 偏移点映射到真实点延长线上x = offset_point * math.cos(math.radians(correct_angle))y = offset_point * math.sin(math.radians(correct_angle))x_list.append(float('%.3f' % x))y_list.append(float('%.3f' % y))# 真实点集y_correct_list.append(float('%.3f' % (15000*math.tan(math.radians(correct_angle)))))# print("点偏移:", offset_point_list)# print("点实际位置:", correct_point_list)# print("点距离差值:", value_list)# print(x_list, y_list)print("映射点y坐标值:", y_list)print("映射点x坐标值:", x_list)# 绘图fig = plt.figure()cid = fig.canvas.mpl_connect('button_press_event', mouse_event)# plt.xticks(range(14900, 15500))  # 传入range数列# plt.plot(x_list, y_list, 'bo')# plt.plot([15000]*len(y_correct_list), y_correct_list, 'bo')########################################################################## 分图预览# ax1 = fig.add_subplot(311)# ax2 = fig.add_subplot(312)# ax1.plot(x_list, y_list, color='green')# ax1.plot(x_list, y_list, 'bo')# ax2.plot([15000]*len(y_correct_list), y_correct_list, color='red')# ax2.plot([15000]*len(y_correct_list), y_correct_list, 'bo')################################################################################################################################################### 数据合并plt.xticks(range(14900, 15500))  # 传入range数列b_list = []for j in range(len(y_correct_list)):b_list.append(15000)plt.rcParams['font.sans-serif'] = ['Simhei']plt.rcParams['axes.unicode_minus'] = False# 第一个散点图,颜色为红色,透明度50%,图例为散点图1plt.scatter(b_list, y_correct_list, c="r", alpha=0.5, label="理论点云")# 第二个散点图,颜色为蓝色,透明度50%,图例为散点图2plt.scatter(x_list, y_list, c="b", alpha=0.5, label="偏差点云")# settingxmajorLocator = MultipleLocator(10)  # x轴刻度间隔 10ymajorLocator = MultipleLocator(500)  # y轴刻度间隔 500xmajorFormatter = FormatStrFormatter('%1.2f')  # x轴刻度格式为两位小数# 更改X轴和Y轴的范围plt.xlim([14990, 15080])plt.ylim([1000, 15000])plt.xlabel('X')plt.ylabel('Y')plt.tick_params(labelsize=10)plt.gca().xaxis.set_major_locator(xmajorLocator)plt.gca().yaxis.set_major_formatter(xmajorFormatter)plt.gca().yaxis.set_major_locator(ymajorLocator)# 显示图例plt.legend(loc="best")# 给标题plt.title("散点图")# 显示plt.show()

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

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

相关文章

浅谈Deep Learning 与 Machine Learning 与Artificial Intelligence

文章目录 三者的联系与区别 三者的联系与区别 “Deep Learning is a kind of Machine Learning, and Machine Learning is a kind of Artificial Intelligence.” 人工智能(AI),机器学习(Machine Learning,简称ML&am…

41. Linux系统配置FTP服务器并在QT中使用QFtp实现文件上传

1. 说明 这篇博客主要记录一些在Linux系统中搭建FTP服务器时踩过的一些坑,以及在使用QFtp上传文件时需要注意的问题。 2. FTP环境搭建 在linux系统中,需要安装vsftpd,可以在终端中输入下面的命令进行安装: sudo apt-get install vsftpd使用上述命令安装后,系统中会有一…

价值1000的情感爆文写作prompt,助你写出10万+阅读微信爆文

原文:价值1000的情感爆文写作prompt,助你写出10万阅读微信爆文 - 知乎 是否经常看到一些自媒体晒出这样的图片? 或者是这样的10w的阅读文章 那么这是真实能赚钱的吗?还是自媒体夸大其说,吸引流量。 我们先简单了解什…

【C++】bitset位图的简单模拟实现及常见面试题

文章目录 前言一、 bitset模拟实现二、 常见面试题1.给你一百亿个整数,找到只出现一次的数字2. 给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件交集? 前言 快速查找某个数据是否在一个集合中排序 去重…

有名管道及其应用

创建FIFO文件 1.通过命令&#xff1a; mkfifo 文件名 2.通过函数: mkfifo #include <sys/types.h> #include <sys/stat.h> int mkfifo(const char *pathname, mode_t mode); 参数&#xff1a; -pathname&#xff1a;管道名称的路径 -mode&#xff1a;文件的权限&a…

程序员的快乐如此简单

最近在GitHub上发起了一个关于Beego框架的小插件的开源仓库&#xff0c;这一举动虽然看似微小&#xff0c;但其中的快乐和意义却是无法用言语表达的。 Beego是一个开源的Go语言Web框架&#xff0c;它采用了MVC架构模式&#xff0c;并集成了很多常用的功能和中间件。小插件是指…

AIGC绘本——海马搬家来喽

随着ChatGPT的快速发展&#xff0c;人工智能领域也发生了翻天覆地的变化。今天&#xff0c;我们迎合科技潮流&#xff0c;利用AIGC的强大能力&#xff0c;可以创作很多精彩的作品&#xff0c;比如这样一本名为《海马搬家》的绘本&#xff08;注&#xff1a;此绘本根据同名儿童故…

线性绘制在NSDT 3D场布中的应用

什么是线性摆放&#xff1f; 线性摆放是指将一系列对象按照直线或者曲线进行排列&#xff0c;形成一条线或者弧线状的布局方式。在3D场布中&#xff0c;线性摆放可以应用于多个领域和场景&#xff0c;如展览设计、景观规划、商业空间布置等。 线性绘制在3D场布中的应用 展览设…

什么是CORS(跨源资源共享)?如何解决前端中的CORS问题?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ CORS&#xff08;跨源资源共享&#xff09;⭐ 解决前端中的CORS问题的方法⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为…

HCQ1-1300-D故障笔记

常用查错网址&#xff1a; SMC_ERROR (ENUM) 删除 Web

9.19号作业

2> 完成文本编辑器的保存工作 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QFontDialog> #include <QFont> #include <QMessageBox> #include <QDebug> #include <QColorDialog> #include <QColor&g…

AJAX的奇妙之旅(1)基础知识

一、简介 AJAX&#xff08;Asynchronous JavaScript and XML&#xff09;是一种使用现有标准的新方法。它是一种用于创建快速动态网页的技术。AJAX 最大的优点是在不重新加载整个页面的情况下&#xff0c;可以与服务器交换数据并更新部分网页内容。AJAX 不需要任何浏览器插件&a…

golang 自动生成文件头

安装koroFileHeader控件 打开首选项&#xff0c;进入设置&#xff0c;配置文件头信息"fileheader.customMade": {"Author": "lmy","Date": "Do not edit", // 文件创建时间(不变)// 文件最后编辑者"LastEditors"…

R语言贝叶斯非参数模型:密度估计、非参数化随机效应META分析心肌梗死数据...

全文链接&#xff1a;http://tecdat.cn/?p23785 最近&#xff0c;我们使用贝叶斯非参数&#xff08;BNP&#xff09;混合模型进行马尔科夫链蒙特卡洛&#xff08;MCMC&#xff09;推断&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。 概述 相关视频 在这篇文…

世界前沿技术发展报告2023《世界信息技术发展报告》(一)世界信息技术及产业发展重要动向

&#xff08;一&#xff09;世界信息技术及产业发展重要动向 1. 概述2. 半导体技术水平持续进步&#xff0c;行业内部开始新一轮调整2.1 全球主要经济体加强半导体技术能力建设&#xff0c;推动厂商扩产2.2 先进制程技术持续发展&#xff0c;先进封装技术崭露头角2.3 消费电子半…

【算法练习Day1】二分查找移除元素

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 二分查找解决方法一&…

ChatGPT WPS AI 一键核对两表数据差异

业务需求,找出两个表中不相同的内容。如下图: 像这样的表格中,要找出不同的值,手动核对效率不高。 现在我们有了ChatGPT,可以由人工智能来完成这一操作,高效,快速,准确定位差异值。 指令:请找出A1:G14 单元格区域和I1:O14单元格区域的不相同部分,将两部数据区域不相…

记一次hyperf框架封装swoole自定义进程

背景 公司准备引入swoole和rabbitmq来处理公司业务。因此&#xff0c;我引入hyperf框架&#xff0c;想用swoole的多进程来实现。 自定义启动服务封装 <?php /*** 进程启动服务【manager】*/ declare(strict_types1);namespace App\Command;use Swoole; use Swoole\Proce…

C语言每日一题(10):无人生还

文章主题&#xff1a;无人生还&#x1f525;所属专栏&#xff1a;C语言每日一题&#x1f4d7;作者简介&#xff1a;每天不定时更新C语言的小白一枚&#xff0c;记录分享自己每天的所思所想&#x1f604;&#x1f3b6;个人主页&#xff1a;[₽]的个人主页&#x1f3c4;&#x1f…

Weblogic反序列化漏洞(CVE-2018-2628/CVE-2023-21839复现)

内容目录 Weblogic反序列化漏洞(CVE-2018-2628/CVE-2023-21839)weblogic中间件CVE-2018-2628漏洞描述影响版本漏洞复现修复方案 CVE-2023-21839漏洞描述影响版本漏洞复现修复方案 Weblogic反序列化漏洞(CVE-2018-2628/CVE-2023-21839) weblogic中间件 WebLogic是美国Oracle公司…