ROS小乌龟话题改写--话题发布--话题订阅

news2024/9/24 9:25:32

创建小乌龟

roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key

2:图显示:

rqt_graph

test02_sub_pose在这里插入图片描述

3:通过命令显示话题名消息信息

方法一获得:

rostopic info /turtle1/cmd_vel

在这里插入图片描述方法二获得:

rostopic  type /turtle1/cmd_vel 

在这里插入图片描述

获取消息格式

方法一

rosmsg show geometry_msgs/Twist

在这里插入图片描述

在这里插入图片描述方法二

rosmsg info geometry_msgs/Twist

在这里插入图片描述

设置线速度和角速度

线速度:比如说是小车的前进后退的速度
x:代表前进后退的值
y:平移的速度
z:垂直方向上上下的速度

角速度:比如小汽车转弯的速度
x:翻滚
y:俯仰
z:偏航
线速度只设置:X
角速度只设置:Z
在这里插入图片描述
打印话题的消息

rostopic echo /turtle1/cmd_vel 

在这里插入图片描述
使用命令的方式来实现小乌龟做圆周运动

rtopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist "linear:
  x: 1.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 1.0" 

plumbing_test在这里插入图片描述在这里插入图片描述
使用c++来实现小乌龟做圆周运动
写入包的名称以及导入使用的依赖

plumbing_test  #包名
roscpp rospy std_msgs geometry_msgs  #导入的依赖
/*
    编写 ROS 节点,控制小乌龟画圆

    准备工作:
        1.获取topic(已知: /turtle1/cmd_vel)
        2.获取消息类型(已知: geometry_msgs/Twist)
        3.运行前,注意先启动 turtlesim_node 节点

    实现流程:
        1.包含头文件
        2.初始化 ROS 节点
        3.创建发布者对象
        4.循环发布运动控制消息
*/

#include "ros/ros.h"
#include "geometry_msgs/Twist.h"

int main(int argc, char *argv[])
{
    setlocale(LC_ALL,"");
    // 2.初始化 ROS 节点
    ros::init(argc,argv,"control");
    ros::NodeHandle nh;
    // 3.创建发布者对象
    ros::Publisher pub = nh.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel",10);
    // 4.循环发布运动控制消息
    //4-1.组织消息
    geometry_msgs::Twist msg;
    msg.linear.x = 1.0;
    msg.linear.y = 0.0;
    msg.linear.z = 0.0;

    msg.angular.x = 0.0;
    msg.angular.y = 0.0;
    msg.angular.z = 2.0;

    //4-2.设置发送频率
    ros::Rate r(10);
    //4-3.循环发送
    while (ros::ok())
    {
        pub.publish(msg);

        ros::spinOnce();
    }


    return 0;
}

source ./devel/setup.bash 
roscore
rosrun turtlesim turtlesim_node
rosrun plumbing_test test01_pub_twist

在这里插入图片描述

使用python实现圆周运动

#! /usr/bin/env python
"""
    编写 ROS 节点,控制小乌龟画圆

    准备工作:source ./devel/setup.bash 
roscore
rosrun turtlesim turtlesim_node
rosrun plumbing_test test01_pub_twist

        1.获取topic(已知: /turtle1/cmd_vel)
        2.获取消息类型(已知: geometry_msgs/Twist)
        3.运行前,注意先启动 turtlesim_node 节点

    实现流程:
        1.导包
        2.初始化 ROS 节点
        3.创建发布者对象
        4.循环发布运动控制消息

"""

import rospy
from geometry_msgs.msg import Twist

if __name__ == "__main__":
    # 2.初始化 ROS 节点
    rospy.init_node("control_circle_p")
    # 3.创建发布者对象
    pub = rospy.Publisher("/turtle1/cmd_vel",Twist,queue_size=10)#queue_size=10这个是队列
    # 4.循环发布运动控制消息source ./devel/setup.bash 
roscore
rosrun turtlesim turtlesim_node
rosrun plumbing_test test01_pub_twist

    rate = rospy.Rate(10)
    msg = Twist()
    msg.linear.x = 1.0
    msg.linear.y = 0.0
    msg.linear.z = 0.0
    msg.angular.x = 0.0
    msg.angular.y = 0.0
    msg.angular.z = 0.5

    while not rospy.is_shutdown():
        pub.publish(msg)
        rate.sleep()source ./devel/setup.bash 
