前面我们已经得到了当前底盘在世界坐标系中的位姿,这个位姿是通过融合ORB_SLAM2位姿和IMU积分得到的,在当前位姿已知的case下,给SLAM小车设置一个goal,我这里是通过上位机设置,然后使用上篇文章中的轨迹规划方法就可以得到一个路径Queue。
依次执行这个队列里的离散点,就可以到达设置的目标点了。本篇文章主要内容分享一下我是如何通过闭环控制使得小车在实际环境中从A点运动到目标点B点,才疏学浅,抛砖引玉。本文没有使用ROS里的Navigation包,而是自己封装了一个Navigaton类,集成了上篇文章里的轨迹规划和这篇里的运动控制,这样方便更好的自定义控制算法。
  • 运动控制逻辑框架
在一个二维平面中,小车从A点运动到B点主要有两种方式,一是在A点原地旋转到车头朝向B点,然后径直走向B点;二是从A到B沿着弧线走。两者的区别就像是,图(1)是纯旋转和位移的解耦,图(2)则是两者的耦合。

红点是当前点,蓝色是目标点,图例标反了

Visio画得图有点丑,大家将就点看。这两种方案我之前纠结了一会要用哪个,一方面现实中的车辆都是如(2)中所示转弯的,这种方式也很自然,但是相比与(1)走的路径也会更长一点,另外如果以我这个小车底盘原地转向肯定是要有滑动摩擦的,但是我的小车是差速转向没有特殊的转向轮,这样一来也不是很好控制。最终还是决定使用图(1)中的方式。
  • 闭环控制
其实系统在下位机那一层已经有一个速度环了。另外底层还有一个速度平滑队列,虽然不是但是可以抽象为电流环(速度整的越平滑,速度就增大或减小的越慢,也就是加速度越小,加速度直接和电机输出的扭矩挂钩,又有直流电机M = K*I)。
那么我们在TX2上要做的就是位置环了。
广义位置包括3个自由度的旋转和3个自由度的位移,旋转就是第一步中的先旋转底盘到小车朝向B点,位移就是沿着直线运动到B点了。我这里使用之前得到的小车位姿作为传感器反馈的真实实际值,使用位置式PID,实际上没有用到I,就叫PD控制器吧。
要控制的东西有两个:
  1. 旋转过程中旋转的角度;
  2. 直线运动中小车的朝向以及当前位置和B点的距离。
其中过程1很大的取决了最后的运动精度,过程2中虽然也在直线运动中不断矫正小车的朝向,但还是没有直接把过程1弄的更准确来的方便。
下层单片机中断接收TX2的速度命令cmd_vel,TX2和stm32通讯频率设置为25HZ。
bool fromPoseCmdvel(geometry_msgs::PoseStamped);
bool setTargetSpeed(float vLeft, float vRight, uint8_t direction);
bool setTargetOmega(float omega, float omegaBias);
bool posePidController(float targetAngle, float currentAngle);
bool posePidController(float target_x, float target_y, float current_x, float current_y, float targetAngle, float currentAngle);
float omegaPidController(float omegaTarget, float omegaActual);
float thetaPidController(float thetaTarget, float thetaActual);bool fromPoseCmdvel(geometry_msgs::PoseStamped);
  • 实验结果
2m直线运动,开始运动前的状态,红色起始点,蓝色目标点
 
 
2m的图找不到了,这里就放一个2.5m直线的图吧。运动后的误差,这里是放大了坐标图,目测误差很小。当然这并不是实际的误差,真正的误差还得通过尺子量。
 
 
尺子量的结果,这里是纵向长度,横向误差就不放了,肯定是小于纵向误差的。
 
 
我好像有找到了2m的结果图,在这里
 
  • 最后做了一个小小的避障实验
因为室内都是白墙,建的图效果不是很好
 
这里有个室外建图的,不过是在下一篇要讲的哈哈,提前透支素材。
 
 
下面是更早一些的图片
 
 
 
 

