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

1,理论模型

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

代码分析:

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)

  • 6
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
ROS机器⼈技术 机器⼈技术-rosbag详细使⽤教程 详细使⽤教程! 在 ROS 系统中,可以使⽤ bag ⽂件来保存和恢复系统的运⾏状态,⽐如录制雷达和相机话题的 bag 包,然后回放⽤来进⾏联合外参标定。 这⾥记录下我学习官⽅的 rosbag 教程的笔记: 我常⽤的⼏个操作 我常⽤的⼏个操作 虽然命令很多,但是我⽬前在⼯作中常⽤的命令就如下⼏个: 1. 录包 录包 录制所有话题rosbag record -a 录制指定话题,设置 bag 包名: rosbag record -O bag_name.bag /topic1_name /topic2_name /xxx 有时候我录制包不设置名称,默认按照录制结束时间命名: rosbag record /topic1_name /topic2_name /xxx 2. 回放 回放 我常⽤的是以暂停的⽅式启动,防⽌跑掉数据: rosbag play --pause record.bag 你也可以直接回放: rosbag play record.bag 我建图过程中有时会设置以 0.5 倍速回放,也就是以录制频率的⼀半回放: rosbag play -r 0.5 record.bag 回放完后,我⼀般会⽤ rostopic list 查看下发布的主题,确保是我需要的: rostopic list 3. 修复 修复 之前在我们⼩车的 Intel NUC 上录包拷到台式机上回放会报错,提⽰需要 reindex,执⾏⼀下即可,不过数据好像会少⼀些: rosbag reindex xxx.bag 下⾯是完整的 rosbag ⽤法,需要的可以查找下。 ⼀、 ⼀、rosbag 基本作⽤ 基本作⽤ rosbag ⼯具可以录制⼀个包、从⼀个或多个包中重新发布消息、查看⼀个包的基本信息、检查⼀个包的消息定义,基于 Python 表达式过滤 ⼀个包的消息,压缩和解压缩⼀个包以及重建⼀个包的索引。 rosbag ⽬前常⽤的命令如下(fix 和 filter 暂时没有⽤到): record:⽤指定的话题录制⼀个 bag 包 info:显⽰⼀个 bag 包的基本信息,⽐如包含哪些话题 play:回放⼀个或者多个 bag 包 check:检查⼀个 bag 包在当前的系统中是否可以回放和迁移 compress:压缩⼀个或多个 bag 包 decompress:解压缩⼀个或多个 bag 包 reindex:重新索引⼀个或多个损坏 bag 包 我在⽬前项⽬的使⽤中,⽤的最多的就是 record、info 以及 play 功能,先录制想要的话题包,录制完毕检查下包的信息,最后再回放作为 算法的输⼊,下⾯就详细学习下上⾯命令的⽤法。 ⼆、 ⼆、rosbag record 使⽤ record 订阅指定主题并⽣成⼀个 bag ⽂件,其中包含有关这些主题的所有消息,常见⽤法如下。 ⽤指定的话题 topic_names 来录制 bag 包: rosbag record <topic_names> ⽐如录制 rosout、tf、cmd_vel 3 个话题,录制的 bag 包以时间命名: rosbag recoed rosout tf cmd_vel 录制完保存 bag 包名称为 session1 + 时间戳.bag 格式: rosbag record -o session1 /chatter 录制完保存为指定⽂件名 session2_090210.bag: rosbag record -O session2_090210.bag /chatter 录制系统中所有的话题rosbag record -a 使⽤ -h 查看 record 使⽤⽅法,很多命令都可以⽤这个: rosbag record -h 三、 三、rosbag info rosbag info 显⽰包⽂件内容的可读摘要,包括开始和结束时间,主题及其类型,消息计数、频率以及压缩统计信息,常见⽤法如下: 显⽰⼀个 bag 包的信息: rosbag info name.bag $ rosbag info foo.bag path: foo.bag version: 2.0 duration: 1.2s start: Jun 17 2010 14:24:58.83 (1276809898.83) end: Jun 17 2010 14:25:00.01 (1276809900.01) size: 14.2 KB messages: 119 compression: none [1/1 chunks] types: geometry_msgs/Point [4a842b65f413084dc2b10fb484ea7f17] topics: /points 119 msg

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值