【ROS通信机制实战练习】通过话题发布实现turtlesim小乌龟圆周运动

news2024/10/5 22:22:16

本节记录下使用ROS中的话题机制,实现turtlesim中小乌龟的圆周运动。

如果想通过话题通信机制,实现小乌龟的圆周运动,需要首先明确小乌龟的运动情况,以及所涉及的指挥运动的参数,这里需要首先手动发布一个turtlesim的节点,这里我使用roslaunch来实现小乌龟模拟器,然后再分别尝试使用C++与Python语言进行编程实现小乌龟的圆周运动

launch 文件相关

其中< node pkg=“包名” type=“节点类型” name=“此处名字可自动逸” output=“screen”/>

<launch>
    <node pkg="turtlesim" type="turtlesim_node" name="turtle1" output="screen"/>
     <node pkg="turtlesim" type="turtle_teleop_key" name="key" output="screen"/>
</launch>

launch文件需要放在对应的launch文件夹下
在这里插入图片描述
运行launch文件,使用roslaunch命令,该命令其实内部启动了 roscore,所以比较方便。打开终端,切换到项目目录下,运行下面的命令:

source ./devel/setup.bash
roslaunch plumbing_test01(您的项目名,可自定义) start_turtle.launch

然后会发现自己的屏幕上会有小乌龟了。
在这里插入图片描述
这个时候我们可以将光标定位在命令框中,通过键盘操作小乌龟的运动,但是我们希望小乌龟实现圆周运动,这个时候仅仅通过键盘实现其实不太现实,这个时候我们尝试编程实现,我们通过话题进行发布相关的数据,实现圆周运动

查看话题名称和信息的数据类型

在命令框中,使用下面的命令进行查看,然后得到乌龟运动对应的话题名称

rostopic list

在这里插入图片描述
查看topic的消息数据类型

rostopic info /turtle1/cmd_vel

在这里插入图片描述
查看该消息类型的数据结构

rosmsg info geometry_msgs/Twist

在这里插入图片描述
可以发现该消息数据类型包括了线速度和角速度,每个速度又包含了三个维度(x,y,z),这就对应了ROS运动中的 偏航(yaw)、俯仰(pitch)、横滚(roll),即右手坐标系中的:偏航(yaw)绕z轴旋转,俯仰(pitch)绕y轴旋转,横滚(roll)绕x轴旋转。由于模拟器中的乌龟为平面图,乌龟运动的线速度仅有 x 方向和角速度的 z 方向,即绕着z轴转动,将乌龟的平面作为oy平面即可。
有了以上的逐步分析, 我们接下来进行编程实现。

C++实现

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

int main(int argc,char *argv[]){
    ros::init(argc,argv,"my_control");
    ros::NodeHandle nh;
    ros::Publisher pub = nh.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel",10);
    ros::Rate rate(10);//设置发布频率
    //组织消息
    geometry_msgs::Twist twist;
    twist.linear.x=1.0;
    twist.linear.y=0.0;
    twist.linear.z=0.0;
    twist.angular.x=0.0;
    twist.angular.y=0.0;
    twist.angular.z=0.5;
    while(ros::ok()){
        pub.publish(twist);
        //休眠
        rate.sleep();
        //回调
        ros::spinOnce();
    }
    return 0;
}

Python实现

#! /usr/bin/env python
# -*- coding:utf-8 -*-
import rospy
from geometry_msgs.msg import Twist
if __name__ == "__main__":
    rospy.init_node("pub_test_01_p")
    pub = rospy.Publisher("/turtle1/cmd_vel",Twist,queue_size=10)
    #发布频率
    rate = rospy.Rate(10)
    #确定发布数据
    twist = Twist()
    twist.linear.x = 1.0
    twist.linear.y=0.0
    twist.linear.z = 0.0
    twist.angular.x=0.0
    twist.angular.y=0.0
    twist.angular.z=0.5
    while not rospy.is_shutdown():
        pub.publish(twist)
        rate.sleep()

【注:不论C++实现还是Python实现均需要进行CMakeLists.txt的配置,然后编译运行】
运行效果如下:
在这里插入图片描述

