当前位置: 首页 > news >正文

ROS 多级tf坐标转换

题目

现有一移动机器人,该机器人的基坐标系为“base_link”,机器人包含3个子坐标系分别为“joint1”,“joint2”,“joint3”。

要求:利用多坐标转换,实现joint1下的坐标向joint2下的坐标转换,joint2下的坐标向joint3下的坐标转换。静态坐标的位置发布和最终的程序启动采用launch文件形式,基于已有功能包进行发布,编写多坐标变换的订阅方实现,打印输出两个转换后的坐标信息

已知坐标关系:

​ joint1相对于base_link的坐标为:x = 0.2 y = 0.0 z = 0.3

​ joint2相对于base_link的坐标为:x = 0.5 y = 0.1 z = 0.4

​ joint3相对于base_link的坐标为:x = 0.3 y = 0.3 z = 0.0

已知坐标点:

joint1坐标系下的坐标为:(1.0,1.0,1.0)

joint2坐标系下的坐标为:(2.0,2.0,2.0)

方案

一.订阅方(text_tf_sub.py)

  • my_tf功能包下的scripts文件夹下创建python文件text_tf_sub.py

  • 撰写代码

#! /usr/bin/env python"""
订阅方
"""import rospy
import tf2_ros
from tf2_geometry_msgs import PointStampeddef one_two():# tfs = sub.lookup_transform("joint2","joint1",rospy.Time(0))# 创建消息对象source_point = PointStamped()  # 使用正确的消息类型    source_point.header.stamp = rospy.Time.now()source_point.header.frame_id = "joint1"    source_point.point.x = 1.0     # x偏移量source_point.point.y = 1.0 source_point.point.z = 1.0target_point_1 = sub.transform(source_point, "joint2",rospy.Duration(1))  return target_point_1def two_three():# tfs = sub.lookup_transform("joint2","joint1",rospy.Time(0))# 创建消息对象source_point = PointStamped()  # 使用正确的消息类型    source_point.header.stamp = rospy.Time.now()source_point.header.frame_id = "joint2"source_point.point.x = 2.0source_point.point.y = 2.0source_point.point.z = 2.0target_point_2 = sub.transform(source_point, "joint3",rospy.Duration(1))  return target_point_2if __name__ == '__main__':rospy.init_node("text_tf_sub_p")  # 初始化节点# 创建缓冲区对象sub = tf2_ros.Buffer()# 创建TF订阅对象listener = tf2_ros.TransformListener(sub)# 设置发布频率rate = rospy.Rate(1)while not rospy.is_shutdown():try:target_point_1 = one_two()target_point_2 = two_three()rospy.loginfo("joint1向joint2的坐标转换: x = %.2f, y = %.2f, z = %.2f ",target_point_1.point.x,target_point_1.point.y,target_point_1.point.z)rospy.loginfo("joint2向joint3的坐标转换: x = %.2f, y = %.2f, z = %.2f \n",target_point_2.point.x,target_point_2.point.y,target_point_2.point.z)except Exception as e:rospy.logwarn("不可用")rate.sleep()rospy.spin()
  • CMakeLists.txt中添加scripts/text_tf_sub.py

  • 从终端进入工作空间下的src下的功能包的scripts ~/ros_ws/src/my_tf/scripts为python文件添加可执行权限

    chmod +x *.py

二.发布方(text_tf_pub.launch)

  • my_tf下的launch文件夹下创建 text_tf_pub.launch

  • 撰写launch文件

<?xml version="1.0"?>
<launch><node name="joint1" pkg="tf2_ros" type="static_transform_publisher" args="0.2 0.0 0.3 0 0 0 /base_link /joint1" output="screen"/><node name="joint2" pkg="tf2_ros" type="static_transform_publisher" args="0.5 0.1 0.4 0 0 0 /base_link /joint2" output="screen"/><node name="joint3" pkg="tf2_ros" type="static_transform_publisher" args="0.3 0.3 0 0 0 0 /base_link /joint3" output="screen"/><node name="text_tf_sub" pkg="my_tf" type="text_tf_sub.py" output="screen"/></launch>

三.编译运行

  • 从终端进入工作空间ros_ws

    cd ros_ws

  • 编译工作空间 catkin_make

  • 刷新工作空间 source ./devel/setup.bash

  • 运行launch文件 roslaunch my_tf text_tf_pub.launch

在这里插入图片描述

相关文章:

ROS 多级tf坐标转换

题目 现有一移动机器人&#xff0c;该机器人的基坐标系为“base_link”&#xff0c;机器人包含3个子坐标系分别为“joint1”&#xff0c;“joint2”&#xff0c;“joint3”。 要求&#xff1a;利用多坐标转换&#xff0c;实现joint1下的坐标向joint2下的坐标转换&#xff0c;…...

ceph rados对象存储索引残留问题排查与处理

问题现象 对象存储存储桶无法删除&#xff0c;检查发现生命周期过期后存储桶中有文件残留&#xff0c;未完全删除&#xff0c;但实际访问文件时为404&#xff0c;通过s3cmd无法删除对象&#xff0c;且无报错。 问题定位 检查bucket当前状态&#xff0c;发现桶内有大量object…...

十年测试工龄,揭露软件测试痛点以及分析

做软件测试的同学们&#xff0c;你在平时的测试工作中有哪些困惑或困扰呢&#xff1f;你可以自行简单思考一下。下面我梳理一下&#xff0c;大家可以看看自己是不是也有如此的感受。 从测试整体角度分析&#xff1a; 第一个痛点是入门容易深入难。 很多人认为软件测试也就那么…...

【星海出品】flask(三) 组件

Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架 wsgiref 因为我们不希望接触到TCP连接、HTTP原始请求和响应格式&#xff0c;所以&#xff0c;需要一个统一的接口协议来实现这样的服务器软件&#xff0c;让我们专心用Python编写Web业务。 这个…...

关于卷积神经网络的池化层(pooling)

了解池化层 池化层又称“下采样层”或“子采样层”&#xff0c;池化层可以大大降低特征的维度&#xff0c;减少计算量&#xff0c;同时可以避免过拟合问题。 顾名思义&#xff0c;最大池化层就是从输入的矩阵中某一范围内&#xff0c;选择最大的元素进行保留&#xff1b;平均池…...

GNU链接脚本详解

0. 前言 每一个链接都是由链接脚本控制的&#xff0c;链接脚本是用链接命令语言编写的脚本。链接都会用到一个链接脚本&#xff0c;如果你没有指定自己的脚本&#xff0c;就会使用默认的链接脚本。可以用 "--verbose" 命令行选项显示默认的连接脚本。指定命令行参数…...

酷柚易汛ERP-账户管理操作指南

1、应用场景 对账户进行管理&#xff0c;可设置账户当前余额、期初余额和设置是否为默认账户。 2、主要操作 2.1 新增支付账户 打开【资料】-【账款管理】&#xff0c;点击【新增】添加账户类别&#xff0c;输入相关信息并保存&#xff0c;账户编号和名称为必录项。&#x…...

函数的连续性

函数在某一点极限存在&#xff0c;不一定连续 函数的左极限 函数的右极限 函数在某点连续需要满足三个条件 1、左右极限存在 2、左右极限相等 3、函数在该点的极限值等于在该点的函数值 满足1、2两个条件函数在该点极限存在。...

Pandas groupby方法中的group_keys属性

pandas版本1.5.3中groupby方法&#xff0c;当设置group_keysTrue时&#xff0c;会以groupby的字段为第一级索引&#xff0c;如下述代码中time_id作为第一级索引&#xff0c;同时保留了原dataframe&#xff08;df&#xff09;中的索引作为第二级索引。 >>> df.groupby…...

win 命令替代鼠标的操作

操作方式都是在 winR 输入框输入或者终端输入 1、快速打开 控制面板 运行control 2、快速打开 电源选项 运行powercfg.cpl 3、快速打开 网络连接 运行ncpa.cpl 4、快速打开 程序和功能 运行appwiz.cpl 5、快速打开 Windows Defender防火墙 运行Firewall.cpl 6、快速打开 鼠标 …...

Shopee活动取消规则是什么?shopee官方促销活动怎么取消?

作为一家知名的电商平台&#xff0c;shopee官方对于消费者取消促销活动的请求给予了相应的规定和处理流程。 shopee活动取消规则是什么&#xff1f; 首先&#xff0c;消费者应该明确了解虾皮的促销活动取消规则。根据虾皮的官方规定&#xff0c;消费者在参与促销活动之前&…...

安卓常见设计模式2------构建者模式(Kotlin版)

1. W1 是什么&#xff0c;什么是构建者模式&#xff1f; 构建者模式&#xff08;Builder Pattern&#xff09;是一种创建复杂对象的设计模式。它通过使用链式调用的方式&#xff0c;逐步构建对象&#xff0c;使得代码更易读、可维护&#xff0c;并且可以处理许多可选参数的情况…...

redis主从复制+哨兵

1.主从复制 redis配置文件redis.conf master机器&#xff1a;IP 192.168.1.5 &#xff0c;端口 6379 设置配置参数 daemonize yes #bind 127.0.0.1 -::1 protected-mode no port 6379 dbfilename "dump.rdb" dir "/root/redis/my_redis_conf/dumpdir" l…...

html动态爱心超文本标记代码,丝滑流畅有特效,附源码

没想到现在看个剧&#xff08;点燃我&#xff0c;温暖你&#xff09;要的同款居然是代码&#xff0c;李峋 这盛世如你所愿啊&#xff01;李峋的同款爱心代码来啦&#xff0c;拿走试试吧&#xff5e; <!DOCTYPE html> <html><head><title></title&g…...

力扣:162. 寻找峰值(Python3)

题目&#xff1a; 峰值元素是指其值严格大于左右相邻值的元素。 给你一个整数数组 nums&#xff0c;找到峰值元素并返回其索引。数组可能包含多个峰值&#xff0c;在这种情况下&#xff0c;返回 任何一个峰值 所在位置即可。 你可以假设 nums[-1] nums[n] -∞ 。 你必须实现时…...

【Python】20大报告生成词云

这个我其实写过一篇类似的博客&#xff0c;但是那个的文件对象是.csv&#xff0c;对应到.docx文件的话&#xff0c;就不太适用了。如下&#xff1a; Python生成词云-CSDN博客 代码&#xff1a; import jieba import os import wordcloud import numpy as np from PIL import…...

目标检测YOLO实战应用案例100讲-基于无人机的轻量化目标检测系统设计

目录 前言 国内外研究现状 国外研究现状 国内研究现状...

ansible-第二天

ansible 第二天 以上学习了ping、command、shell、script模块&#xff0c;但一般不建议使用以上三个&#xff0c;因为这三个模块没有幂等性。举例如下&#xff1a; [rootcontrol ansible]# ansible test -a "mkdir /tmp/1234"[WARNING]: Consider using the file …...

【测试工具】UnixBench 测试

一、UnixBench 简介 UnixBench 原本叫做 BYTE UNIX benchmark suite。软件为 Unix 类的系统提供了一些基本的性能指标。通过不同的测试来测试系统不同方面的性能&#xff08;2D&#xff0c;3D&#xff0c;CPU&#xff0c;内存等等&#xff09;。这些测试的结果将和一些标准的系…...

软件测试金融项目,在测试的时候一定要避开的一些雷区

软件测试金融项目需要格外谨慎和专注&#xff0c;因为这些项目通常涉及大量的交易、用户隐私和其他敏感信息。以下是一些软件测试金融项目时需要关注的方面&#xff1a; 1. 数据保护 在测试金融项目时&#xff0c;必须确保用户数据和投资信息得到保护。测试人员必须确保测试环…...

别再只调参了!用PyTorch实战ERL算法,让进化算法帮你自动探索强化学习策略

别再只调参了&#xff01;用PyTorch实战ERL算法&#xff0c;让进化算法帮你自动探索强化学习策略 当你在深夜盯着屏幕上的DDPG训练曲线&#xff0c;看着那个始终徘徊在基线附近的奖励值&#xff0c;是否想过——或许有更聪明的方式让AI自己找到突破口&#xff1f;去年我们在开发…...

树莓派4B无头模式极简指南:5分钟搞定SSH+WiFi预配置(含国内源加速)

树莓派4B无头模式极简配置&#xff1a;SSHWiFi预配置与国内源加速实战 1. 无头模式的核心价值与准备工作 无头模式&#xff08;Headless Mode&#xff09;彻底解放了树莓派对显示器和外设的依赖&#xff0c;让这块信用卡大小的计算机真正成为物联网项目的隐形引擎。想象一下&am…...

紧急预警:未建立AI生成代码可信度评估机制的敏捷团队,正面临Sprint Review阶段平均2.8次重大逻辑回滚(附ISO/IEC 23894合规自检表)

第一章&#xff1a;智能代码生成在敏捷开发中的应用 2026奇点智能技术大会(https://ml-summit.org) 智能代码生成正深度融入敏捷开发的迭代闭环&#xff0c;成为提升需求响应速度与交付质量的关键杠杆。它不再仅作为辅助补全工具&#xff0c;而是嵌入用户故事拆解、测试驱动开…...

Claude Code每日更新速览(v2.1.111v2.1.112)-2026/04/17

近期&#xff0c;Claude Code 迎来一轮较大更新&#xff0c;核心围绕以下几个方向展开&#xff1a;更强的推理能力控制&#xff08;Opus 4.7 xhigh&#xff09;自动化智能调度&#xff08;Auto Mode&#xff09;多 Agent 代码审查&#xff08;/ultrareview&#xff09;CLI 体验…...

P13 | 异步任务:后台长时间操作的最佳实践

P13 | 异步任务:后台长时间操作的最佳实践 💰 付费文章 | 第二阶段:后端开发 为什么需要异步任务? 有些操作耗时很长,不适合同步等待: 操作 耗时 是否需要异步 查询列表 < 200ms ❌ 上传单张图片 1-3s ⚠️ 可选 批量生成 ZIP 打包下载 10s-5min ✅ 必须 AI 人脸识别…...

golang如何实现滑动窗口计数器_golang滑动窗口计数器实现思路

滑动窗口计数器不能只用map定时清理&#xff0c;因会漏统计非整点对齐的请求&#xff1b;必须保留带时间戳事件或时间分片&#xff0c;常用环形数组实现&#xff0c;按需shift比ticker更精准高效。滑动窗口计数器为什么不能只用 map 定时清理直接用 map[string]int 存请求次数…...

g4f提供的模型调用:python JavaScript和curl

g4f提供模型的使用&#xff0c;例子页面&#xff1a;G4F - Providers and Models 可以这样&#xff1a; python from g4f.client import Clientclient Client() response client.chat.completions.create(model"",messages[{"role": "user"…...

AD22更新网表时总是显示 net with name XXX In already exists

目录 常规检查 系统性问题排查流程 其他原因导致的问题 常规检查 检查并修正原理图 查找重复网络标签在原理图中,使用查找功能全局搜索CMD_In,检查是否存在多个同名的网络标签(Net Label)。如果发现重复,需要删除多余的并确保所有连接到该网络的导线正确连接。 重新放置…...

乐视三合一体感摄像头Astra pro开发实践2(多平台环境配置与数据采集优化)

1. 多平台环境配置实战 乐视三合一体感摄像头Astra Pro确实是个性价比超高的开发设备&#xff0c;我在Windows和Ubuntu双系统下都折腾过它的环境配置。先说Windows平台&#xff0c;最容易踩坑的就是OpenNI2的驱动问题。第一次安装时直接从GitHub下载了OpenNI2&#xff0c;结果死…...

别再粗暴地用Ctrl-C了!Python中安全停止后台任务的5种设计模式

Python后台任务优雅终止的5种工程实践 当你在凌晨三点被生产环境告警惊醒&#xff0c;发现某个Python服务在滚动更新时丢失了关键数据&#xff0c;而原因仅仅是运维人员用Ctrl-C强制终止了进程——这种场景足以让任何开发者脊背发凉。不同于临时脚本&#xff0c;长期运行的服务…...