第17讲配置及操作参考链接

https://blog.csdn.net/takedachia/article/details/122602199

实操总结

修改完各种配置之后,要运行rosrun tf view_frames前,记得切回原路径,否则会报错显示无法读取某些文件

tf坐标系广播与监听的编程实现

实现tf广播器

1、定义tf广播器
2、创建坐标变换值
3、发布坐标变换

#include <ros/ros.h>
#include <tf/transform_broadcaster.h>
#include <turtlesim/Pose.h>std::string turtle_name;void poseCallback(const turtlesim::PoseConstPtr& msg)
{
//创建tf的广播器static tf::TransformBroadcaster br;
//初始化tf数据tf::Transform transform;transform.setOrigin(tf::Vector3(msg->x,msg->y,0.0));tf::Quaternion q;q.setRPY(0,0,msg->theta);transform.setRotation(q);
//广播world与海龟坐标系之间的tf数据br.sendTransform(tf::StampedTransform(transform,ros::Time::now(),"world",turtle_name));
}int main(int argc,char** argv)
{
//初始化ROS节点ros::init(argc,argv,"my_tf_broadcaster");
//输入参数作为海龟的名字if(argc!=2){ROS_ERROR("need turtle name as argument");return -1; }turtle_name=argv[1];
//订阅海龟的位姿话题ros::NodeHandle node;ros::Subscriber sub =node.subscribe(turtle_name+"/pose",10,&poseCallback);
//循环等待回调函数ros::spin();return 0;};

实现tf监听器

#include <ros/ros.h>
#include <tf/transform_listener.h>
#include <geometry_msgs/Twist.h>
#include <turtlesim/Spawn.h>int main(int argc,char** argv)
{
//初始化ROS节点ros::init(argc,argv,"my_tf_listener");ros::NodeHandle node;
//创建节点句柄ros::service::waitForService("/spawn");
//请求产生turtle2ros::ServiceClient add_turtle=node.serviceClient<turtlesim::Spawn>("/spawn");turtlesim::Spawn srv;add_turtle.call(srv);//创建发布turtle2速度控制指令的发布者ros::Publisher turtle_vel=node.advertise<geometry_msgs::Twist>("/turtle2/cmd_vel",10);
//创建tf的监听器tf::TransformListener listener;ros::Rate rate(10.0);while(node.ok()){
//获取turtle1与turtle2坐标系之间的tf数据tf::StampedTransform transform;try{listener.waitForTransform("/turtle2","/turtle1",ros::Time(0),ros::Duration(3.0));listener.lookupTransform("/turtle2","/turtle1",ros::Time(0),transform);}catch(tf::TransformException &ex){ROS_ERROR("%s",ex.what());ros::Duration(1.0).sleep();continue;}
//根据turtle1与turtle2坐标系之间的位置关系,发布turtle2的速度控制指令       geometry_msgs::Twist vel_msg;vel_msg.angular.z=4.0*atan2(transform.getOrigin().y(),transform.getOrigin().x());vel_msg.linear.x=0.5*sqrt(pow(transform.getOrigin().x(),2)+pow(transform.getOrigin().y(),2));turtle_vel.publish(vel_msg);rate.sleep();}return 0;
}

Cmakelists编译链接(通用模板)

add_executable(person_publisher src/person_publisher.cpp)//将person_publisher.cpp文件编译成可执行文件
target_link_libraries(person_publisher ${catkin_LIBRARIES})//设置链接库

编译运行参考链接

https://blog.csdn.net/takedachia/article/details/122614953?spm=1001.2014.3001.5502

古月居21讲 第17-18讲学习日记 tf坐标系相关推荐

  1. ROS古月居21讲笔记

    文章目录 1.C++&python极简教程: 1.1安装编译器(python是解析器) 1.2 for循环 1.3 while循环 1.4 面向对象 2.ROS命令行工具 3.初始化操作 3. ...

  2. 古月居21讲学习笔记 10—15讲总结 话题VS服务

    模型对比 话题模型 服务模型 数据类型 两种数据在建立的时候都建议放在一个单独的文件夹内方便管理 话题消息 msg文件 服务数据 srv文件 自定义数据创建流程(统一) 1.定义对应的msg/srv文 ...

  3. ROS初学者的笔记(基于古月居21讲)——P11 订阅者Subsciber的编程实现

    学习日期:2022.7.24 初始化节点 创建节点句柄 创建subscriber,订阅需要的话题 循环等待话题消息,接受到消息后进入到回调函数 在回调函数中完成消息处理 回调函数的作用是,subcri ...

  4. 【古月居ROS 21讲】精简理清 - 速刷古月居ROS21讲 ROS概念全过程

    速刷古月居ROS21讲概念全过程 ROS的概念:对应第七讲 通讯机制 节点 (Node)-- 执行单元 节点管理器(ROS Master) 话题和消息 话题(Topic) -- 异步通信机制 消息(M ...

  5. ROS ubuntu20.0 noetic 古月居gazebo模型倒入脱坑

    ROS ubuntu20.0 noetic 古月居gazebo模型倒入脱坑 在学习古月老师课程时,因为用的noetic版本,所以好多地方不兼容,下面就是对于代码进行了调整!!!roslaunch mb ...

  6. 4.18列表学习笔记及作业

    4.18 列表学习日记及答案 认识列表 1.容器型数据类型(序列) 变量从是否是容器分为:非容器型数据类型的变量和容器型数据类型的变量; 非容器型数据类型的变量 - 一个盒子里面只有一个格子,所以同一 ...

  7. 古月居ROS入门21讲笔记

    ROS入门21讲笔记--古月居 1 C++&Python极简基础 1.1 安装编译/解析器 1.2 for循环 1.3 while循环 1.4 面向对象 2. ROS基础 2.1 ROS概念 ...

  8. 古月居《ROS入门21讲》零基础学习笔记

    文章目录 前言 1.课程简介 2.Linux系统介绍及安装 3.Linux基础操作(操作集) 命令结构 常用命令 快捷操作 4.cpp&python极简基础(操作集) 简单对比 安装编译器 编 ...

  9. 古月居 ROS 21 讲5

    古月居 ROS 21 讲 5.话题消息的订阅与使用 1)完成数据接口的定义:在learning topic中创建msg,打开终端设置 string name uint8 sex uint8 age u ...

最新文章

  1. ​GEB:焦硕等发表生态位的系统发育保守性决定土壤古菌地理格局
  2. jQuery元素过滤
  3. hdu 3671 Boonie and Clyde
  4. python判断ip能否ping通_Python实现检测服务器是否可以ping通的2种方法
  5. Windows 7旗舰版安装Visual Studio 2013 Ultimate的系统必备及注意事项
  6. C++ auto_ptr存在的问题
  7. 和菜鸟一起学linux之V4L2摄像头应用流程【转】
  8. (day 52 - 先序后序遍历计数 ) 剑指 Offer 55 - II. 平衡二叉树
  9. 程序员最应该读的图书
  10. c语言编文曲星游戏,关于汉诺塔游戏的思路(就是最早文曲星上移盘子的那个)...
  11. 论文阅读《UV-SLAM: Unconstrained Line-Based SLAM Using Vanishing Points for Structural Mapping》R-AL 2022
  12. lua遍历目录下所有文件
  13. 3.3:如何在Python中创建文件?
  14. 【泛函分析】Riemann积分与Lebesgue积分
  15. 在linux中使用vi 打开文件时,能显示行号
  16. mysql互为主从注意事项_MySQL互为主从复制常见问题
  17. vs2010 玩转金山界面库 (2) 应用基础
  18. 2位专家耗时2年打造,西瓜书机器学习公式详解,都在这里了!(文末留言赠书)...
  19. 网易云信音视频能力中台,聚焦银行业数字化转型
  20. mac+修改+ssh文件夹权限_MAC创建SSH客户端配置文件

热门文章

  1. 盘点那些《隐秘的角落》带来的影响
  2. 把codeblock变好看
  3. java基于ssm+vue+elementUI在线影评电影评论投票系统
  4. 原神私服搭建二: 搭建服务端
  5. 可解释人工智能——特征可视化
  6. fatal: No url found for submodule path ‘xxx‘ in .gitmodule
  7. 滚珠开关怎样使用更稳定?
  8. mac 常用快捷键整理
  9. 湖南无线数字电服务器,戴尔服务器搭建湖南省高校数字化图书馆
  10. 每天学习Java一点点