当然以上的编程,也可以通过 rostopic pub 命令实现,-r 为循环次数,但是这里我们目的是训练编程实现,而不是ros命令,因为ros命令的操作性不太强。

rostopic 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: 0.5" 

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

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

相关文章

springboot整合mybatis代码快速生成

特别说明&#xff1a;本次项目整合基于idea进行的&#xff0c;如果使用Eclipse可能操作会略有不同&#xff0c;不过总的来说不影响。 springboot整合之如何选择版本及项目搭建 springboot整合之版本号统一管理 springboot整合mybatis-plusdurid数据库连接池 springboot整合…

String 字符串

String 基本介绍 String 应该是 Java 中最常用的一个对象&#xff0c;他不是八种基本数据类型的其中之一&#xff0c;但是随便翻了一下项目代码&#xff0c;用 String 定义的变量超过百分之八十。 public final class Stringimplements java.io.Serializable, Comparable<…

VUE3-计算属性和监听器《五》

目录 一&#xff0c;计算属性 二&#xff0c;监听器 在vue3种&#xff0c;当界面上需要处理一些数据的时候&#xff0c;可以通过计算属性和监听器处理&#xff0c;他们都是对一个属性进行操作的&#xff0c;然后返回数据。 他们的区别是&#xff0c;计算属性&#xff0c;是通…

20221226英语学习

今日短文 When we are shown two options, our eyes tend to flick from one to the other and back again several times as we deliberate on the pros and cons of each. Researchers at Johns Hopkins University in the US have found that the speed with which our ey…

Hbase是什么?

Hadoop Database简介表结构数据只能读不能改>生成新版本总结简介 永远的百度百科 HBase是一个分布式的、面向列的开源数据库&#xff0c;一个结构化数据的分布式存储系统”。 HBase不同于一般的关系数据库&#xff0c;它是一个适合于非结构化数据存储的数据库。另一个不同的…

过年首秀 - 用python写一个自动生成春联的软件并打包exe

前言 哈喽啊&#xff0c;我亲爱的铁铁们&#xff0c;I am back &#xff01;&#xff01; 别管&#xff0c;我也是阳过的人了&#xff0c;这么久都没有更新&#xff0c;今天就带来个小玩意吧 这不是过完圣诞就要过年了吗 这不得准备准备&#xff0c;春节的表演&#xff1f;…

excel数据处理技巧:组合函数统计产品批号

这是一个看似普通的编号问题&#xff0c;可竟然动用了TEXT和SUMPRODUCT两个重量级的函数共同出手才得以解决。以往遇到的编号问题&#xff0c;大多数都是COUNTIF的拿手好戏&#xff0c;但是今天这个问题COUNTIF完全插不上手&#xff0c;来看看模拟的数据吧。 如图所示&#xff…

「 理财与风险控制|养老系列」你想象中的高端养老社区是什么样?

本文主要介绍为什么养老规划需要考虑养老社区的部分&#xff0c;当前市场上养老社区的各种现状&#xff0c;养老社区从各个角度分类&#xff0c;选择养老社区需要关注的要素以及保险保单能够提供的养老权益是怎样的 文章目录01 为什么要关注养老社区&#xff1f;02 为什么关注高…

QT多窗口编程与文件IO编程

目录 一、消息对话框 QMessageBox&#xff08;掌握&#xff09; 二、常用窗口类&#xff08;掌握&#xff09; 三、主窗口类 QMainWindow&#xff08;重点&#xff09; 四、parent参数&#xff08;掌握&#xff09; 五、窗口传参 5.1 成员函数/构造函数 5.2 信号槽传参 六、事件…

劳动自由——你真的理解马克思说的劳动吗

目录 一、空谈“劳动是一切财富和一切文化的源泉”是错误的 个人理解——剥削与马斯洛需求的满足程度 二、马克思对劳动的定义是什么 三、马克思所说的劳动自由 1、实现劳动自由的实现路径 2、劳动自由的状态 一、空谈“劳动是一切财富和一切文化的源泉”是错误的 空谈所…

ES6 模块化、webpack、@ 代表src目录的设置

