ROS里程计模块调用(基于松林小车)

该代码示例展示了如何使用ROS中的里程计节点获取机器人速度和位姿信息,并通过积分计算移动距离。同时,它实现了一个消除静态误差的方法,动态调整静止时的误差,提高定位精度。

一、ROS里程计

ros里程计可以调用机器人传感器的信息,获取机器人速度和位姿的信息。

关于速度用Twist来获取消息,对于位置用pose对象消息来获取。代码只使用了订阅者,因为信息已经被里程计模块发布出来了。

里面无法直接得到距离或者位移信息,需要通过速度或者位姿结算,这里用积分的方式可以获取机器人移动的距离,其中写了一个消除静态误差的方法,实现的代码如下:

#include <ros/ros.h>
#include <nav_msgs/Odometry.h>//包含在nav_msgs包中的里程计头文件
// 加权平均误差
double mean_loss = 0.0;
// 加权平均参数
double lamba = 0.5;
double ds_max = 0.0;
// 测试得到的静止时的 delta_s 最大误差值
double ds_loss_max = 0.001;
//获取参数初始化
double x = 0.0;
double y = 0.0;
double s = 0.0;
//double th = 0.0;

double vx = 0.0;
double vy = 0.0;
double vth = 0.0;
//获取时间,ros中自带的包
ros::Time current_time, last_time;
//定义一个回调函数,后面在运行订阅者的时候会一直调用这个回调函数
void disCallback(const nav_msgs::Odometry::ConstPtr &msg)//找到里程计中的msg,用一个常量指针去读取
{

    ros::Rate r(1.0);//也是调用时间的操作

    ros::spinOnce(); // check for incoming messages
    current_time = ros::Time::now();
//获取信息里面的x和y方向的速度
    vx = msg->twist.twist.linear.x;
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值