在 ROS 同提供了一些实用的命令行工具,可以用于获取不同节点的各类信息,常用的命令如下:

  • rosnode : 操作节点
  • rostopic : 操作话题
  • rosservice : 操作服务
  • rosmsg : 操作msg消息
  • rossrv : 操作srv消息
  • rosparam : 操作参数

和之前介绍的文件系统操作命令比较,文件操作命令(参数增删改查)是静态的,操作的是磁盘上的文件,而上述命令是动态的,在ROS程序启动后,可以动态的获取运行中的节点或参数的相关信息。

实现分析:

  1. 乌龟运动控制实现,关键节点有两个,一个是乌龟运动显示节点 turtlesim_node,另一个是控制节点,二者是订阅发布模式实现通信的,乌龟运动显示节点直接调用即可,运动控制节点之前是使用的 turtle_teleop_key通过键盘 控制,现在需要自定义控制节点。
  2. 控制节点自实现时,首先需要了解控制节点与显示节点通信使用的话题与消息,可以使用ros命令结合计算图来获取。
  3. 了解了话题与消息之后,通过 C++  编写运动控制节点,通过指定的话题,按照一定的逻辑发布消息即可。

实现流程:

  1. 通过计算图结合ros命令获取话题与消息信息。
  2. 编码实现运动控制节点。
  3. 启动 roscore、turtlesim_node 以及自定义的控制节点,查看运行结果。

1.话题与消息获取

第一个命令行:

roscore

第二个命令行:

rosrun turtlesim turtlesim_node

第三个命令行:

rosrun turtlesim turtle_teleop_key

第四个命令窗:

1.1话题获取

通过 rostopic 列出话题:

rostopic list

1.2消息获取

获取消息类型-rostopic type /turtle1/cmd_vel

获取消息格式-rosmsg info geometry_msgs/Twist

响应结果:

geometry_msgs/Vector3 linear                                //线速度
  float64 x
  float64 y
  float64 z
geometry_msgs/Vector3 angular                                //角速度
  float64 x
  float64 y
  float64 z

rostopic echo /turtle1/cmd_vel

可实时查看角速度线速度

2.输入命令-极简实现转圈

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

pub-      发布

-r 10  以10hz的频率发布消息

/turtle1/cmd_vel        使用的话题

后面的Tab补齐

3.c++实现

1.配置功能包 plumbing_test

2.导入依赖的包 roscpp rospy std_msgs geometry_msgs

3.在功能包plumbing_test目录src下新建test01_pub_twist.cpp

/*编写 ROS 节点,控制小乌龟画圆准备工作:1.获取话题已知: /turtle1/cmd_vel)2.获取消息类型(已知: geometry_msgs/Twist)3.运行前,注意先启动 turtlesim_node 节点实现流程:1.包含头文件2.初始化 ROS 节点3.节点句柄4.创建发布者对象5.发布逻辑6.spinonce 循环
*/#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");//3.创建节点句柄ros::NodeHandle nh;// 4.创建发布者对象
ros::Publisher pub =nh.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel",10); //句柄有个函数//5.发布逻辑ros::Rate rate(10); //设置发布频率//组织发布消息geometry_msgs::Twist twist;twist.linear.x =1.0;  //前进速度-浮点类型twist.linear.y =1.0;   //不能横着走-为0twist.linear.z =1.0;    //上下速度,不是鸟,不能飞twist.angular.x = 0.0; //翻滚角twist.angular.y = 0.0; //俯仰角twist.angular.z = 0.5;  //偏航角//循环发布while(ros::ok())
{pub.publish(twist);//休眠rate.sleep();//回头// 6.spinonce 循环ros::spinOnce();
}return 0;
}

4.配置文件

5.编译

第一个命令行:

roscore

第二个命令行:

rosrun turtlesim turtlesim_node

第三个命令行:

cd demo03_ws

catkin_make

source ./devel/setup.bash

rosrun plumbing_test test01_pub_twist 

