- 博客(15)
- 收藏
- 关注
原创 自动驾驶系列(7)LeGO-LOAM源码解析(点云分割)
它首先通过遍历每个点云数据点(基于扫描的行和列),使用labelMat(一个存储每个点标签的矩阵)来决定哪些点需要被进一步处理(即非地面点)。使用 atan2 函数计算第一个点(即开始点)和最后一个点(即结束点)相对于原点(可能是激光雷达的中心)的航向角。对于结束点,额外加上 2 * M_PI是为了处理一种特殊情况:即如果激光雷达扫描的最后一个点实际上是在扫描路径的开始部分(例如,激光雷达是连续旋转的),那么简单地计算两个点的 atan2 值可能会导致得到的角度差不是完整的扫描角度。
2024-09-02 20:44:57 999
原创 自动驾驶系列(6)LeGO-LOAM介绍
LeGO-LOAM不仅整合了LOAM的系统结构,同时对LOAM中的特征提取、位姿估计计算都进行了优化改进,此外还加入了闭环检测和全局优化,将LOAM这一LO系统构建为完整的SLAM系统。轻量级:LeGO-LOAM设计得较为轻量,能够在低功耗嵌入式系统上实现实时姿态估计,这使得它非常适合于资源受限的应用场景。地面优化:该算法在分割和优化步骤中充分利用了地面的约束,提高了算法的准确性和鲁棒性。
2024-08-25 21:45:23 524
原创 自动驾驶系列(5)ALOAM源码解析-lasermapping.cpp
对应节点:/alaserMapping功能:基于前述的corner_less_sharp特征点和surf_less_flat特征点,进行帧与submap的点云特征配准,对Odometry线程计算的位姿进行finetune。
2024-08-25 21:15:52 274
原创 自动驾驶系列(4)ALOAM源码解析-laserOdometry.cpp
首先,它初始化了一些必要的变量和对象,然后进入一个循环,针对边缘点和平面点分别进行配准。同时在每个循环中,它首先找到当前点在上一帧激光雷达数据中的 nearest neighbor,然后根据扫描ID的差异来搜索更近或更远的点。具体来说,它通过订阅激光雷达的不同类型点云话题,获取尖锐角点、不尖锐角点、平坦平面和不平坦平面等信息。然后,对这些点云数据进行处理和关联,利用 Ceres 库进行优化求解,估计机器人的位姿变换。最后,将位姿信息发布到 ROS 话题中,供其他节点使用。再转换到结束点,迭代优化。
2024-05-13 19:10:55 382
原创 自动驾驶系列(3)ALOAM源码解析-scanRegistration.cpp
接收两个pcl::PointCloud类型的参数:cloud_in(输入点云)和cloud_out(输出点云)。原理:是遍历输入点云中的每个点,检查其三维空间坐标(x、y和z)是否满足条件。如果满足条件,将该点复制到输出点云中,否则跳过该点。最后,调整输出点云的大小以匹配有效点的数量。订阅LiDAR点云数据,并对其进行处理,最后将处理后的点云数据发布出去。功能:初始化ROS节点,订阅激光点云数据,发布处理后的点云数据。1.定义了一些变量和结构体,如点云类型、点云尺寸等。7.将处理后的点云数据发布出去。
2024-04-21 21:21:51 831 1
原创 自动驾驶系列(2)精度评估EVO使用
将机器人的位姿数据(全局坐标系)写入一个文件中。实现原理是将机器人当前的位姿数据(odomAftMapped.pose.pose)命令语法:命令 格式 参考轨迹 估计轨迹 [可选项](1)bag话题查询。
2024-04-11 20:16:19 471 1
原创 自动驾驶系统(1)A-Loam安装和编译
LOAM为清华自动化本科毕业的Zhang Ji博士在CMU读博期间,于2014年在RSS期刊发表的关于三维激光传感器的SLAM算法。
2024-04-07 20:39:01 1041
原创 第一天
一、选项数据data、computed、method如何使用data:一个函数,定义了很多变量(数据),这些变量服务于整个组件,如定义msg:'helloworld’和a:1;computed :一个对象,包含各种函数(用来操作变量)methods:一个对象,包含各种函数(与事件相关)<template> <div> <div>选项数据...
2020-01-02 17:14:51 100
原创 OkHttp网络操作框架
1.OkHttp概述1.1什么是OkHttp?OkHttp是一个网络客户端,客户端向服务器发出一条HTTP请求,服务器收到请求后返回数据给客户端,客户端对数据进行解析和处理。1.2OkHttp的用法(1)创建一个OkHttpClient对象OkHttpClient client=new OkHttpClient();(2)创建一个Request对象,代表要发送一条HTTP请求(再调用...
2019-07-22 16:37:50 210
原创 ListView的使用(一)
1.adapter的创建及原理适配器是AdapterView视图与数据之间的桥梁,用来处理数据并将数据绑定到AdapterView上2.ListView实现步骤(1)在布局文件中添加ListView <ListView android:id="@+id/app_list_view" android:layout_width="match_pare...
2019-07-16 18:00:23 174
原创 AsyncTask异步任务
1.问题(1)什么是AsyncTask?一个Android 已封装好的轻量级异步类,属于抽象类,即使用时需 实现子类。(2)AsyncTask如何使用?2.异步任务常用方法3.异步下载的实现...
2019-07-15 09:22:15 147
原创 Handler通信
1.问题(1)Handler是什么?有什么作用(2)Handler/Looper/MessageQueue/Message分别是干嘛的(3)Handler的工作原理,如何实现2.Handler的实现和优化3.Handler实践3.1(1)主线程点击按键、发起下载、开启子线程做下载、下载过程中通知主线程。主线程更新进度条下载方法解:(1)获取要下载文件的输入流(2)获取文件总长度...
2019-07-10 12:10:50 632
原创 android网络操作
1.网络操作基础知识(1)HTTP:超文本传送协议(客户端每次请求都需要服务器回送响应,并在请求结束后主动释放连接)HTTPS:HTTP的安全版,在HTTP下加入了SSL层。(2)网络操作需要的类:URL类是用来管理网址的,HttpURLConnection用来管理网络连接,InetAddress用来操作IP地址(3)JSON:一种文本形式的数据交换格式,它比XML更轻量、比二进制容易阅读...
2019-07-09 15:14:55 197
原创 android学习笔记
第一行代码第二天(UI、碎片、广播)1.属性(1)gravity和layout_gravity的区别其实从名字就可以看出,android:gravity用于指定文字在控件中的对齐方式,而android:layout_gravity用于指定控件在布局中的对齐方式。(2)2.布局2.1引入布局可以避免代码的大量重复,通过引入自定义的布局2.2ListView数组中的数据是无法直接传递...
2019-07-06 13:49:41 122
原创 android学习笔记
第一行代码第一天ACTIVITY(1)1.外层目录下的build.gradle文件jcenter:一个代码托管仓库,我们后面要用到的许多开源项目都托管在上面,声明它后就可以引用它上面的开源项目classpath:一个插件,表示构建的是Android项目2.app目录下的build.gradleapply:声明是库模块还是应用程序模块(库模块无法直接运行,只能作为代码库依赖其他APP模块...
2019-07-04 16:58:11 185
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人