sensor odometry 上


1 概述

  里程计(Odometry)是机器人定位与导航中的基础模块,用于通过传感器数据估计机器人相对于初始位置的相对运动。
  里程计分为轮式里程计(Wheel Odometry)、视觉里程计(Visual Odometry,VO)、惯性里程计(IMU Odometry)、雷达里程计(Laser Odometry)等。本文所说的odometry是指轮式里程计。

2 基本原理

  轮式里程计是一种基于车轮转动信息来估算移动机器人或车辆位置与姿态变化的技术。它通过处理车轮旋转产生的数据,推算出车辆或机器人在平面上的运动轨迹。
  其核心思想是:通过编码器或其他传感器测量车轮的旋转量,然后根据车轮的几何关系,将旋转量转换为线性位移和角度变化,最后通过积分计算,估计机器人的位置与姿态。

3 运动学模型

  轮式里程计的运动学模型分为单轮模型、差分运动模型(两轮)、全向轮模型(三轮或四轮全向轮),本文主要描述差分运动模型。

3.1 差分运动模型 概念

  差分运动模型(Differential Drive Model)是描述两轮差分驱动机器人运动的一种数学模型。这种模型广泛应用于移动机器人、AGV和轮式机器人中。它通常由两个驱动轮(左右各一个)和一个或多个支撑轮(如万向轮)组成。
  差分运动模型的核心思想是控制两个驱动轮的速度差来实现机器人的运动。
在这里插入图片描述

3.2 差分运动模型 运动求解

  差分运动模型的机器人始终做的是以 r r r为半径的圆弧运动。
在这里插入图片描述
已知:两轮旋转的角速度 w R , w L w_R,w_L wR,wL、两轮的线速度 v R , v L v_R,v_L vR,vL、两轮的半径 r R , r L r_R,r_L rR,rL、轮子离底盘中心的距离 d d d、两轮之间的距离 D = 2 d D=2d D=2d
求解:底盘中心的线速度 v v v、底盘中心的角速度 w w w、两轮相对于车体旋转中心 O O O转动的角速度 w r , w l w_r,w_l wr,wl、底盘中心圆弧运动的半径 r r r
注意:直线运动可看作圆周运动的特殊情况,即 r → + ∝ r \to +\propto r+,直线运动时, v R = v L v_R = v_L vR=vL

求解运动半径 r r r:
底盘中心相对于车体旋转中心 O O O转动的角速度与两轮相对于车体旋转中心 O O O转动的角速度是相等的。
w = w l = w r v = w r }    ⟹    v L r − d = v R r + d    ⟹    v L ( r + d ) = v R ( r − d )    ⟹    ( v R − v L ) r = ( v R + v L ) d    ⟹    r = ( v R + v L ) d ( v R − v L ) \begin{rcases} w=w_l=w_r \\ v=wr \end{rcases} \implies \frac{v_L}{r-d}=\frac{v_R}{r+d} \implies v_L(r+d)=v_R(r-d) \implies (v_R-v_L)r=(v_R+v_L)d \implies r=\frac{(v_R+v_L)d}{(v_R-v_L)} w=wl=wrv=wr}rdvL=r+dvRvL(r+d)=vR(rd)(vRvL)r=(vR+vL)dr=(vRvL)(vR+vL)d
求解角速度 w w w:
w = v R r + d    ⟹    v R ( v R + v L ) d ( v R − v L ) + d    ⟹    w = v R − v L 2 d w=\frac{v_R}{r+d} \implies \frac{v_R}{\frac{(v_R+v_L)d}{(v_R-v_L)} + d} \implies w=\frac{v_R-v_L}{2d} w=r+dvR(vRvL)(vR+vL)d+dvRw=2dvRvL
求解线速度 v v v:
v = w r    ⟹    v = v R − v L 2 d ( v R + v L ) d ( v R − v L )    ⟹    v = v R + v L 2 v=wr \implies v=\frac{v_R-v_L}{2d} \frac{(v_R+v_L)d}{(v_R-v_L)} \implies v=\frac{v_R+v_L}{2} v=wrv=2dvRvL(vRvL)(vR+vL)dv=2vR+vL

3.3 差分运动模型 航迹推演

  航迹推演的核心思想是基于物体的运动状态进行位置的递推计算。
  它假定物体在运动过程中,其速度和方向是可以被测量或估计的。从一个已知的起始位置开始,根据物体在每个时间段内的运动速度和方向,逐步推算出后续时刻的位置。
  由于机器人在相邻时刻 Δ t \Delta t Δt内,运动距离非常短,因此可认为机器人是匀速运动,两相邻点之间的运动轨迹可看成直线。