ros操作命令与实操-话题发布相关推荐

  1. 【一学就会的ROS基础入门教程 】03-1 ROS基础编程:ROS工作空间的创建、话题topic的发布与接收、以及话题消息的自定义使用

    [一学就会的ROS基础入门教程 ]03-1 ROS基础编程:ROS工作空间的创建.话题topic的发布与接收.以及话题消息的自定义使用 文前白话 1.创建工作空间与功能包 关于工作空间的介绍 创建开发 ...

  2. 1W字长文:蓝绿发布、金丝雀发布、滚动发布、A/B测试 原理和实操

    背景: 蓝绿发布.金丝雀发布.滚动发布.A/B测试 ,是大家日常常见的发布工作.所以发布的原理和实操是一个非常.非常核心的面试知识点. 在40岁老架构师 尼恩的读者交流群(50+)中,其相关面试题是一 ...

  3. datagridview 绑定list 不能刷新界面_人人都可写代码-H5零基础编程-发布活动界面实操07...

    欢迎来到人人都可写代码,大家好,我是杨晓华,今天我们的课程内容是,项目实操,开发一个发布活动界面的H5. 这是要实现的H5发布活动界面展示效果,下面就是教大家如何制作的步骤: 1.在views的项目s ...

  4. 介绍一下ROS常用的命令<rosnode和rostopic实操>(一)

    目录 前言 一.准备工作 1.打开终端,运行roscore 2.再打开两个新终端,发布和订阅话题 二.rosnode命令 2.1 rosnode list:列出正在运行的节点 2.2 rosnode ...

  5. 重磅发布:《AI产品经理的实操手册(2023版)》

    今天是咱们社群"AI产品经理大本营"六周年活动的最后一天,正式发布这份大家和我都非常期待的重磅干货--<AI产品经理的实操手册(2023版)> 上周发布的"A ...

  6. 13.ROS编程学习:话题发布控制乌龟

    目录 准备工作 c++控制乌龟运动 python控制乌龟运动 参考学习资料:赵虚左的课程+古月的ROS机器人开发实践P56的例程. 准备工作 打开ROS乌龟仿真器 roscore rosrun tur ...

  7. Linux实操篇之常用基本命令二【文件操作命令续,实现中英文切换】

    这里写目录标题 写在前面 centos7 实现中英文切换 1. cat 1.1 基本语法 1.2 案例实操 2. more 2.1 基本语法与操作说明 2.2 案例实操 输入 = 输入 :f 3. l ...

  8. 谷歌大数据三篇论文标题_抖音短视频标题怎么写才能上热门?起标题的3个实操步骤,大数据分析爆款标题的套路...

    抖音短视频运营学习路线图,带你全面系统性学习抖音短视频运营! 第十一篇:抖音短视频标题撰写技巧. 1.了解视频标题应该具备的特点. 2.掌握起视频标题的3个实操步骤. 3.掌握起视频标题的注意事项. ...

  9. 学计算机高考英语听力考试,高考英语听力机考,常识、实操、备考,你要知道这些...

    原标题:高考英语听力机考,常识.实操.备考,你要知道这些 关于北京高考英语听力考试,从相关政策.考试安排和注意事项,再到备考,你需要知道的,都在这儿啦! 这些基本常识你要知道: 北京高考英语听力考试 ...

最新文章

  1. 检查邮箱是否包含教育后缀.edu结尾的邮箱
  2. 转:Fedora 17安装后配置|rpmfusion源|Rhythmbox mp3 wma支持插件|smplayer
  3. win10 linux子系统ssh,win10 子系统 bash 不能监听端口
  4. Spring AOP之异常转换
  5. Deepin系统更新apt-get源
  6. 看来cmwap真的是没有可以使用的邮件客户端了
  7. JavaMail中解决中文附件名乱码的问题
  8. javase基础复习攻略《六》
  9. MVC中页面的传值方式总结
  10. msp430的常量可以这样定义
  11. Springmvc源码分析之dispatcherServlet
  12. python怎么播放音乐_Python实现在线音乐播放器
  13. edp和edt哪个好_菲拉格慕香水edp和edt的区别 选择适合自己的香水方法
  14. 我想加入阿里,我该怎么做
  15. SRGB和RGB的区别
  16. 学生个人网页制作成品
  17. 优化代码中的“坏味道”
  18. Thinking -- CSS从根解决选择前一个兄弟元素
  19. 【水果识别】形态学水果识别(含识别率)【含GUI Matlab源码 907期】
  20. day16re模块和面向对象

热门文章

  1. 这些大厂笔试题 你都见识(被无情鞭挞)过了吗?—— 哔哩哔哩篇
  2. 用Python 写个 开心消消乐小游戏
  3. 1323:【例6.5】活动选择
  4. CorelDraw2022完整版图形平面设计
  5. 【ZZULIOJ】 Python 1016: 银行利率
  6. C语言生成随机数的函数,为什么循环后随机数都一样?
  7. Day17 什么是静态成员类?为什么静态成员类优于非静态成员类?
  8. 上顿号符号_标点符号(1):谈谈顿号的用法
  9. spss入门——简单的数据预处理到时间序列分析系列(四)
  10. 用luasocket读取双色球中奖号码