roscore
rosrun turtlesim turtlesim_node
rosrun plumbing_test test01_pub_twist


在这里插入图片描述

chmod +x *.py
source ./devel/setup.bash 
roscore
rosrun turtlesim turtlesim_node
rosrun plumbing_test test01_pub_twist_p.py

在这里插入图片描述

乌龟话题的订阅,位置信息的显示

创建launch文件

<launch>
    <!--乌龟的GUI-->
    <node pkg="turtlesim" type="turtlesim_node" name="turtle1" output="screen"/>
    <!--键盘控制-->
    <node pkg="turtlesim" type="turtle_teleop_key" name="key" output="screen"/>

</launch>

在这里插入图片描述

在这里插入图片描述
启动launch文件

 source ./devel/setup.bash 
 roslaunch plumbing_test  start_turtle.launch 

查看话题

 rostopic list 
 

在这里插入图片描述
查看位置话题信息

rostopic info /turtle1/pose

在这里插入图片描述获取位置消息格式

rosmsg info turtlesim/Pose

x:x轴
y:y轴
theta:朝向。也就是弧度
linear_velocity:线速度
angular_velocity:角速度
在这里插入图片描述
打印乌龟位置信息

rostopic echo /turtle1/pose 

在这里插入图片描述

使用c++来实现功能

2.获取消息类型 turtlesim/Pose使用的是自定义的消息格式要进行追加

/*  
    订阅小乌龟的位姿: 时时获取小乌龟在窗体中的坐标并打印
    准备工作:
        1.获取话题名称 /turtle1/pose
        2.获取消息类型 turtlesim/Pose
        3.运行前启动 turtlesim_node 与 turtle_teleop_key 节点

    实现流程:
        1.包含头文件
        2.初始化 ROS 节点
        3.创建 ROS 句柄
        4.创建订阅者对象
        5.回调函数处理订阅的数据
        6.spin
*/

#include "ros/ros.h"
#include "turtlesim/Pose.h" //位置信息的头文件

void doPose(const turtlesim::Pose::ConstPtr& p){
    ROS_INFO("乌龟位姿信息:x=%.2f,y=%.2f,theta=%.2f,lv=%.2f,av=%.2f",
        p->x,p->y,p->theta,p->linear_velocity,p->angular_velocity
    );
}

int main(int argc, char *argv[])
{
    setlocale(LC_ALL,"");
    // 2.初始化 ROS 节点
    ros::init(argc,argv,"sub_pose");
    // 3.创建 ROS 句柄
    ros::NodeHandle nh;
    // 4.创建订阅者对象
    ros::Subscriber sub = nh.subscribe<turtlesim::Pose>("/turtle1/pose",1000,doPose);
    // 5.回调函数处理订阅的数据
    // 6.spin
    ros::spin();
    return 0;
}

在package.xml进行添加

<build_depend>turtlesim</build_depend>
<exec_depend>turtlesim</exec_depend>

在这里插入图片描述

在CMakeLists.txt文件中添加

turtlesim

在这里插入图片描述在这里插入图片描述
命令的实现

roslaunch plumbing_test  start_turtle.launch 
source ./devel/setup.bash 
rosrun plumbing_test test02_sub_pose

在这里插入图片描述
使用python实现

#! /usr/bin/env python
"""
    订阅小乌龟的位姿: 时时获取小乌龟在窗体中的坐标并打印
    准备工作:
        1.获取话题名称 /turtle1/pose
        2.获取消息类型 turtlesim/Pose
        3.运行前启动 turtlesim_node 与 turtle_teleop_key 节点

    实现流程:
        1.导包
        2.初始化 ROS 节点
        3.创建订阅者对象
        4.回调函数处理订阅的数据
        5.spin

"""

import rospy
from turtlesim.msg import Pose

def doPose(data):
    # rospy.loginfo("乌龟坐标:x=%.2f, y=%.2f,theta=%.2f",data.x,data.y,data.theta)
    rospy.loginfo("乌龟坐标:(%.2f,%.2f),朝向:%.2f,线速度:%.2f,角速度:%.2f",data.x,data.y,data.theta,data.linear_velocity,data.angular_velocity)