软件篇-05-融合ORB_SLAM2和IMU闭环控制SLAM底盘运动轨迹的更多相关文章

  1. 软件篇-03-基于ORB_SLAM2手写SLAM稠密地图构建实现

    本文使用的方法不是从内部修改ORBSLAM2源码以获取稠密点云,而是先从ZED2 sdk获取以摄像头坐标系为描述的三维点云/作为点云地图的一个子集,然后融合IMU与ORB_SLAM2进行实时定位,通过 ...

  2. iOS系列 基础篇 05 视图鼻祖 - UIView

    iOS系列 基础篇 05 视图鼻祖 - UIView 目录: UIView“家族” 应用界面的构建层次 视图分类 最后 在Cocoa和Cocoa Touch框架中,“根”类时NSObject类.同样, ...

  3. GSM Sniffing入门之软件篇:GSMTAP抓取与SMS(Short Message Service)

    重点介绍如何利用50元左右的设备,抓包并还原SMS短信内容: ps:研究GSM Sniffing纯属个人兴趣,能抓SMS报文只是捡了个明文传输的漏子,切勿用于非法用途.就像sylvain说的,osmo ...

  4. FSG压缩壳和ImportREC的使用 - 脱壳篇05

    FSG压缩壳和ImportREC的使用 - 脱壳篇05 让编程改变世界 Change the world by program FSG这个壳可以说是有点儿不守妇道,尼玛你说你一个压缩壳就实现压缩功能得 ...

  5. [知乎]老狼:深入PCI与PCIe之二:软件篇

    深入PCI与PCIe之二:软件篇 https://zhuanlan.zhihu.com/p/26244141 我们前一篇文章(深入PCI与PCIe之一:硬件篇 - 知乎专栏)介绍了PCI和PCIe的硬 ...

  6. 智能家居-3.基于esp8266的语音控制系统(软件篇)

    智能家居-1.基于esp8266的语音控制系统(开篇) 智能家居-2.基于esp8266的语音控制系统(硬件篇) 智能家居-3.基于esp8266的语音控制系统(软件篇) 赞赏支持 QQ:505645 ...

  7. OA办公软件篇(一)—组织架构

    OA办公软件篇(一)-组织架构 背景 作用 迭代历程 具体实现 写在最后   背景 在说组织架构之前,我们先来说说OA本身. 百度百科解释OA为:办公自动化(Office Automation,简称O ...

  8. OA办公软件篇(二)—权限管理

    权限管理的背景 权限管理的作用 迭代历程 关键名词释义 权限管理模型 具体实现 写在最后   权限管理的背景 在OA办公软件篇(一)-组织架构一文中,我们说到组织架构是软件系统的权限体系的重要搭建依据 ...

  9. OA办公软件篇(三)—审批流

    背景 作用 迭代历程 具体实现 写在最后   背景 在前面两篇文章中,我们分别讲了组织架构和权限管理,今天我们来讲一个跟组织架构关系比较密切的功能-审批流. 审批流,通俗来说就是一个完整的审批流程,是 ...

随机推荐

  1. 博客数据库要连接Elasticsearch,使用MySQL还是MongoDB更合理

    若进行博客等文本类数据的读写以及专业搜索引擎的连接的解决方案对比,可以肯定的下结论:MongoDB的解决方案中要远远好于MySQL的解决方案. 一.从开发工序角度 MySQL的文章读写方式 方式一:文 ...

  2. MySQL深入研究--学习总结(1)

    前言 本文是笔者学习"林晓斌"老师的<MySQL实战45讲>过程中的,对知识点的总结归纳以及对问题的思考记录,课程18年11月就出了,当时连载形式,我就上班途中一边开车 ...

  3. TKE 容器网络中的 ARP Overflow 问题探究及其解决之道

    作者朱瑜坚,腾讯云后台开发工程师,熟悉 CNI 容器网络相关技术,负责腾讯云 TKE 的容器网络的构建和相关网络组件的开发维护工作,作为主力开发实现了 TKE 下一代容器网络方案. 1. 问题背景 1 ...

  4. 锐捷RG-UAC统一上网行为管理审计系统账号密码泄露漏洞 CNVD-2021-14536

    一:产品介绍: 锐捷 RG-UAC 统一上网行为管理审计系统 锐捷统一上网行为管理与审计RG-UAC系列是星网锐捷网络有限公司自主研发的上网行为管理与审计产品,以路由.透明.旁路或混合模式部署在网络的 ...

  5. JAVA_标识符、数据类型、变量

    标识符和关键字 ​ 所有的标识符否应该以字母a ~ z和 A ~Z ,美元符($).下划线(_)开始. ​ 首字符之后可以是字母a ~ z和 A ~Z ,美元符($).下划线(_)的任意字符组合. 注 ...

  6. H5 简单实现打砖块游戏

    实现效果如图所示: 1.布局 在html中,声明  div1 作为作为带有边框的父物体,一切行为都要在 div1 中进行.创建小球ball.左右可滑动的板子bat,以及存放要销毁的砖块的父物体 bri ...

  7. yolo训练数据集

    最近了解了下yolov3的训练数据集部分,总结了以下操作步骤:(基于pytorch框架,请预先装好pytorch的相关组件) 1.下载ImageLabel软件对图片进行兴趣区域标记,每张图片对应一个x ...

  8. Bonuses on a Line Gym - 102569B

    题目链接:https://vjudge.net/problem/Gym-102569B 题意:数轴上有N个点,从0出发最多走t步问最多经过几个点. 思路:分开存负数点和整数点,然后枚举每个端点,某个点 ...

  9. N皇后求解。万万没想到,只用一个一维数组就搞定了。还体现了回溯。

    一.啥是N皇后?先从四皇后入手 给定一个4x4的棋盘,要在棋盘上放置4个皇后.他们的位置有这样的要求,每一列,每一行,每一对角线都能有一个皇后. 你可能会对这个对角线有疑惑,其实就是每一个小正方形的对 ...

  10. Android Studio 之 编写精美的聊天界面

    •准备工作 首先制作一张 .9 格式的聊天气泡,参见我的这篇博客: 需要注意的是,制作完成后,应该将原始文件删除,否则AS会分不清楚而报错. 新建一个 Empty Activity,Java 和 XM ...