ros之乌龟做圆周运动and订阅乌龟的位姿信息

2023-10-12 02:52

本文主要是介绍ros之乌龟做圆周运动and订阅乌龟的位姿信息,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一 .基于乌龟显示节点,通过话题发布,编码实现控制小乌龟做圆周运动

  • 打开终端1,进入工作空间 ros_ws
cd ros_ws
  • 启动节点(ros服务器)
roscore

在这里插入图片描述

  • 新开终端2,启动乌龟节点(turtlesim )
rosrun turtlesim turtlesim_node 

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 新开终端3,查看启动的节点信息
rosnode list

在这里插入图片描述

  • 乌龟的节点为 turtlesim ,并查看该节点的信息,找到订阅者话题为 /turtle1/cmd_vel
rosnode info turtlesim

在这里插入图片描述

  • 查看 /turtle1/cmd_vel话题的信息,可找到话题的消息类型为 geometry_msgs/Twist
rostopic info /turtle1/cmd_vel

在这里插入图片描述

  • 查看 geometry_msgs/Twist 消息的内容
rosmsg show geometry_msgs/Twist

在这里插入图片描述

  • 进入工作空间 ros_wssrc文件夹,创建新的功能包 wugui_topic
cd ros_ws/src
catkin_create_pkg wugui_topic roscpp rospy std_msgs
  • 进入功能包 wugui_topic ,创建 scripts文件夹
cd wugui_topic
mkdir scripts
  • 打开vscode

  • scripts下创建python文件 wu_tal.py,并进行编写程序

#! /usr/bin/env python
"""编写 ROS 节点,控制小乌龟画圆准备工作:1.获取topic : /turtle1/cmd_vel2.获取消息类型 : geometry_msgs/Twist3.运行前,注意先启动 turtlesim_node 节点实现流程:1.导包2.初始化 ROS 节点3.创建发布者对象4.创建频率对象 10HZ5.创建消息对象6.创建发布的消息内容
"""import rospy
from geometry_msgs.msg import Twistif __name__ == "__main__":# 初始化 ROS 节点rospy.init_node("wu_tal_p")# 创建发布者对象pub = rospy.Publisher("/turtle1/cmd_vel",Twist,queue_size=10)# 创建频率对象(10HZ)rate = rospy.Rate(10)# 创建消息对象message = Twist()# 创建发布的消息内容message.linear.x = 2.0message.linear.y = 1.0message.linear.z = 0.0# 偏航角 单位弧度message.angular.x = 0.0message.angular.y = 0.0message.angular.z = 1.0while not rospy.is_shutdown():#判断rospy是否是关闭状态,如果不是运行以下代码pub.publish(message)rate.sleep()
  • 在vscode中wugui_topic 中的 CMakeLists.txt 文件中的 162-165 行取消注释,修改为 scripts/wu_tal.py

在这里插入图片描述

  • 进入 scripts文件夹,并给python文件增加可执行权限
chmod +x *.py
  • 返回终端1,在终端1先关闭 roscore节点管理器,在对工作空间进行编译后,再开启节点管理器
catkin_make
roscore
  • 终端2,重新启动乌龟节点(turtlesim )
rosrun turtlesim turtlesim_node 
  • 新开终端4,进入 ros_ws工作空间
cd ros_ws
  • 刷新并运行程序
source ./devel/setup.bash
rosrun wugui_topic wu_tal.py

在这里插入图片描述

二.在键盘控制乌龟运动的基础上,编码实现话题订阅,打印乌龟实时位姿信息

  • 打开终端1 启动 roscore节点管理器,并新开 终端2 启动乌龟节点
roscore       # 终端1 启动
rosrun turtlesim turtlesim_node   # 终端2 启动
  • 新开 终端3 查看 /turtlesim 节点的信息

    该节点信息的发布方具有三个话题

    /rosout:用于在ROS中进行日志记录和调试。

    /turtle1/color_sensor:用于获取turtlesim包中的turtle1海龟的颜色传感器信息

    /turtle1/pose:表示乌龟的位姿信息

rosnode info /turtlesim 

在这里插入图片描述

  • 查看位姿话题 /turtle1/pose 的信息,可找到话题类型为 turtlesim/Pose
rostopic info /turtle1/pose 