if __name__ == "__main__":

    # 2.初始化 ROS 节点
    rospy.init_node("sub_pose_p")

    # 3.创建订阅者对象
    sub = rospy.Subscriber("/turtle1/pose",Pose,doPose,queue_size=1000)
    #     4.回调函数处理订阅的数据
    #     5.spin
    rospy.spin()


在这里插入图片描述
命令实现

roslaunch plumbing_test  start_turtle.launch 
rosrun plumbing_test test02_sub_pose_p.py 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/430959.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux 提权学习

提权的目的是获取 root 权限 root 权限可获取 shadow 文件中的密码 Hash&#xff0c;若内网环境中存在「账户/密码复用」的情况&#xff0c;可用于横向扩展 暴力破解 suid 提权 内核漏洞提权 定时任务提权 sudo 提权 第三方服务提权&#xff08;docker、mysql、redis、NFS提权…

量子退火Python实战(4):PyQUBO使用攻略 MathorCup2023加油!

文章目录 前言一、约束部分的QUBO怎么求&#xff1f;二、PyQUBO的输出结果怎么不是QUBO矩阵&#xff1f;三、我的建模太复杂了&#xff0c;可以不用PyQUBO吗&#xff1f;四、怎么构建sum&#xff08;x_1...x_i&#xff09; K的约束&#xff1f;总结 前言 提示&#xff1a;本教…

3DEXPERIENCE MODSIM产品前期概念结构快速开发方案(上) | 达索系统百世慧®

基于3DEXPERIENCE单一数据源、实时多专业协同平台&#xff1b;传统CATIA建模附加全新CATIA柔性快速建模技术&#xff1b;CATIA原生概念建模仿真一体化模型&#xff1b;一模两用&#xff0c;快速建模与变更、多学科快速验证与自动优化、支持快速概念方案决策&#xff1b;仿真效率…

快手社招Java后端开发岗面试,被问麻了

社招面试是基于你的工作项目来展开问的&#xff0c;比如你项目用了 xxx 技术&#xff0c;那么面试就会追问你项目是怎么用 xxx 技术的&#xff0c;遇到什么难点和挑战&#xff0c;然后再考察一下这个 xxx 技术的原理。 今天就分享一位快手社招面经&#xff0c;岗位是后端开发&…

日常记录:天梯赛练习集L1-044 稳赢

题目&#xff1a; 大家应该都会玩“锤子剪刀布”的游戏&#xff1a;两人同时给出手势&#xff0c;胜负规则如图所示&#xff1a; 现要求你编写一个稳赢不输的程序&#xff0c;根据对方的出招&#xff0c;给出对应的赢招。但是&#xff01;为了不让对方输得太惨&#xff0c;你需…

软件测试能干多久?测试员能干到多大年龄?

测试员可以工作多少年?大多数人认为软件测试是吃青春饭的工作。只能干到30岁&#xff0c;最长可达35岁。我经常听到这样的话&#xff0c;都让人倍感压力。今天&#xff0c;我们来谈谈这个老话题… 软件测试能干多久&#xff1f; 软件测试并没有明确的职业寿命限制&#xff…

【高项】项目的概念,项目管理基础与立项管理

【高项】项目的概念&#xff0c;项目管理基础与立项管理 文章目录1、什么是项目&#xff1f;项目的概念2、项目管理知识体系2.1 组织结构对项目的影响2.2 信息系统项目的生命周期2.3 单个项目的管理过程3、立项管理3.1 熟悉立项的流程&#xff08;申请书->可行性->评估-&…

【《C Primer Plus》读书笔记】第16章:C预处理器和C库

【《C Primer Plus》读书笔记】第16章&#xff1a;C预处理器和C库16.1 翻译程序的第一步16.2 明示常量&#xff1a;#define16.2.1 记号16.2.2 重定义常量16.3 在#define中使用参数16.3.1 用宏参数创建字符串&#xff1a;#运算符16.3.2 预处理器黏合剂&#xff1a;##运算符16.3.…

@SpringBootApplication详细分析

如下图 SpringBootApplication是springboot项目启动类的注解&#xff0c;也是程序的入口,本文就是具体解析一下这个注解到底做了什么 一.SpringBootApplication的构成 1.这个注解是一个组合注解&#xff0c;他是有三个注解合成的&#xff0c;对应图中的123步&#xff0c;而这三…