文章目录webpackSource Map 代表src目录的设置ES6 模块化要求默认 导出默认导入按需 导出、导入混合使用直接导入 并执行模块中的代码webpack 默认 约定&#xff1a; 自定义 打包的 入口与出口 const path require(path) // 导入node.js中 专门操作路径的模块 module.expor…

从华科到清华这些年,我和焦虑成为朋友

Datawhale干货 作者&#xff1a;赵子一&#xff0c;清华大学&#xff0c;Datawhale成员硕士求职碰壁被今年的求职形势狠狠地“教育”了一番2021年的秋天开启了我读硕士的第三个年头。当时的我还在某家公司做实习生。本来是可以转正的&#xff0c;但是出于各种考虑&#xff0c;我…

C++:STL:常用容器(上):deque容器

1&#xff1a;deque容器的基本概念 功能&#xff1a; 双端数组&#xff0c;可以对头端进行插入和删除操作。 deque 与vector区别 1&#xff1a;vector对于头部的插入删除效率低&#xff0c;数据量越大&#xff0c;效率越低。 2&#xff1a;deque相对而言&#xff0c;对头部的插…

产品第一性原理提升数据转化

小飞象交流会答应自己的事就尽力去做到&#xff0c;要去的地方就努力去抵达。内部交流│18期产品第一性原理提升数据转化data analysis●●●●分享人&#xff1a;永波&#xff08;阿外&#xff09;‍数据分析需要透过现象看本质&#xff0c;先从纷繁复杂的表象中进行抽丝剥茧&…

【HTML】2023跨年烟花代码

*2022年圣诞节到来啦&#xff0c;很高兴这次我们又能一起度过~ &#x1f4c2;文章目录前言效果展示一、夜景烟花绽放动画效果HTML源码2023年(新年)春节倒计时代码源码2023除夕倒计时效果展示源码宇宙星空-效果展示1.源码2.思路3.步骤(js部分)更多干货&#x1f680;前言 时光荏苒…

图像处理:Tiler制作你的专属卡通头像和LOGO(圣诞特别篇)

目录0 前言1 安装与贴图2 算法原理2.1 计算像素频率2.2 计算像素相对距离2.3 计算合适贴图3 配置功能4 使用&#xff1a;以圣诞老人为例0 前言 Tiler是一种使用各种其他较小图像平铺创建新图像的工具&#xff0c;它与其他马赛克工具不同&#xff0c;因为它可以适应多种形状、大…

微信开放平台之第三方平台开发,模板小程序如何提交?

大家好&#xff0c;我是悟空码字 12月25日&#xff0c;天气晴朗&#xff0c;阳光普照&#xff0c;今天是圣诞节。因为疫情影响&#xff0c;小羊人的增多&#xff0c;街上放眼望去&#xff0c;人烟稀少。楼下除了几个十一二岁的小男孩在玩耍&#xff0c;也没有像往日老人悠闲打…

Java --- JUC之线程中断机制

目录 一、什么是中断机制 二、三大中断方法 2.1、如何停止中断运行中的线程&#xff1f; 2.1.1、通过volatile实现线程中断停止 2.1.2、通过AtomicBoolean实现线程中断停止 2.1.3、通过interrupt()实现线程中断停止 2.2、interrupted()方法使用 一、什么是中断机制 一个…

如何定制化Spring Boot Starter,这次我终于学会了

文章目录什么是Spring Boot Starter实现步骤启动器自动配置包总结自定义Starter的实现逻辑Spring Boot Starter官网描述&#xff1a;Spring Boot Starter官方介绍 什么是Spring Boot Starter Starters可以理解为启动器&#xff0c;它包含了一系列可以集成到应用里面的依赖包&…

人工智能:通过Python实现语音合成的案例

今天给大家介绍一下基于百度的AI语音技术SDK实现语音合成的案例&#xff0c;编程语言采用Python&#xff0c;希望对大家能有所帮助&#xff01; 注册百度AI平台应用百度AI开放平台-全球领先的人工智能服务平台 首先登陆自己的百度账户&#xff0c;打开百度的AI开发平台页面 搜索…