工程01——移动机器人运动模型推导(完善中)

1. 运动模型概述

1.1 运动模型需要解决的问题

在AGV小车甚至要求略高一点的玩具车中,对于底层行走电机的控制都是其移动的基础。

其需要解决的主要包括两个问题:

  1. 在小车移动过程中,通过传感器(如编码器等)获取到了行走电机移动过程中的速度,怎么计算此时小车的速度。
  2. 给定一个小车的速度,行走电机的速度该为多少?即:需要设置行走电机的速度为多少。

1.2 速度概念

现实世界中,机器人在空间中的位置是三维的,即通过XYZ三个点的坐标可以描述机器人在空间中以某个点为原点的位置。

机器人在空间中的速度也需要考虑三个维度,共六个值。分别为:XYZ轴上的线速度XYZ轴上的角速度
可以记为:Vx、Vy、Vz、Wx、Wy、Wz

但实际上,根据不同的机器模型,可以不用考虑所有的量。

1.3 运动机器人模型

常见的移动机器人模型包括:

  1. 两轮(差速轮)
  2. 四轮(差速轮、麦克纳姆轮)
  3. 补充中…

2. 移动小车模型解析

2.1 两轮差速轮

这是最简单的一种,因此从这里开始推导。

推导过程

两轮差速轮模型如下图所示,包括常见的平衡车之类,动力轮只有两个且平行放置,转向依靠两个动力轮的速度差实现的模型也都属于这个范畴。
在这里插入图片描述
开始推导:
在很短的时间内,可以将小车看作是绕着某个点做圆周运动。

问题一:在小车移动过程中,通过传感器(如编码器等)获取到了行走电机移动过程中的速度,怎么计算此时小车的速度。
答:如下图中左侧公式所示。

问题二:给定一个小车的速度,行走电机的速度该为多少?即:需要设置行走电机的速度为多少。
答:如下图中右侧公式所示。
在这里插入图片描述
伪代码实现

标准单位中:
线速度单位:m/s
角速度单位:弧度/s
方向定义:轮子逆时针转,记速度为正(上图中右侧轮子标注的速度实际上为负值)。


// 函数功能:小车运动速度下发
// 输入:小车运动参数,X方向线速度、Z方向角速度
void SetCarSpeed(float linear, float angular)
{
    // 第一步:把小车的移动速度,计算为小车轮子的线速度
    float left_linear = linear - 0.5 * 轮距 * angular;
    float right_linear = linear + 0.5 * 轮距 * angular;

    // 第二步:把轮子的线速度,计算为行走电机的旋转速度
    float left_angular = left_linear / 车轮半径;
    float right_angular = right_linear / 车轮半径;

    // 第三步:把计算好的速度,下发给电机,让电机旋转(两个电机安装相差180度,则其中一个速度需要取反)
    SetMotorSpeed(left_angular, -1 * right_angular);
}

// 函数功能:通过行走电机旋转速度,计算小车小速度和角速度
// 输入:小车运动参数,左电机角速度、右电机角速度(速度自行获取)
void GetCarSpeed(float letf_angular, float right_angular)
{
    // 第一步:把轮子的角速度,计算为轮子的线速度
    float left_linear = letf_angular * 车轮半径;
    float right_linear = -1 * right_angular * 车轮半径;

    // 第二步:把轮子的线速度,计算为小车的线速度和角速度
    float car_linear = (left_linear + right_linear) / 2;
    float car_angular = (left_linear - right_linear) / 轮距;
}

上述代码仅作计算示例,建议函数入口参数和返回参数都使用包装的结构体类型。可以通用所有的运动模型。

2.2 两轮双舵轮

多种运动模型完善中…

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值