古月居ROS入门21讲-坐标系管理

ROS入门21讲(古月居) 学习笔记 Linux系统基础操作 cd命令 语法:cd<目录路径> 功能:改变工作目录.若没有指定’目录路径’,则回到用户的主目录 pwd命令 语法:pwd 功能:此命令显示当前工作目录的绝对路径. mkdir命令 语法:mkdir[选项]<目录名称> 功能:创建一个目录. ls命令 语法:ls[选项]<目录名称> 功能:列出目录的内容 touch命令 语法:touch[选项]<目录名称> 功能:改变文件或目录时间. mv命令 语法:mv[选项]<源文件或目录&g 阅读详情

视频链接:bilibili 搜 古月居
源代码:关注古月居公众号,回复ROS入门21讲

1 TF坐标变换

实现方式:广播TF变换,监听TF变换
roslaunch用于启动launch文件,launch相当于一个多节点启动的脚本文件

1.1 常用工具

17讲11分

1.终端1 运行launch文件
roslaunch turtle_tf turtle_tf_demo.launch 
2.终端2 控制小海龟
rosrun turtlesim turtle_teleop_key
3.1 终端3 可视化各个坐标系间关系,生成pdf文档显示tf tree
rosrun tf view_frames
3.2 获取任意两个坐标系间位置关系,给出两坐标系间平移和旋转数值
rosrun tf tf_echo tf_name1 tf_name2
3.3 三维直观显示坐标系间关系
rosrun rviz rviz -d 'rospack find turtle_tf' /rviz/turtle_rviz.rviz
# RVIZ工具中Fixed Frame选world
# 左下角点[Add]选择TF添加进来

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

2.1 创建功能包

cd ~/catkin_ws/src
catkin_create_pkg learning_tf roscpp rospy tf turtlesim

2.2 创建tf广播器代码(C++)

/***********************************************************************
Copyright 2020 GuYueHome (www.guyuehome.com).
***********************************************************************/

/**
 * 该例程产生tf数据,并计算、发布turtle2的速度指令
 */

#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;
};

2.3 创建tf监听器代码(C++)

/***********************************************************************
Copyright 2020 GuYueHome (www.guyuehome.com).
***********************************************************************/

/**
 * 该例程监听tf数据,并计算、发布turtle2的速度指令
 */

#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;

	// service编程,请求产生turtle2
	ros::service::waitForService("/spawn");
	ros::ServiceClient add_turtle = node.serviceClient<turtlesim::Spawn>("/spawn");
	turtlesim::Spawn srv;
	add_turtle.call(srv);

	// topic编程,创建发布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;
};

2.4 编译与运行

添加cmake指令

add_executable(turtle_tf_broadcaster src/turtle_tf_broadcaster.cpp)
target_link_libraries(turtle_tf_broadcaster ${catkin_LIBRARIES})

add_executable(turtle_tf_listener src/turtle_tf_listener.cpp)
target_link_libraries(turtle_tf_listener ${catkin_LIBRARIES})

编译

catkin_make

运行

1. 终端1
roscore
2. 终端2
rosrun turtlesim turtlesim_node
3. 终端3,产生坐标系 /turtle1,获取 /turtle1和world坐标系间关系
rosrun learning_tf turtle_tf_broadcaster __name:=turtle1_tf_broadcaster /turtle1
__name:=turtle1_tf_broadcaster用于重映射到2.2中my_tf_broadcaster节点上,防止节点重名
4. 终端4,生坐标系 /turtle2,获取 /turtle2和world坐标系间关系
rosrun learning_tf turtle_tf_broadcaster __name:=turtle2_tf_broadcaster /turtle2
创建海龟2并且向海龟1运动
5. 终端5
rosrun learning_tf turtle_tf_listener
6. 终端6
rosrun turtlesim turtle_teleop_key
小白向:古月居ROS21讲自学笔记,看一下这个就大概了解这套课程讲什么啦! 第1讲 课程介绍 ROS:Robot Operating System,机器人操作系统 通信机制+开发工具+应用功能+生态系统 Powering the world’s robots——机器人领域的普遍标准 基础概述 核心概念 编程基础 常用组件 进阶展望 使用Google浏览器可以找到很多问题 第2讲 Linux系统介绍及安装 1991年,芬兰赫尔辛基的大学生Linus Torvalds编写 企鹅logo:敢作敢为,热爱生活 第3讲 Linux系统基础操作 软件源 软件更新中可以设置软件源,校园网用e 阅读详情

