古月居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

稳定性仿真(stb闭环增益仿真)

stb仿真主要是测试电路的稳定性,例如运放在闭环电路中的增益和相位裕度的值,从而判别电路是否正常工作。 以下是stb仿真的过程: (1)调用iprobe器件 从analogLib中调iprobe器件,通过器件中的箭头标识确定接入电路的方法,箭头起点端连运放的输出端,箭头的终点端连在反馈环路的作用端。iprobe器件连入电路后相当于理想导线。(iprobe器件连接在反馈回路上) (2)analyses设置 勾选stb和frequency,此处的频率范围设置在0.1~1GHz,Probe Instance/T

qq_36686804的博客 3万+

保姆级教程:在Ubuntu 22.04上搞定PX4 V1.14 + ROS2 Humble的HITL仿真(避坑实录)

本文提供在Ubuntu 22.04上配置PX4 V1.14与ROS2 Humble的HITL仿真环境的详细教程,涵盖环境准备、固件编译、QGroundControl配置、ROS2通信设置及联调测试。特别针对版本兼容性、Gazebo插件构建和MicroDDS配置等常见问题提供避坑指南,帮助开发者高效搭建无人机仿真系统。

weixin_30836759的博客 1004

古月居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

基于Claude AI的Dex个人操作系统:从零部署到高效工作流实战

在当今信息过载的时代,个人知识管理(PKM)和任务自动化成为提升效率的关键技术。传统PKM工具如Notion、Obsidian虽然提供了强大的信息存储能力,但本质上是被动的数据库,需要用户手动维护结构和链接,容易形成信息孤岛。其核心原理在于通过预设的文件夹结构和智能路由,实现信息的自动归类与关联。这种自动化同步机制的技术价值在于彻底消除重复劳动和决策疲劳,让用户从繁琐的信息整理中解放出来,专注于高价值思考。在实际应用场景中,它尤其适合需要处理大量会议、任务和人际关系的知识工作者,如产品经理、项目经理和团队领

weixin_42521558的博客 378

古月居 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

Dify 深度进阶:从入门到精通AI应用构建

《Dify进阶指南:从基础到高阶的AI应用开发技巧》 本文深入探讨Dify平台的高级功能与应用开发技巧。首先强调核心概念的深化,包括提示词工程进阶、知识库高效管理和模型参数优化。重点介绍智能体应用的开发方法,如何让AI具备自主规划与执行能力。同时讲解工作流编排、前端集成等实用技术,并分享应用运营优化、成本控制等实践经验。文章还展望了Dify生态的发展趋势,为开发者提供从基础到进阶的完整学习路径,助力打造更智能高效的AI应用。

同名公众号:dify实验室 1950

NTFS分区变成RAW别乱修!正确数据恢复与修复方法详解

文件系统是操作系统管理存储数据的核心机制,NTFS作为Windows主流文件系统,一旦分区识别异常,常会显示为RAW格式。分区变RAW通常意味着文件系统入口信息损坏,而非数据物理消失,但若采用错误的修复方式,如直接对RAW分区执行chkdsk /f,可能因系统无法正确识别文件系统结构,导致写入操作落在错误偏移位置,二次破坏本可恢复的数据。正确的处理思路是:先停止一切写入操作,通过扇区级镜像备份保留原始现场,再分析DBR、分区表及$MFT状态,依据诊断结果选择修复或深度扫描恢复。实际排查中,常见问题如DBR记

weixin_31155097的博客 134

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

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

2201_75902080的博客 974

python爬虫:采集求职者简历信息并进行人才分析

通过 Python 爬虫抓取求职者简历信息并进行人才分析,可以帮助企业快速筛选和匹配人才。但在实施过程中,必须严格遵守法律法规,确保数据来源合法合规。如果需要更复杂的分析,可以结合自然语言处理(NLP)和机器学习技术,进一步挖掘数据价值。

数据知道的博客 1万+

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

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

weixin_47435705的博客 233

2024年11月架构设计师案例分析真题回顾,附参考答案、解析及所涉知识点(二)

软考高级系统架构设计师考试包含三个科目:信息系统综合知识、案例分析和系统架构设计论文。考试形式为机考。本文主要回顾2024年下半年(2024-11-10)系统架构设计师考试上午第二科案例分析的题目,同时附带参考解答、解析和所涉知识点。

一几文的编程学习笔记。 1661

【OpenClaw企业级智能体实战】第09篇:OpenClaw金融投研实战:17个场景+完整代码,打造专属数字研究员

金融投研面临信息过载、流程重复、数据安全合规三大核心痛点,OpenClaw作为本地部署的新一代AI智能体,凭借“长期记忆+主动执行+数据不出域”的优势,成为券商分析师集体追捧的效率工具。本文基于8家头部券商公开研报,拆解OpenClaw在金融投研的17个核心应用场景(信息处理、研报撰写、量化策略、流程自动化),详解原理、技术选型、实操流程,并提供可直接运行的完整代码与执行结果。文章兼顾新手入门与进阶提升,强调安全隔离部署与幻觉防范,读者可按步骤搭建专属投研智能体,将信息处理、数据整理等重复工作效率提升80%

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 674

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

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

m0_55841508的博客 377

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

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

weixin_48588585的博客 2788

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

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

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

2201_75902080的博客 1347

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

古月居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、付费专栏及课程。

余额充值