安徽快3下载安装_安徽快3押大小怎么玩-官网|首页
  主页 | 安徽快3下载安装 | 装修效果 | 装修攻略 | 装修报价 | 公司简介
 
 ????:主页 > 安徽快3下载安装 > ??  
ROS探索总结(二十一)如何发布里程计消息
??:未知 ??:admin ??:2019-08-27 ??:
 

  ROS使用tf来决定机器人的位置和静态地图中的传感器数据,但是tf中没有机器人的速度信息,所以导航功能包要求机器人能够通过里程计信息源发布包含速度信息的里程计nav_msgs/Odometry 消息。 本篇将介绍nav_msgs/Odometry消息,并且通过代码实现消息的发布,以及tf树的变换。

  nav_msgs/Odometry消息包含有机器人在自由空间中的位置和速度估算值。

  pose参数包含机器人在里程计参考系下的位置估算值,同时带有可选的估算协方差。twist参数包含机器人在子参考系(一般是机器人基础参考系)下的速度,同时带有可选的速度估算协方差。

  这里使用一个简单的例程,实现 nav_msgs/Odometry消息的发布和tf变换,通过伪造的数据,实现机器人圆周运动。

  我们需要实现“odom”参考系到“base_link”参考系的变换,以及nav_msgs/Odometry消息的发布,所以首先需要包含相关的头文件。

  定义一个消息发布者来发布“odom”消息,在定义一个tf广播,来发布tf变换信息。

  我们设置机器人的默认前进速度,让机器人的base_link参考系在odom参考系下以x轴方向0.1m/s,Y轴速度-0.1m/s,角速度0.1rad/s的状态移动,这种状态下,可以让机器人保持圆周运动。

  使用1Hz的频率发布odom消息,当然,在实际系统中,往往需要更快的速度进行发布。

  使用我们设置的速度信息,来计算并更新里程计的信息,包括单位时间内机器人在x轴、y轴的坐标变化和角度的变化。在实际系统中,需要更具里程计的实际信息进行更新。

  为了兼容二维和三维的功能包,让消息结构更加通用,里程计的偏航角需要转换成四元数才能发布,辛运的是,ROS为我们提供了偏航角与四元数相互转换的功能。

  创建一个tf发布需要使用的TransformStamped类型消息,然后根据消息结构填充当前的时间戳、参考系id、子参考系id,注意两个参考系的id必须要是“odom”和“base_link”。

  别忘了,我们还要发布nav_msgs/Odometry消息,让导航包获取机器人的速度。创建消息变量,然后填充时间戳。

  填充机器人的位置、速度,然后发布消息。注意,我们发布的是机器人本体的信息,所以参考系需要填base_link。

  本文链接地址:ROS探索总结(二十一)如何发布里程计消息

  古月老师你好,我目前在机器人上装了麦克风用于声源定位,但是想结合导航的避障功能进行声源追踪,我该怎么转换麦克风定的位置信息转换传给movebase让它实现追踪呢?我麦克风定位的信息是属于上面的odom,base_link中的哪一个呢?

  你好,关于odom到base_link的tf变换和topic消息传递不太明白,我在用amcl定位的时候,发现只要在tf那边给了正确的数据,topic msg这边即使全部赋值0也不影响amcl运行,请问这是为什么呢?

  @fason_zhamcl的输入是激光雷达的信息,并不是里程计的数据,输出是基于激光的定位估计

  古老师,我是ros的一个初学者。在学习的过程中发现像odom.pose.pose.position这类的东西很疑惑。为什么要加那么多小数点。想知道是什么结构。还请指教。谢谢古老师

  @李志明这个就是编程语言的数据结构,只不过包含的层次多了一些,wiki上可以查到odom的具体数据结构定义

  您好,我现在想用gps+imu来替代里程计,请问需要读取什么数据,替换掉您的代码的哪些地方

  @古月古老师,我现在将gps+imu输出的位置经过坐标转换作为odom的Pose输入,然后线速度与角速度也替换掉了,关于发布的/odom主题的四元数和协方差我还是不太能理解,在实际试验中,这个四元数和协方差应该如何解决?谢谢古老师!

  老师,您好!我想问一下,我采用的是增量式编码器,通过串口需要从编码器中读取什么数据?读取到的数据是填到您代码中的什么地方?

  @terminal具体要结合你是用传感器的数据内容,主要是当前的速度填到代码中,积分得到位置

  你好,古月大神,我按照你的程序发布了里程计信息,在RVIZ中模拟时,也发现机器人会动,发布消息的时候,机器人模型会跳到实际的位置,但是消息发完后,机器人模型又回到原来的位置,在RVIZ中观察,机器人一跳一跳的,不知道哪的原因,谢谢

  @古月解决了,应该是模拟器发布的的tf变换。现在发现另外一个问题,我启动的机器人模型,然后启动了map_server 和move_base,然后利用程序发布里程计信息(我把里程计的值设为0),然后在rviz中设置目标点,rviz中有提示,说目标点设置成功,但是监控cmd_vel,没有任何的数据发送,不知道怎么回事。我主要想利用伪造的里程计信息,测试一下move_base,监控发送的cmd_vel,然后可以直接移植到小车上。古月大神,是否可以讲一下,谢谢。

  现在教程看了一遍,在模拟环境下测试了一下,但是还是感觉和实际的机器人硬件有点脱轨。

  @pety里程计模拟的话最好有变化,可以走一个圆出来,可以参考《ROS by example》

  采用的是ROSArduinoBridge包,arduino作为底层硬件。现在已经实现了从ROS向Arduino发送速度消息,轮子也能转起来,运动方向也是正确的。(还未组装底盘,只是观察轮子运动的方向)。

  从rviz中观察到(以odom作为固定框架),base_link的轨迹,居然是在画圆。我原本期望轨迹应该是走直线。

  造成这个问题的原因,是不是因为,发布里程计的代码计算方式的问题?下面这是rosarduinobridge包中的base_controller.py 的代码,请您看下。究竟如何才能显示直线的轨迹呢?

  @fish9210程序还是自己调试一下,走直线的时候不会有角速度,调试看下变量的值

  你好,我想问一下就是我现在可以用编码器读取单位时间内电机转过的圈数,然后要怎么转换成速度(我问的是一个单位问题,就是怎么转换成odom用的数据,因为我后续要用robot_pose_ekf对编码器和imu进行卡尔曼融合),所以这个单位怎么去统一? 🙂

  @古月好的,那假如我现在要slam建图,是不是odom需要和base_link同步,上文中程序base_link替换为map?因为我的odom是相对map移动的,需要这样修改吗?

  @Ziping不用的,坐标系之间的变换是slam功能包完成的,自己只要发布odom和base_link之间的变换就可以了

  你好,我想问一下就是我现在可以用编码器读取单位时间内电机转过的圈数,然后要怎么转换成速度(我问的是一个单位问题,就是怎么转换成odom用的数据,因为我后续要用robot_pose_ekf对编码器和imu进行卡尔曼融合),所以这个单位怎么去统一?

  你好,古月大师。请问一下,如果自己搭建的小车无法输出运动速度和方向,也就是没有里程计信息,想通过激光雷达(Hokuyo)的扫描数据在地图(地图用hector_mapping得到)中定位,是否可行?顺便问一句,使用里程计信息进行导航的纠偏原理是什么?

  @Billy可以的, 使用hector包就可以实现激光定位。使用里程计会有累积误差,可以用卡尔曼滤波减少误差,同时配合其他传感器纠正定位。

  @古月多谢指教!还有个疑问,hector实现绘制地图与定位,那如何在绘制的地图中进行导航与纠偏呢?还能使用move_base包吗?我看move_base包订阅了/odom主题,但我没有里程计信息,怎么实现呢?

  @Billyhector和gmapping建立的地图都是一样的,都可以用来导航,导航必须要有里程计话题的,里程计有很多种,如果你都没有的话,找下ROS里有没有基于激光雷达实现里程计话题的功能包

  你好 古月 最近在用gazebo做强化学习,看的东西有些糊涂了。现在我在我的程序中提取小车的实时坐标,我想就用里程计的数据来表示坐标,可是看到了tf,似乎需要将里程计信息转换成map坐标?可是gazebo里面没有map啊,有些迷茫,希望能给点建议

  您好,想问下这个如何得到真实的odom,是要时时更新vx vy vth么?我用gmapping,需要odom信息,才能发布速度,那我odom又要订阅速度。。。。有点懵。。。。

  @Aaron你好,速度是积分算出来的,也就是单位时间内的编码器旋转圈数,然后填入odom

  @古月我原先这么想的,但是我不太知道是不是需要再写一个节点去读编码器的值运算后发布出速度信息,之后odom再去订阅获得信息

  @古月因为我是用串口通信。那我就先用串口读车的编码器的数据,进行积分,代替vx等,算出速度串口再发给地盘。这样理解对么?我用编码器算出的速度和我最后用slam算出的速度的差异在哪里。

  @Aaron可以的,很多机器人都是这样做的,通过串口直接读取到速度。这个地方你可能理解的不是很清楚,SLAM并不计算速度,相反的,SLAM需要机器人提供速度信息,也就是odom消息。这篇博客是在odom中积分计算速度的,和你在底盘控制器上计算速度原理一样,只是位置不同而已。

  想要写个code 可以直接 改变Pose 值 已经困扰很久但是一直找不到方法

  @Liu您好,这种方法是可以修改机器人的位置,但是除了发布odom消息外,还需要修改odom的tf变换,你在代码中的实现流程应该是这样的:

  另外,可以参考《ROS by example》这本书中的Turtlebot控制,有配套的代码可以参考

  您好,我是最近接触tf与导航系统的。我不太清楚这里的协方差是用来表示什么的?是谁与谁的协方差?希望能回答,谢谢。

  @acyloin你好,这里协方差的概念目前我也不是很理解,涉及到位置估计方面的算法,我还没有研究过这个方面。

  @古月您好,我想问下tf的根坐标系是怎么建立的,也就是第一个坐标系是怎么确定的?

  古月老师您好,我想请教一下关于ROS控制线.通过笛卡尔空间规划得到了一个位姿数组,当通过write()方法发送给真实的机器人控制器的时候,这个位姿数组是一次性发送出去吗?或者是,按照一定的定时间隔,依次发送位姿数组的各个元素(每个元素是各个轴的旋转角度),直至数组遍历完毕为止? 2.使用sw2urdf插件导出机器人模型时,关节坐标系的原点如何选定,是否要严格按照D-H法则标定各关节的坐标系?或者是,这个插件会自动按照D-H法则来生成各关节的坐标系?

  古月老师,您好,我现在正在做论文,通过AR(微软的Hololens)控制真实机器人运动的,您的文章我看了很多,对我的帮助也很大,论文中很多的问题都是通过看您的文章慢慢得到解决的,非常感谢您的知识分享。现在我这边有个问题,请问您知道如何将AR装置和ROS里的moveIt进行通信连接吗?就是我在AR界面操作虚拟机器人,然后moveIt里的机器人也会跟着运动,网上关于这个方面的资料很少很少,很期望得到您的回复和解答,谢谢您!