在这里插入图片描述

  • 查看 turtlesim/Pose内容
rosmsg show turtlesim/Pose

在这里插入图片描述

  • 在功能包 wugui_topic下的 scripts文件夹下创建python文件 wu_lis.py,并进行编写程序
#! /usr/bin/env python
"""获取小乌龟的位资准备工作:1.获取topic : /turtle1/pose2.获取消息类型 : turtlesim/Pose3.运行前,注意先启动 turtlesim_node 节点实现流程:1.导包2.初始化 ROS 节点3.创建服务对象4.回调函数处理请求并产生响应5.spin 函数
"""import rospy
from turtlesim.msg import Pose# 回调函数
def coord(msg):rospy.loginfo("乌龟位姿信息: 坐标(%.2f,%.2f), 朝向:%.2f, 线速度:%.2f, 角速度:%.2f",msg.x,msg.y,msg.theta,msg.linear_velocity,msg.angular_velocity)if __name__ == '__main__':# 初始化节点rospy.init_node("wu_lis_p")  # 创建服务对象sub = rospy.Subscriber("/turtle1/pose",Pose,coord,queue_size=10)# 阻塞函数rospy.spin()
  • 在vscode中wugui_topic 中的 CMakeLists.txt 文件中的 162-165 行取消注释,添加为 scripts/wu_lis.py

在这里插入图片描述

  • 返回终端1,在终端1先关闭 roscore节点管理器,在对工作空间进行编译后,再开启节点管理器
catkin_make
roscore
  • 终端2,重新启动乌龟节点(turtlesim )
rosrun turtlesim turtlesim_node 
  • 新开终端4,启动海龟控制节点
rosrun turtlesim turtle_teleop_key

在这里插入图片描述

  • 新开终端5,进入 ros_ws工作空间
cd ros_ws
  • 刷新并运行程序
source ./devel/setup.bash
rosrun wugui_topic wu_lis.py

在这里插入图片描述

这篇关于ros之乌龟做圆周运动and订阅乌龟的位姿信息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/192735

相关文章

一文详解SQL Server如何跟踪自动统计信息更新

《一文详解SQLServer如何跟踪自动统计信息更新》SQLServer数据库中,我们都清楚统计信息对于优化器来说非常重要,所以本文就来和大家简单聊一聊SQLServer如何跟踪自动统计信息更新吧... SQL Server数据库中,我们都清楚统计信息对于优化器来说非常重要。一般情况下,我们会开启"自动更新

Python如何获取域名的SSL证书信息和到期时间

《Python如何获取域名的SSL证书信息和到期时间》在当今互联网时代,SSL证书的重要性不言而喻,它不仅为用户提供了安全的连接,还能提高网站的搜索引擎排名,那我们怎么才能通过Python获取域名的S... 目录了解SSL证书的基本概念使用python库来抓取SSL证书信息安装必要的库编写获取SSL证书信息

Win32下C++实现快速获取硬盘分区信息

《Win32下C++实现快速获取硬盘分区信息》这篇文章主要为大家详细介绍了Win32下C++如何实现快速获取硬盘分区信息,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 实现代码CDiskDriveUtils.h#pragma once #include <wtypesbase

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

C#实现获取电脑中的端口号和硬件信息

《C#实现获取电脑中的端口号和硬件信息》这篇文章主要为大家详细介绍了C#实现获取电脑中的端口号和硬件信息的相关方法,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 我们经常在使用一个串口软件的时候,发现软件中的端口号并不是普通的COM1,而是带有硬件信息的。那么如果我们使用C#编写软件时候,如

通过C#获取PDF中指定文本或所有文本的字体信息

《通过C#获取PDF中指定文本或所有文本的字体信息》在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响,然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文... 目录引言C# 获取PDF中指定文本的字体信息C# 获取PDF文档中用到的所有字体信息引言在设计和出

C#读取本地网络配置信息全攻略分享

《C#读取本地网络配置信息全攻略分享》在当今数字化时代,网络已深度融入我们生活与工作的方方面面,对于软件开发而言,掌握本地计算机的网络配置信息显得尤为关键,而在C#编程的世界里,我们又该如何巧妙地读取... 目录一、引言二、C# 读取本地网络配置信息的基础准备2.1 引入关键命名空间2.2 理解核心类与方法