小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
ros2 robot_localization
-
@小鱼 感谢大佬解答 现在梳理了一下 还是有小问题
1:根据淘宝imu店家的意思 把imu调整为 x y z 为北西天, 家电说输出数据直接可以对接ros不需要转换了
2调整以后 发现odom初始状态 z轴已经转为朝上, 但是x y轴依然和base_footprint有45度的夹角!看上面的图片 初始位置 odom和小车tf之间存在夹角
如果小车直线x运动,在odom y轴上也会产生位移,现在看一下 imu的配置文件
imu的话题发布为imu, 平滑包里面也改为了imu
imu的 话题里面的fram_id 改为了 imu_link ,和urdf里面的imu_link名字也统一起来了,因为imu模块在小车上并不是中心放置,所以也特意留意了这个名字的统一,如下图
3: 然后又进行了一些测试, 把平滑包里面的imu全部改为false, 只使用编码器odom来输出,
进行x轴移动,发现虽然不准确但是是正确的。
可以看出不使用imu数据 初始位置 和移动 tf都还算正常,加上imu数据以后
odom的初始位置就和小车有45度夹角,
希望大佬帮我解答一下 -
@小鱼
我用echo输出了 小车编码器的 odom话题,同时输出了imu的话题 想要寻找区别,定位到一个有差异的地方用轮编码器计算出的odom四元数数据,会在每一次重新开启节点的时候x y z w 为:0 0 0 1
而imu的话题四元数 的x y z w,不会初始化, 而是会继续上一次的数据
我猜测是imu是上电就运行,它的四元数信息有融合过磁力计, 所以不会重置。
我继续测试,
在小车开启的时候, 用键盘控制小车旋转,一直转到imu的四元数 接近 0 0 0 1这个数据,
然后退出全部节点,再重启节点, 发现imu寺院是还是退出前的数据,odom恢复为 0 0 0 1
然后用rviz观察平滑包输出的tf信息, 发现odom和base_footprint 之间的夹角非常的小了, -
@王涛 那就是IMU工作模式问题,用了地磁,上电没有校零,应该可以直接改模式,你问问卖家
-
@小鱼 是的
我用了robot_localization 最新的yaml文件, 里面有配置选项可以设置相对imu 这个问题已经解决了 谢谢大佬 -
-
@小鱼 现在又有一个新的问题
我现在是差速车
robot_localization使用的输入源odom话题里面的x y位置数据 是利用编码器的弧度+x轴速度 利用三角函数计算出的x y值
x y速度是有误差的,利用时间积分计算出的弧度误差会越来越大,导致计算出的x y值越来越偏离实际,对robot_localization不仅会失去参考价值,而且还会起反作用。robot_localization的输出信息z轴弧度是imu输入经过map反馈然后输出的相对准确的弧度。
我在考虑能否把输出后的 z轴弧度代替 编码器计算x y值三角函数里面的弧度,从而使 x y也相对准确。但是不知道怎么把robot_localization输出的小车z弧度读取出来,是可以读取相应的话题 还是要利用tf转换出来小车z轴弧度呢?
-
@王涛 把imu的z代入两轮差速模型中进行计算即可
-
@小鱼 imu的z是四元数格式 怎么转换为弧度呢?
-
-
@小鱼 请问我画圈的这个是不是z轴偏航角呢? 直接利用后面的公式就能计算出来了吗
-
@王涛 是的,可以让小伊直接把代码写出来
-
@王涛 有没有融合效果对比比较明显的数据集啊