实物机器人发布odom到baselink的tf变换

实物机器人发布odom到baselink的tf变换

摘要:

ros navigation stack的输入默认是amcl定位,该定位包做好了map->odom->base_link的变换的,当需要替换为其他定位方式或定位包时就不一定有这个转换了。本文主要介绍如何提供定位包需要订阅的odom->base_link的变换。

参考

官方资料:链接1
翻译资料:链接2

真实机器人的tf变换

ros官方有个教程,该教程假设了机器人走一个圆。基础可以参考上方链接。本文之展示如何通过轮速里程计来开发,尤其是轮速来获取速度和位置。

    int leftSpeedTick = encoderMsg->leftTick;
	int rightSpeedTick = encoderMsg->rightTick;

	double leftRpm = (double)leftSpeedTick * 60.0 / 65536.0 / wheelRate_;
	double rightRpm = (double)rightSpeedTick * 60.0 / 65536.0 / wheelRate_;


	double vx = rpm_to_liner_vel_x(leftRpm,rightRpm);
	double vth = rpm_to_liner_vel_th(leftRpm,rightRpm);

	current_time = ros::Time::now();

	//compute odometry in a typical way given the velocities of the robot
	double dt = (current_time - last_time).toSec();



	double delta_x = (vx * cos(th)) * dt;
	double delta_y = (vx * sin(th)) * dt;
	double delta_th = vth * dt;

	x += delta_x;
	y += delta_y;
	th += delta_th;

版权声明:本文为u012197995原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。