在这里插入图片描述   已知 t − 1 t-1 t1时刻机器人位姿 ( x , y , θ ) (x,y,\theta) (x,y,θ)、线速度 v x v_x vx、角速度 w w w、与 t t t时刻的间隔时间 Δ t \Delta t Δt,求解 t t t时刻机器人位姿 ( x ′ , y ′ , θ ′ ) (x^{\prime},y^{\prime},\theta^{\prime}) (x,y,θ)
   t t t时刻沿机器人坐标系 X R X_R XR轴移动了 v x ∗ Δ t v_x * \Delta t vxΔt,只需要将该段距离分别投影在世界坐标系 X w , Y w X_w,Y_w Xw,Yw轴上,就可以得到 t t t时刻相对于 t − 1 t-1 t1时刻机器人在世界坐标系中坐标移动的位移 Δ x 和 Δ y \Delta x和 \Delta y ΔxΔy
Δ x = v x ∗ Δ t ∗ c o s ( θ t − 1 ) Δ y = v x ∗ Δ t ∗ s i n ( θ t − 1 ) \Delta x = v_x * \Delta t * cos(\theta_{t-1}) \\ \Delta y = v_x * \Delta t * sin(\theta_{t-1}) Δx=vxΔtcos(θt1)Δy=vxΔtsin(θt1)
  则 t t t时刻机器人的位姿 ( x ′ , y ′ , θ ′ ) (x^{\prime},y^{\prime},\theta^{\prime}) (x,y,θ)
x ′ = x + v x ∗ Δ t ∗ c o s ( θ t − 1 ) y ′ = y + v x ∗ Δ t ∗ s i n ( θ t − 1 ) θ ′ = θ ′ + w Δ t x' = x + v_x * \Delta t * cos(\theta_{t-1}) \\ y' = y + v_x * \Delta t * sin(\theta_{t-1}) \\ \theta' = \theta' + w \Delta t x=x+vxΔtcos(θt1)y=y+vxΔtsin(θt1)θ=θ+wΔt
  附加功能,如果机器人是全向运动即有了 y y y轴的速度时,那轨迹如何推演呢?
  已知 t − 1 t-1 t1时刻机器人位姿 ( x , y , θ ) (x,y,\theta) (x,y,θ)、线速度 v x , v y v_x,v_y vx,vy、角速度 w w w、与 t t t时刻的间隔时间 Δ t \Delta t Δt,求解 t t t时刻机器人位姿 ( x ′ , y ′ , θ ′ ) (x^{\prime},y^{\prime},\theta^{\prime}) (x,y,θ)
   t t t时刻沿机器人坐标系 X R X_R XR轴移动了 v x ∗ Δ t v_x * \Delta t vxΔt,沿机器人坐标系 Y R Y_R YR轴移动了 v y ∗ Δ t v_y * \Delta t vyΔt,只需要将每段距离分别投影在世界坐标系 X w , Y w X_w,Y_w Xw,Yw轴上并相加,就可以得到 t t t时刻相对于 t − 1 t-1 t1时刻机器人在世界坐标系中坐标移动的位移 Δ x 和 Δ y \Delta x和 \Delta y ΔxΔy
Δ x = v x ∗ Δ t ∗ c o s ( θ t − 1 ) − v y ∗ Δ t ∗ s i n ( θ t − 1 ) Δ y = v x ∗ Δ t ∗ s i n ( θ t − 1 ) + v y ∗ Δ t ∗ c o s ( θ t − 1 ) \Delta x = v_x * \Delta t * cos(\theta_{t-1})-v_y * \Delta t * sin(\theta_{t-1}) \\ \Delta y = v_x * \Delta t * sin(\theta_{t-1})+ v_y * \Delta t * cos(\theta_{t-1}) Δx=vxΔtcos(θt1)vyΔtsin(θt1)Δy=vxΔtsin(θt1)+vyΔtcos(θt1)
  则 t t t时刻机器人的位姿 ( x ′ , y ′ , θ ′ ) (x^{\prime},y^{\prime},\theta^{\prime}) (x,y,θ)
