ROS订阅/cmd_vel话题,转化成移动机器人左右轮的转速

1,理论模型

在使用ROS导航时,move_base发布的时 /cmd_vel 话题,但是为了驱动小车,可能我们的车的底盘并不支持ros系统,因此需要通过串口通信交换数据,因此我们必须自己订阅 /cmd_vel 的话题,然后将线速度和角速度转化成小车车轮的的线速度或者转速度进行控制。
两轮小车的模型,是可以认为是一个刚体的,因为小车每一个部分之间在运动过程中不会出现位移,因此,每一个部分之间的线速度是相同的,而角速度需要转化。
如下图所示,

ROS订阅/cmd_vel话题,转化成移动机器人左右轮的转速_第1张图片

代码分析:

self.left_vel = self.dx - self.dr * self.wheel_dist / 2
self.right_vel = self.dx + self.dr * self.wheel_dist / 2

原理公式
l e f t V e l = V x − V θ ∗ w h e e l D i s t / 2 leftVel = V_x-V_\theta*wheelDist/2 leftVel=VxVθwheelDist/2
r i g h t V e l = V x + V θ ∗ w h e e l D i s t / 2 rightVel = V_x+V_\theta*wheelDist/2 rightVel=Vx+VθwheelDist/2
其中,wheelDist就是图中的wheel_dist是指两个车轮之间的间距。

2,代码片段

关于订阅 /cmd_vel 的话题就不写了,了解到这的都应该是掌握了ROS的基本原理的。

def calculate_pub(self):
        self.left_vel = self.dx - self.dr * self.wheel_dist / 2
        self.right_vel = self.dx + self.dr * self.wheel_dist / 2
        rospy.loginfo("the left_vel = %f, right_vel = %f" % (self.left_vel, self.right_vel))
        return self.left_vel, self.right_vel

注意这里得到的是左右轮的线速度,需要依据车轮半径进行换算
r p m : v = 2 ∗ π ∗ R ∗ n ( 单 位 r / m i n ) rpm: v=2*\pi*R*n (单位r/min) rpm:v=2πRn(r/min)
其中 n 为车轮转速; R 为车轮半径;rpm是转速每分钟。

v = 2 ∗ π ∗ R ∗ n / 60 ( 单 位 r / s ) v=2*\pi*R*n /60 (单位r/s) v=2πRn/60(r/s)

你可能感兴趣的:(algorithm,ROS的学习)