rostf编程指南(代码片段)

xzd1575 xzd1575     2023-01-15     135

关键词:

ROS (Robot Operating System, 机器人操作系统)是最知名的机器人操作系统,广泛应用于无人驾驶和机器人,tf(transforms,坐标系转换)是ROS下的一个常用的工具库。ros wiki 下给出了一个清晰的tutorial,然而,tf tutorial为了给出清晰的示例相对冗长,本文对tf tutorial的前六节进行了一个简略的总结,囊括了tf的发报、订阅和Debug等,希望对tf的使用有个精炼的介绍。

tf broadcaster

#include <tf/transform_broadcaster.h> //头文件
static tf::TransformBroadcaster br; //类定义
// world frame is parent frame, turtle_name frame is child frame 
br.sendTransform(tf::StampedTransform(transform, ros::Time::now(), "world", turtle_name)); //使用

tf listener

#include <tf/transform_listener.h> //头文件
tf::TransformListener listener; //类定义
// 使用
tf::StampedTransform transform;
try
// ros::Time(0)表示最近可获得的transform
  listener.lookupTransform("/turtle2", "/turtle1",  
                           ros::Time(0), transform);

catch (tf::TransformException ex)
  ROS_ERROR("%s",ex.what());
  ros::Duration(1.0).sleep();

add a frame

tf::TransformBroadcaster br;
tf::Transform transform;
transform.setOrigin( tf::Vector3(0.0, 2.0, 0.0) );
transform.setRotation( tf::Quaternion(0, 0, 0, 1) );
// ros::Time::now() 表示当前时间
br.sendTransform(tf::StampedTransform(transform, ros::Time::now(), "turtle1", "carrot1"));

tf and time & time travel

  • 获取最新的transform
// 使用ros::Time::now() 获取当前时间点的transform可能获取不到,因为获取transform有几毫米延时,当前时间点的transform还没有到达。
listener.lookupTransform("/turtle2", "/turtle1", ros::Time::now(), transform);
//改用以下两种方式
//第一种:
try
    ros::Time now = ros::Time::now();
    // ros::Duration(3.0)表示最长等3.0秒
    listener.waitForTransform("/turtle2", "/turtle1",
                          now, ros::Duration(3.0));
    listener.lookupTransform("/turtle2", "/turtle1",
                         now, transform);
    
//第二种:
try
// ros::Time(0)表示最近可获得的transform
  listener.lookupTransform("/turtle2", "/turtle1",  
                           ros::Time(0), transform);
  • 获取过去的transform
try
    // 获取5.0秒前的transform
    ros::Time past = ros::Time::now() - ros::Duration(5.0);
    listener.waitForTransform("/turtle2", "/turtle1",
                              past, ros::Duration(1.0));
    listener.lookupTransform("/turtle2", "/turtle1",
                             past, transform);

debug tf

  • 命令行
// 检查tf关系, 输出T_turtle3_turtle1, turtle3为base
rosrun tf tf_echo turtle3 turtle1
// 绘制tf tree
rosrun tf view frame
// 查看上述命令生成的frame.pdf文件
evince frame.pdf
// 监控tf,可以获得tf延时情况
rosrun tf tf_monitor turtle2 turtle1

sparkstreaming编程指南(代码片段)

SparkStreamingProgrammingGuide原文地址:https://spark.apache.org/docs/2.3.3/streaming-programming-guide.html文章目录SparkStreamingProgrammingGuideOverviewAQuickExampleBasicConceptsLinkingInitializingStr 查看详情

转-spark编程指南(代码片段)

Spark编程指南概述Spark依赖初始化Spark使用Shell弹性分布式数据集(RDDs)并行集合外部Datasets(数据集)RDD操作基础传递Functions(函数)给Spark理解闭包示例Local(本地)vs.cluster(集群)模式打印RDD的elements与Key-ValuePairs一起使用Transfor... 查看详情

spark编程指南(代码片段)

备注:根据官网http://spark.apache.org/docs/latest/rdd-programming-guide.html进行对比更新Spark编程指南 (写在前面,本文是翻译自2015年7月29日的http://spark.apache.org/docs/latest/programming-guide.html,由于水平所限࿰ 查看详情

spark编程指南(代码片段)

本文翻译文章http://spark.apache.org/docs/latest/programming-guide.html可以通过很多支持的API去操作RDD也还需要浪费很多笔墨来组织这一块的操作,因为这一块实在是非常的重要。RDDssupporttwotypesofoperations:transformations,whichcreateanewdatasetfroma... 查看详情

sparkstreaming编程指南(代码片段)

  本文基于SparkStreamingProgrammingGuide原文翻译,加上一些自己的理解和小实验的结果。  一、概述  SparkStreaming是基于CoreSparkAPI的可扩展,高吞吐量,并具有容错能力的用于处理实时数据流的一个组件。SparkStreamin... 查看详情