相关推荐

《ROS入门21讲》笔记整理——观古月居ROS视频

要点概述 作为学习SLAM的必修课,跟着古月居的视频学习《ROS入门21讲》是很重要的事情 本文也就是我在看视频和实操的时候记录的一些笔记,本文会随着我对于ROS理解的加深而不断更新 安装和试用 这里推荐一个教程,参照此教程,可以完美安装 安装后,在三个命令行中运行一下代码,可以看到小海龟 roscore //ros要运行起来 rosrun turtlesim turtlesim_node rosrun turtlesim turtle_teleop_key //这三行分别在三个终端下 ROS中的核心概

shuttworth的博客 2488

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

大一零基础ROS1.0学习笔记 古月居老师ROS教学21讲 主要是操作整理和效果呈现

JameLanny的博客 1万+

【古月居《ros入门21讲》学习笔记】05_ROS是什么及其核心概念

ROS虽然叫做操作系统, 但并非Windows、 Mac那样通常意义上的操作系统, 它是连接操作系统和你开发的ROS应用程序之间的一个中间件, 基于ROS的应用程序之间建立起了沟通的桥梁, 所以也是运行在Linux上的运行环境, 在这个环境上, 机器人的感知、 决策、 控制算法可以得到很好的组织和运行。注意:ROS开发对环境的要求极高,ROS的版本需要与Ubuntu的版本号对应。2. 本节是整个笔记的第5节,对应视频课程的第6,7节,请自行对应学习;Message:定义数据的类型,具有一定的数据结构定义;

2201_75902080的博客 1670

Moveit!入门——古月居机械臂开发笔记(二)

Moveit!入门——古月居机械臂开发笔记(二)引言ROS机械臂开发_机器视觉与物体抓取1、ROS中的运动学插件2、Moveit!碰撞检测规划场景3、Pick and Place 引言 接上次笔记(一)Moveit!和机械臂控制,这一次主要为:ROS机械臂开发_机器视觉与物体抓取。   ROS机械臂开发_机器视觉与物体抓取   1、ROS中的运动学插件        参考https://www.guyuehome.co

Twilight的博客 5925

【古月居《ros入门21讲》学习笔记】08_发布者Publisher的编程实现

/ 定义一个名为turtle_vel_pub的发布者,发布的消息类型为geometry_msgs::Twist,订阅名为/turtle1/cmd_vel的话题,# 创建一个Publisher,发布名为/turtle1/cmd_vel的topic,消息类型为geometry_msgs::Twist,队列长度10。注意修改路径,修改路径后具体添加的内容:source /home/自己的用户名/catkin_ws/devel/setup.bash,

2201_75902080的博客 1660

ROS2入门21讲__第16讲__TF:机器人坐标系管理神器

在两只海龟的仿真器中,我们可以定义三个坐标系,比如仿真器的全局参考系叫做world,turtle1和turtle2坐标系在两只海龟的中心点,这样,turtle1和world坐标系的相对位置,就可以表示海龟1的位置,海龟2也同理。坐标系是我们非常熟悉的一个概念,也是机器人学中的重要基础,在一个完整的机器人系统中,会存在很多坐标系,这些坐标系之间的位置关系该如何管理?两个部分,通过一个四乘四的矩阵进行描述,在空间中画出坐标系,那两者之间的变换关系,其实就是向量的数学描述。

sangyongqi的博客 2233

古月居ROS入门21讲笔记

1 C++&Python极简基础 1.1 安装编译/解析器 sudo apt-get install g++ sudo apt-get install python 1.2 for循环 Python for a in range(5,10): if a< 10: print 'a = ',a a+=1 else: break 使用Python解析器运行py程...

罗伯特祥的博客 3万+

古月居 ROS 21 讲3