???????? ? ?? ???? ????
????
DYM3型空盒气压表DYM3型大气压力 2019/09/03 01:37:56
ROS探索总结(二十一)如何发布 2019/08/27 19:40:30
里程计 里程计的意思 是什么意思 2019/08/27 19:40:21
计算机视觉方向简介 视觉惯性里 2019/08/27 19:39:52
【泡泡图灵智库】视觉语义里程计 2019/08/27 19:39:24
密封圈有多少种类每种有什么作用 2019/08/22 22:49:18
GA防尘圈 2019/08/22 22:49:09
防尘圈是什么意思防尘圈可以分哪 2019/08/22 22:49:00
【防尘圈】价格_图片_品牌_怎么 2019/08/22 22:48:52
汽车汽压表 - 商品搜索 - 京东 2019/08/19 21:21:07
 ????
·大牛讲堂|SLAM最终话:视觉里程
·上海自动高压无气喷涂机价格表_
·平谷老味道:老物件做年味豆腐
·2020云南考研英语词汇:aviation
·防尘圈是什么意思 防尘圈可以分
·ROS里程计的学习(odometry) (一)
·【泡泡图灵智库】针对基于优化的
·【泡泡图灵智库】VIMO: 同时估
 
 ????
·气压表_百度百科
·一盘石磨-老年生活-生活晨
·【泡泡图灵智库】一种应用
·没有设置防尘网工地施工尘
·【气压表】批发价格图片型
·信息资讯:国内首个智能化
·通过激光雷达和里程计的数
·贵港市有没有气压表检定机
 
 

Copyright © 2002-2019 DEDECMS. 织梦科技 版权所有 Power by DedeCms