[转载]编程入门指南(代码片段)

编程入门指南作者:@萧井陌@Badger2015年03月03日v1.1更新2015年02月18日v1.0更新前言如今编程成为了一个越来越重要的技能:作为设计师,懂一些编程可能会帮你更好地理解自己工作内容;作为创业者,技术... 查看详情

cubemx使用freertos编程指南(代码片段)

文章目录CubeMX使用FreeRTOS编程指南一、开发前言1.1软件准备1.2开启FreeRTOS二、配置界面三、系统设置2.1调度内核设置2.2内存管理设置2.3钩子函数配置2.5任务运行追踪配置2.6协程配置2.7软件定时器配置2.8中断优先级配置三、内核裁... 查看详情

cubemx使用freertos编程指南(代码片段)

文章目录CubeMX使用FreeRTOS编程指南一、开发前言1.1软件准备1.2开启FreeRTOS二、配置界面三、系统设置2.1调度内核设置2.2内存管理设置2.3钩子函数配置2.5任务运行追踪配置2.6协程配置2.7软件定时器配置2.8中断优先级配置三、内核裁... 查看详情

android权威编程指南笔记2018-09-01(代码片段)

1.androidButton上面的英文字符串自动大写的问题解决<Buttonandroid:id="@+id/true_button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text&# 查看详情

vs15opengl编程指南配置库triangle例子(代码片段)

最近去图书馆借了一本书《OpenGL编程指南(原书第八版)》,今天倒腾了一天才把第一个例子运行出来。所以,给大家分享一下,希望能快速解决配置问题。 一、下载需要的库文件首先,我们需要去该书的网站中下载相关的... 查看详情

visualstudio2017上配置opengl编程指南第8版开发环境(代码片段)

一直想学习一下OpenGL,买了红宝书第8版,却因为工作原因一直没有时间看,最近利用周末尝试了一下配置开发环境,遇到了一些坑点,现在记录下来备用。第一步:打开VisualStudio2017,建立一个空的C++工程第二步:新建triangles.cpp... 查看详情

案例驱动:从入门到掌握shell编程详细指南(代码片段)

...15分钟,本文结合了众多的实操案例,从入门到掌握shell编程,学习起来花费时间较久,建议收藏起来慢慢学习。@TOC一、概述Shell是一个命令行解释器,接收应用程序用户命令,去调用操作系统的内核。它又是一种程序设计语言... 查看详情

opengles3.0编程指南笔记-11粒子系统(代码片段)

目录概述1.初始化粒子的位置2.更新粒子的位置和颜色源码解析效果图概述粒子的属性:寿命 a_lifetime开始位置 a_startPosition结束位置 a_endPosition中心位置 u_centerPosition颜色 u_color随机生成时间 u_time持续一秒钟1000个粒子,在1秒钟的... 查看详情

《springboot编程实战与面试指南》05-04:springboot应用的打包和部署(代码片段)

 《SpringBoot编程实战与面试指南》05-04:SpringBoot应用的打包和部署 传统的Web应用进行打包部署时,通常会打成War包的形式,然后将War包部署到Tomcat等服务器中,而SpringBoot应用使用的是嵌入式Servlet容器,也就是说,SpringBoo... 查看详情

react面试指南(代码片段)

------------恢复内容开始------------什么是声明式编程声明式编程是一种编程范式,它关注的是你要做什么,而不是如何做。它表达逻辑而不显式地定义步骤。这意味着我们需要根据逻辑的计算来声明要显示的组件。它没有描述控制... 查看详情

深入浅出java并发编程指南「难点-核心-遗漏」让我们一起探索一下completionservice的技术原理和使用指南(代码片段)

CompletionService基本介绍CompletionService与ExecutorService类似都可以用来执行线程池的任务,ExecutorService继承了Executor接口,而CompletionService则是一个接口。主要是Executor的特性决定的,Executor框架不能完全保证任务执行的异步... 查看详情

unity3d官方移动游戏优化指南5.编程和代码架构(代码片段)

UnityPlayerLoop包含与游戏引擎核心交互的函数。这种树状结构包括许多处理初始化和每帧更新的系统。所有脚本都将依赖该PlayerLoop来创建游戏玩法。在进行性能分析时,可以看到项目的所有用户代码都位于PlayerLoop下(编辑... 查看详情

深入浅出java并发编程指南「剖析篇」fork/join框架的实战开发和原理探究指南(代码片段)

前提概述Java7开始引入了一种新的Fork/Join线程池,它可以执行一种特殊的任务:把一个大任务拆成多个小任务并行执行。我们举个例子:如果要计算一个超大数组的和,最简单的做法是用一个循环在一个线程内完... 查看详情