古月居 ROS 21 讲 3 发布者Publisher的编程实现 1)功能包的创建: $ cd ~/catkin_ws/src $ catkin_create_pkg learning_topic roscpp rospy std_msgs geometry_msgs turtlesim 2)创建发布者代码(cpp) 如何实现一个发布者: • 初始化ROS节点; • 向ROS Master注册节点信息,包括发布的话题名和话题中的消息类型; • 创建消息数据; • 按照一定频率循环发布消息。 /** *

m0_48868565的博客 554

ROS1.4 话题消息的定义和使用 五步走

第一步定义msg文件 在src下面的功能包里新建msg文件夹 然后新建如下代码并保存为 Person.msg string name uint8 sex uint8 age uint8 unknown = 0 uint8 male = 1 uint8 female = 2 上面这端段代码写在Person.msg里面 第二步 咋package.xml里面添加功能包依赖 <bulid_depend>message_generation</bulid_depend> &lt

qq_30400105的博客 316

调用IP核、移植/复制IP核以及解决IP核被锁住/红锁问题(基于vivado)

解决不同工程IP核之间复制调用以及IP核红锁问题,让开发更简单!

weixin_44502554的博客 1万+

Ubuntu环境下读取罗技G29方向盘信息

Ubuntu环境下读取罗技G29方向盘信息

工大机器人工作室 3468

古月居ROS入门21讲-编程基础(2)

视频链接:bilibili 搜 古月居 源代码:关注古月居公众号,回复ROS入门21讲 文章目录1 客户端Client的编程实现1.1 新建一个功能包1.2 产生客户端(C++)1.3 产生客户端(Python)2 服务端Server实现2.1 产生服务端(C++)2.2 产生服务端(Python)3 服务数据的定义与使用3.1 自定义服务数据3.2 创建Client3.3 创建Server3.3 创建Server 1 客户端Client的编程实现 1.1 新建一个功能包 cd ~/catkin_ws/sr

Summer_crown的博客 2831

UE4载具性能调优指南:从参数设置到实战优化

本文详细解析了UE4载具性能调优的关键技巧,从WheeledVehicle类构建到轮子参数、传动系统设置,再到物理属性与操控调校。通过实战案例分享,帮助开发者优化载具的速度、加速度等核心性能,提升游戏体验。特别适合需要精细调校载具物理特性的开发者参考。

weixin_29019241的博客 469

古月居 ROS入门21讲 第十七讲 ROS中的坐标系管理系统

古月居 ROS入门21讲 第十七讲 ROS中的坐标系管理系统 安装TF坐标管理系统并启动demo apt install ros-melodic-turtle-tf roslaunch turtle_tf turtle_tf_demo.launch 效果如图 在命令窗口下可以按上下左右键控制turtle1的移动,turtle2跟随着运动,但只是坐标的跟随,角度不跟随。 使用如下命令在当前目录下生成TF树(pdf文件) rosrun tf view_frames tf_echo rosrun

qq_33958714的博客 1093

VScode+MPLAB AI助手:Microchip MCU开发全流程实战解析

本文详细解析了如何使用VScode搭配MPLAB AI助手进行Microchip MCU开发的完整流程。从环境配置、工程创建到代码生成与调试,全面介绍了AI助手在提升开发效率、优化代码和故障排除方面的实际应用,为嵌入式开发者提供了一套高效的开发解决方案。

hh234的博客 1131

MPU6050运动中断唤醒STM32低功耗休眠模式实战

本文详细介绍了如何使用MPU6050运动中断唤醒STM32低功耗休眠模式的实战方案。通过配置MPU6050的运动检测中断作为STM32的唤醒源,实现设备在静止时进入低功耗Stop模式,运动时快速唤醒,大幅延长电池续航。涵盖硬件连接、软件配置、参数调试等关键步骤,并提供实际应用案例和优化建议。

rgv23456789的博客 703

【古月居《ros入门21讲》学习笔记】15_ROS中的坐标系管理系统

运行后会有两只海龟,一只海龟在中心点,另一只海龟在下方,通过键盘控制中心点那只海龟,但下方的那只海龟也会自动的跟随前面的那只海龟同步去运动。1. 本系列学习笔记基于B站:古月居《ROS入门21讲》课程,且使用的Ubuntu与ROS系统版本与课程完全一致;2. 课程中的所有示例代码均已跑通,且对Pyhon版本的代码也都做了运行验证,并附带验证过程(错误均已修正);

2201_75902080的博客 974

基于STM32+华为云IOT设计的云平台监控系统_102

本次设计结合现代生活的具体需求,设计出一套基于华为云IOT设计的云平台监控系统,可以远程实时查看家里光照强度、温湿度等信息,支持在云端控制家里的电器设备,实现远程控制。

7644

古月居 ROS 入门21讲--PA17 ROS中坐标系管理系统笔记

古月居 ROS 入门21讲--PA17 ROS中坐标系管理系统笔记

weixin_47435705的博客 233

C#使用OpenCvSharp+微信模型识别多个二维码

本文介绍了一个基于OpenCvSharp和微信开源二维码检测器的多二维码识别项目。该项目通过C# WinForm实现,主要功能包括:加载图片、识别图片中的多个二维码并显示识别结果。核心代码使用了OpenCvSharp.WeChatQRCode类,通过预训练的caffe模型(detect.prototxt/detect.caffemodel和sr.prototxt/sr.caffemodel)进行二维码检测和解码。识别结果包括每个二维码的编号、内容及位置信息。项目适用于批量二维码识别场景,部署简单,识别效果良

遇见--专栏 123

使用 Simulink + Simscape Electrical 实现一个三相半控桥式整流器的仿真模型

本文详细介绍了使用Simulink搭建三相半控桥式整流器仿真模型的方法。主要内容包括系统结构设计、建模步骤(从创建项目到参数配置)、移相触发控制的实现,以及阻感负载下的动态响应分析。通过合理设置三相电源、整流器模块、触发控制和测量模块,实现了输出电压和电流波形的仿真观测。文章还提供了优化建议,如添加滤波器、实时控制等改进方向,为电力电子变换器的仿真研究和性能优化提供了实用指导。

amy_mhd的博客 140

《古月居ROS入门21讲》笔记——第十七课 ROS中的坐标系管理系统TF

介绍ros中的坐标系管理系统,包含小海龟例子和rviz工具、tf_echo和tf view_frames的使用

m0_55841508的博客 377

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

ROS入门21讲笔记(古月居)

古月居ROS 21讲课程学习笔记:修改了部分语法使得代码适合于python3的环境,Ubuntu版本为20.04 Noetic,ROS1。增加了vscode的相关配置内容

weixin_48588585的博客 2788

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【古月居《ros入门21讲》学习笔记】09_订阅者Subscriber的编程实现

第三步:运行我们编译好的可执行文件,再打开一个新终端输入:rosrun learning_topic pose_subscriber,如果我们让海龟动起来,就可以看到海龟当前位置的变化效果,我们可以通过程序或者海龟的键盘控制节点让海龟动起来,把编译生成的可执行文件pose_subscriber跟ROS相关的一些库做连接的,比如调用的C++的接口。点击pose_subscriber.py文件,右键,属性,权限,勾选(允许作为程序文件执行),

2201_75902080的博客 1347

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

古月居ROS入门21讲学习笔记——一 基础概述

写在前面 本文章为bilibili上学习古月居ROS入门21讲的学习笔记,是一个自己的记录,也希望能帮到想要入门ROS的小伙伴们 个人觉得入门ROS比较好的的免费课程是bilibili大学 上古月居(https://www.bilibili.com/video/BV1zt411G7Vn?from=search&seid=15055874661163835202)和中科院(https://www.bilibili.com/video/BV1mJ411R7Ni?from=search&seid

weixin_45969471的博客 940

古月·ROS2入门21讲——学习笔记(二)常用工具部分15-21讲

这里要用到turtlesim功能包里另外一个节点,叫做mimic,它的功能是订阅某一个海龟的Pose位置,通过计算,变换成一个同样运动的速度指令,发布出去。,我们在命令行中输入的各种参数,在Launch文件中,通过类似这样的很多代码模版,也可以进行配置,甚至还可以使用Python原有的编程功能,大大丰富了启动过程中的多样化配置。Launch文件在ROS系统中出现的频次相当之高,它就像粘合剂一样,可以自由组装和配置各个节点,那如何编写或者阅读一个Launch文件呢,我们通过一系列例程带领大家来了解。

weixin_45897172的博客 3216
上一篇: 古月居ROS入门21讲-编程基础(3)
下一篇: 古月居ROS入门21讲-launch文件
Summer_crown
博客等级 码龄7年 33粉丝 23原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值