【HDR图像处理】HDR图像的色调映射 | python+opencv代码实现总结

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、前提opencv知识1.1、opencv打开一般照片并且显示1.2、opencv打开HDR图像&#xff08;这里先不讲如何imshow&#xff09; 二、经典的色调映射技术以及opencv…

Web 攻防之业务安全:密码找回流程绕过测试.(利用链接跳到后面去)

Web 攻防之业务安全&#xff1a;密码找回流程绕过测试 业务安全是指保护业务系统免受安全威胁的措施或手段。广义的业务安全应包括业务运行的软硬件平台&#xff08;操作系统、数据库&#xff0c;中间件等&#xff09;、业务系统自身&#xff08;软件或设备&#xff09;、业务所…

MATLAB | 优化工具箱(optimization toolbox)改版后的live editor工具咋用

优化工具箱(optimization toolbox)改版后的live editor工具咋用&#xff1f;本来是不咋想讲这玩意的&#xff0c;但奈何问的人还不少&#xff0c;这里简单讲一下咋用哈。 很多人下了比较新版本MATLAB就顺手像往常一样点开了优化工具箱&#xff0c;但是熟悉的优化APP界面却并没…

网络安全学习路线,小白必备

前言&#xff1a; 趁着今天下班&#xff0c;我花了几个小时整理了下学习路以及我的学习心得&#xff0c;非常不易&#xff0c;希望大家可以点赞收藏支持一波&#xff0c;谢谢。 我的经历&#xff1a; 我 19 年毕业&#xff0c;大学专业是物联网工程&#xff0c;我相信很多人在…

BPM流程引擎升级,让流程管理更简单!

BPM是Business Process Management的缩写&#xff0c;即业务流程管理。 它是一种以构造端到端的业务流程为中心&#xff0c;以持续提高组织业务绩效为目的的系统化方法。通常&#xff0c;BPM也指流程管理的信息化系统。 BPM对企业很多应用场景都有价值&#xff0c;总的来说&am…

Web 攻防之业务安全:验证码绕过测试.(修改数据包中 res_code 的值 实现绕过.)

Web 攻防之业务安全&#xff1a;验证码绕过测试. 业务安全是指保护业务系统免受安全威胁的措施或手段。广义的业务安全应包括业务运行的软硬件平台&#xff08;操作系统、数据库&#xff0c;中间件等&#xff09;、业务系统自身&#xff08;软件或设备&#xff09;、业务所提供…

【Linux系统管理进程,运行,挂起,杀死进程和crontab计划任务表的使用以及实验的心得体会】

实验 &#xff08;1&#xff09;显示本用户的进程&#xff0c;重定向到file1 top命令如果不加限制&#xff0c;默认是查看所有用户的进程情况top -u [用户名] 可以查看该用户名的所有进程 &#xff08;2&#xff09;显示本用户所有进程&#xff0c;重定向到file2 top命令如果…

扩展c盘时,如何删除恢复分区

目录 一、前言 二、操作步骤 一、前言 有没有和小编一样想要扩展自己c盘容量时遇到问题的&#xff1f; 就是发现c盘和自己扩展的容量之间有个恢复分区&#xff0c;主要是磁盘管理器那里还删不掉&#xff1f; 就不知道怎么办了&#xff0c;小编摸索了一下最终解决了现在分享…

网络IO(non-blocking io)基础

BIO&#xff08;blocking io&#xff09; 传统的网络io模式&#xff0c;面向流&#xff0c;一个线程对接一个会话&#xff0c;因此高并发时会因线程阻塞而性能低效 Java代码&#xff1a; public class BIO implements Connector {private Integer port 8080;Overridepublic v…

前端学习:HTML颜色(什么是RGB、HEX、HSL)

一、什么是RGB、HEX、HSL&#xff1f; 无论是RGB、HEX、HSL&#xff0c;它们的作用只有一个&#xff1a;用数字表达出一种颜色。 1.RGB RGB通过输入的数值&#xff0c;将红色、绿色和蓝色的光源以一定的量混合在一起&#xff0c;形成颜色。 软件中通常让你输入Red、Green、B…

Unity编写Shader基本知识

返回目录 大家好&#xff0c;我是阿赵。 这里通过手写一个最简单的shader&#xff0c;来介绍一下在Unity里面编写Shader的一些基础知识。 一、Shader基本结构 新建一个shader&#xff0c;把里面的内容都删掉&#xff0c;然后输入下面这些内容 shader "testShader"…