ROS小车研究笔记:ROS TF坐标系管理

news/2024/11/18 18:46:16/

TF用于管理和查询机器人坐标系变换。通过TF,我们可以得到10秒之内任何机器人两个坐标系间的位置关系

TF使用广播/监听模型。各个节点的坐标构成TF树用以保存节点间坐标变换。如果一个节点要得到某一坐标系变换可以通过TF树进行查询

tf包中可视化tf树工具:

rosrun tf view_frames

监听tf树5秒并保存得到的结果,会生成一个pdf文件

rosrun tf tf_echo 坐标系1 坐标系2

获取到两个坐标系间的tf变换,可实时检测

tf广播和监听程序实现(基于官方海龟跟随案例)

tf广播器

#!/usr/bin/env pythonimport roslib
roslib.load_manifest('learning_tf')
import rospyimport tf
import turtlesim.msgdef handle_turtle_pose(msg, turtlename):br = tf.TransformBroadcaster()br.snedTransform((msg.x, msg.y, 0), tf.transformations.quaternion_from_euler(0, 0, msg.theta), rospy.Time.now(), turtlename, "world")if __name__ == '__main__':rospy.init_node('turtle_tf_broadcaster')turtlename = rospy.get_param('~turtle')rospy.Subscriber('/%s/pose' % turtlename, turtlesim.msg.Pose, handle_turtle_pose, turtlename)rospy.spin()

1

br = tf.TransformBroadcaster()

创建tf坐标广播器以广播tf坐标

2

br.snedTransform((msg.x, msg.y, 0), tf.transformations.quaternion_from_euler(0, 0, msg.theta), rospy.Time.now(), turtlename, "world")

创建tf坐标广播内容。由于该行在Pose回调函数里,我们使用Pose话题中得到的(x, y, 0) (由于海龟程序为平面不存在z轴)作为广播的位置坐标。Pose中theta作为角度坐标,时间戳(当前时间rospy.Time.now()),和要广播的两个坐标系

tf监听器

#!/usr/bin/env pythonimport roslib
roslib.load_manifest('learning_tf')
import rospy
import math
import tf
import geometry_msgs.msg
import turtlesim.srvif __name__ == '__main__':rospy.init_node('turtle_tf_listener')listener = tf.TransformListener()rospy.wait_for_service('spawn')spawner = rospy.ServiceProxy('spawn', turtlesim.srv.Spawn)spawner(4, 2, 0, 'turtle2')turtle_vel = rospy.Publisher('turtle2/cmd_vel', geometry_msgs.msg.Twist, queue_size=1)rate = rospy.Rate(10.0)while not rospy.is_shutdown():try:(trans, rot) = listener.lookupTransform('/turtle2', '/turtle1', rospy.Time(0))except (tf.LookupException, tf.ConnectivityException, tf.ExtrapolationException):continueangular = 4 * math.atan2(trans[1], trans[0])linear = 0.5 * math.sqrt(trans[0] ** 2 + trans[1] ** 2)cmd = geometry_msgs.msg.Twist()cmd.linear.x = linearcmd.angular.z = angularturtle_vel.publish(cmd)rate.sleep()
listener = tf.TransformListener()

创建tf监听者

(trans, rot) = listener.lookupTransform('/turtle2', '/turtle1', rospy.Time(0))

使用listener监听trutle2和turtle1在当前时间(rospy.Time(0))的tf变换。得到位置trans和旋转rot

		angular = 4 * math.atan2(trans[1], trans[0])linear = 0.5 * math.sqrt(trans[0] ** 2 + trans[1] ** 2)cmd = geometry_msgs.msg.Twist()cmd.linear.x = linearcmd.angular.z = angularturtle_vel.publish(cmd)

根据得到的平移和旋转坐标计算速度指令的线速度和角速度。发布速度指令Twist控制海龟跟随


http://www.ppmy.cn/news/51073.html

相关文章

ipvs命令~创建VS/DR模式集群

目录 1.LVS-DR模式的特点: 2.环境规划: 3.初始化配置 4.LVS服务器的LSV配置: 5.node节点配置 6.在客户端服务器,测试: 1.LVS-DR模式的特点: 所有集群节点RS必须和Director在相同的物理网段&#xff08…

华为2023暑期笔试(1-1)

题目: 有一个核心交易系统接口被N个上游系统调用,每个上游系统的调用量R[R1,R2,…,RN]。由于核心交易系统集群故障,需要暂时系统降级限制调用,核心交易系统能接受的最大调用量为cnt。   设置降级规则如下: 如果sum(R1,R2…RN) 小…

GPT模型成功的背后用到了哪些以数据为中心的人工智能(Data-centric AI)技术?

人工智能(Artificial Intelligence, AI)最近取得了巨大的进展,特别是大语言模型(Large Language Models, LLMs),比如最近火爆全网的ChatGPT和GPT-4。GPT模型在各项自然语言处理任务上有着惊人的效果。至于具…

gpt 怎么用-免费gpt下载使用方法

gpt 怎么用 GPT(Generative Pre-trained Transformer)是一种基于Transformer的神经网络模型,用于自然语言处理任务,例如文本生成、摘要生成、翻译、问答等。以下是使用GPT进行文本生成的一般步骤: 首先,您…

增长黑武器|LTD荣获“2023中国工业数字化赋能奖先锋”

​ 2014年,北京 2015年,南昌 2016年,上海 ...... 2022年,南京 2023年,4月21日 由中国生产力促进中心协会数字经济工作委员会提供指导,由托比网主办的“第六届中国工业数字化高峰论坛”在上海举行。本…

Thymeleaf——视图模板技术

Thymeleaf——视图模板技术 添加thymeleaf的jar包新建一个Servlet类ViewBaseServlet在web.xml文件中添加配置 ——配置前缀 view-prefix ——配置后缀 view-suffix使得我们的Servlet继承ViewBaseServlet根据逻辑视图名称得到物理视图名称 //此处的视图名称是index //那么thym…

Python爬虫基础-如何获取网页源代码

Python爬虫基础-如何获取网页源代码 网络爬虫(Web Crawler),又称网页蜘蛛(Web Spider),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。爬虫程序根据一组特定的规则自动的访问网站,然后抓取网页上的内容,进…

[强化学习]学习路线和关键词拾零

强化学习学习方法和路线 学习路线 先从基础教材开始,构建RL的知识框架,熟悉关键名词和公式推导,扩展到Model-Free的Value-Based和Policy-Based方法,同时参考github的代码练习。接下来精读几篇经典论文,如DQN,PPO等。…