x ′ = x + v x ∗ Δ t ∗ c o s ( θ t − 1 ) − v y ∗ Δ t ∗ s i n ( θ t − 1 ) y ′ = y + v x ∗ Δ t ∗ s i n ( θ t − 1 ) + v y ∗ Δ t ∗ c o s ( θ t − 1 ) θ ′ = θ ′ + w Δ t x' = x + v_x * \Delta t * cos(\theta_{t-1})-v_y * \Delta t * sin(\theta_{t-1}) \\ y' = y + v_x * \Delta t * sin(\theta_{t-1})+ v_y * \Delta t * cos(\theta_{t-1}) \\ \theta' = \theta' + w \Delta t x=x+vxΔtcos(θt1)vyΔtsin(θt1)y=y+vxΔtsin(θt1)+vyΔtcos(θt1)θ=θ+wΔt
  从以上得知,全向运动的计算是包含不是全向的,只需要令线速度 v y = 0 v_y=0 vy=0即可。

4 总结

  本博文讲解了轮式里程计的基本原理和运动学模型的推导。


    随着ICT技术不断深化和传统场景的结合,自动化、智能化相融合已经成为ICT技术的下一代浪潮,以工业机器人、服务机器人、自动驾驶等的新一代技术浪潮目前已经方兴未艾,成为又一波热点。而作为次级操作系统的ROS则提供了一系列的调试、仿真工具,能支持激光导航、视觉导航等算法,是切入机器人和自动驾驶技术的重要基础。    机器人是一个复合型的领域,涉及软件、算法、硬件、结构等诸多方向,是一个理论性和实践性并重的学科,考虑到其复杂性和讲解的循序渐进,整个系列课程将分为三个系列即入门系列、中级系列、高级系列。   在入门系列中,我们将介绍ROS的基础知识(机器人基础知识、ROS开发环境等)、ROS配置管理(系统架构、参数管理、Launch启动、编译配置以及如何基于源代码开发等)、ROS系统调试(代码调试、可视化调试、消息回放、单元测试等),获得该领域的入门券。   在中级系列中,我们将围绕机器人建模与仿真涉及的URDF机器人模型、Gazebo仿真环境、坐标变换、运动控制、环境感知等展开介绍,熟练掌握利用RVIZ、Gazebo等仿真和调试工具调试机器人程序与算法。   在高级系列中,我们将着眼于人工智能框架及算法分享机器人开发涉及的运动控制、SLAM、语音交互、计算机视觉等。逐层递进,为大家一层层剥开机器人的神秘面纱。    本系列课程的特色在于:    1、从基础知识、建模与仿真、环境感知与智能决策、人机交互等4个方面循序渐进、逐步深化,知识覆盖全面,便于深度认知;    2、从基本理论、源码解读、工程示例等领域开展ROS系统入门知识的深度介绍和分析,源于工程实践,利于快速上手;   3、基于全新的环境Ubuntu 20.04、ROS Noetic、Gazebo 11、GMapping、Cartographer、tensorFlow 2.*、OpenCV 4.*等讲解,紧跟时代前沿。   整个系列的课程将会逐步开发并上线,三个系列是一个逐步深入、环环相扣的课程内容,感兴趣的同学可以开始学习啦。
### IT中的传感器融合技术及其实施 #### 定义与概述 传感器融合是指通过集成来自多个不同类型的传感器的数据来提高系统的性能和可靠性。这种方法不仅能够提供更精确的结果,还能增强对环境的理解能力[^1]。 #### 技术原理 在无线传感网络中实现定位功能时,通常会采用多种测量手段相结合的方式来进行位置估计。例如,在复杂环境中为了获得更高的精度,可以综合运用射频信号强度指示(RSSI)、到达时间差(TDOA)以及角度信息等多种参数完成目标节点的位置计算工作。 对于第五代移动通信技术而言,其设计之初就考虑到了多源数据处理的需求,因此具备强大的硬件支持用于执行复杂的算法运算,从而使得设备间协作更加紧密高效;这为传感器融合提供了良好的基础架构支持[^2]。 #### 实施方法 一种稳健动态室内可见光定位方案展示了如何利用互补金属氧化物半导体(CMOS)图像传感器捕捉光源特征并构建地图模型以辅助导航服务。此过程涉及到了视觉里程计VO(Visual Odometry),SLAM(Simultaneous Localization And Mapping)等先进计算机视觉技术的应用实例[^3]。 ```python import numpy as np def fuse_sensors(sensor_data_1, sensor_data_2): """ A simple example function to demonstrate how two sets of sensor data might be fused. Args: sensor_data_1 (np.array): Data from first type of sensor. sensor_data_2 (np.array): Data from second type of sensor. Returns: np.array: Fused result after processing both inputs together. """ # Example operation combining the datasets; actual implementation would depend heavily on context and application domain. combined = np.mean([sensor_data_1, sensor_data_2], axis=0) return combined ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值