一、如何创建自定义的msg文件?

msg文件介绍:

1、msg文件是用来描述ROS中自定义的消息类型的,可以被不同语言调用。

2、msg文件以 .msg 结尾,必须存放在软件包的msg文件夹下。

3、msg文件可以传递的数据类型很多:

int8 int16 int32 int64

float32 float64

string

time duration

其他msg文件

长度不固定数组array[] 和长度固定数组array[C]

4、编写规则:

每一行内容为: 标准数据类型 数据变量名称

实操步骤:

1、建立工作空间并进入src文件夹:

mkdir -p launch_ws/src
cd ~/launch_ws/src

2、创建package并进入

catkin_create_pkg launch_test_pkg std_msgs roscpp
cd launch_test_pkg/

3、创建msg文件夹并在其下创建 .msg 文件

mkdir msg
cd msg
vim myMsg.msg

文件中内容如下:

string name
int32 device_id
float32 percent

4、修改package(即launch_test_pkg)中的文件

修改package.xml:将下图红框中的两行取消注释


修改CMakeLists.txt文件:

添加红框中的字符串,以新增配置项:

取消如下框内的注释,箭头所指的地方是自定义msg文件的名称:

取消如下红框内的注释


5、编写cpp文件

这里仍然以博主的 ROS实战篇(一) 中的例子----节点间实现数据通信为例,分别编写 topic_publisher.cpp 和 topic_subscriber.cpp 两个文件:

topic_publisher.cpp 内容如下:

#include "ros/ros.h"
#include "stdio.h"
#include "launch_test_pkg/myMsg.h"int main(int argc, char **argv)
{ros::init(argc, argv, "topic_publisher");ros::NodeHandle node_handle;ros::Publisher pub_number = node_handle.advertise<launch_test_pkg::myMsg>("/count",10);ros::Rate rate(1);int number_count = 0;while(ros::ok()){launch_test_pkg::myMsg msg;msg.name = "robot";msg.device_id = number_count%5;msg.percent = rand()/double(RAND_MAX);pub_number.publish(msg);ros::spinOnce();rate.sleep();number_count++;}return 0;
}

topic_subscriber.cpp 中的内容如下:

#include <ros/ros.h>
#include <launch_test_pkg/myMsg.h>void num_callback(const launch_test_pkg::myMsg::ConstPtr& msg)
{ROS_INFO("Msg.name: [%s], Msg.device_id: [%d], Msg.percent: [%f]", msg->name.c_str(),msg->device_id, msg->percent);
}int main(int argc, char **argv)
{ros::init(argc, argv, "topic_subscriber");ros::NodeHandle node_handle;ros::Subscriber number_subscriber = node_handle.subscribe("/count", 10, num_callback);ros::spin();return 0;
}

这一步完成后,需要修改CMakeLists.txt,即将cpp文件设置为可执行的节点,再完成与库的链接,这一过程和博主的 ROS实战篇(一) 一样,不再赘述。

二、如何编写launch文件?

launch文件介绍

可视作启动文件,方便启动多个节点。

因为ROS的一个重要思想就是低耦合,每个节点只完成一个功能,使用launch文件可以在大型工程中方便地管理多个节点。

实操步骤(接上文)

1、创建launch文件:

cd ~/launch_ws/src/launch_test_pkgmkdir launchcd launch/vim start_test.launch

launch文件内容如下:

<!--
Copyright:
Author:
Description--><launch><node pkg="launch_test_pkg" type="publish_node" name="test_publish_node" output="screen"/><node pkg="launch_test_pkg" tyoe="subscribe_node" name="test_subscribe_node" output="screen"/>
</launch>

2、编译并配置环境

cd ~/launch_wscatkin_makesource devel/setup.bash

3、运行launch文件

roslaunch launch_test_pkg start_test.launch

4、结果如下图所示:


本文参考大佬的教程:https://www.bilibili.com/video/BV1mC4y1t7Ue

ROS实战篇(二)如何创建自定义的msg文件以及自己编写launch文件?相关推荐

  1. Vue实战篇二十六:创建动态仪表盘

    系列文章目录 Vue基础篇一:编写第一个Vue程序 Vue基础篇二:Vue组件的核心概念 Vue基础篇三:Vue的计算属性与侦听器 Vue基础篇四:Vue的生命周期(秒杀案例实战) Vue基础篇五:V ...

  2. Vue实战篇二十八:实现一个手机版的购物车

    系列文章目录 Vue基础篇一:编写第一个Vue程序 Vue基础篇二:Vue组件的核心概念 Vue基础篇三:Vue的计算属性与侦听器 Vue基础篇四:Vue的生命周期(秒杀案例实战) Vue基础篇五:V ...

  3. Vue实战篇二十七:实现走马灯效果的商品轮播图

    系列文章目录 Vue基础篇一:编写第一个Vue程序 Vue基础篇二:Vue组件的核心概念 Vue基础篇三:Vue的计算属性与侦听器 Vue基础篇四:Vue的生命周期(秒杀案例实战) Vue基础篇五:V ...

  4. Vue实战篇二十九:模拟一个简易留言板

    系列文章目录 Vue基础篇一:编写第一个Vue程序 Vue基础篇二:Vue组件的核心概念 Vue基础篇三:Vue的计算属性与侦听器 Vue基础篇四:Vue的生命周期(秒杀案例实战) Vue基础篇五:V ...

  5. 2022黑马Redis跟学笔记.实战篇(二)

    2022黑马Redis跟学笔记.实战篇 二 实战篇Redis 开篇导读 4.1短信登录 4.1.1. 搭建黑马点评项目 一.导入黑马点评项目 二.导入SQL 三.有关当前模型 四.导入后端项目 相关依 ...

  6. Vue实战篇四:创建多步骤表单

    系列文章目录 Vue基础篇一:编写第一个Vue程序 Vue基础篇二:Vue组件的核心概念 Vue基础篇三:Vue的计算属性与侦听器 Vue基础篇四:Vue的生命周期(秒杀案例实战) Vue基础篇五:V ...

  7. [知识图谱实战篇] 二.Json+Seaborn可视化展示电影实体

    前面作者讲解了很多知识图谱原理知识,包括知识图谱相关技术.Neo4j绘制关系图谱等,但仍缺少一个系统全面的实例.为了加深自己对知识图谱构建的认识,为后续创建贵州旅游知识图谱打下基础,作者深入学习了张宏 ...

  8. OpenGL学习笔记一之实战篇二 文本渲染

    转载自 https://learnopengl-cn.github.io/06%20In%20Practice/02%20Text%20Rendering/ 当你在图形计算领域冒险到了一定阶段以后你可 ...

  9. laravel 创建自定义的artisan make命令来新建类文件

    前言 我们在laravel开发时经常用到artisan make:controller等命令来新建Controller.Model.Job.Event等类文件. 在Laravel5.2中artisan ...

最新文章

  1. Android studio 4.1 不显示光标当前的类名、方法名
  2. 【开篇】自我介绍和博客未来规划
  3. MySQL的explain简书_MySQL Explain
  4. Android线程详解
  5. js导出excel单元格内换行符代码_前端和excel的那些事
  6. C语言编写简单朗读发音小工具!!
  7. 递归--递推之组合数
  8. python取字符串一部分_python,如何获取字符串中的子字符串,部分字符串
  9. objective-c 关键字和概念
  10. 怎样才能打开Tuxera NTFS的主界面?
  11. python字典攻击
  12. 64位Win10 Modelsim破解及证书LICENSE.TXT无法生成解决方法
  13. yasm linux gcc,yasm安装出现问题
  14. 向量微积分——理解梯度
  15. HTML与CSS的使用与总结
  16. Docker常用命令(启动、镜像相关、容器相关、文件拷贝、目录挂载、查看容器IP地址、Docker备份与恢复)
  17. 关于解决Android studio:The emulator process for AVD Pixel_4_XL_API_30 has terminated 以及改变AVD存放位置
  18. 监控摄像头接入GB28181平台实现监控视频直播的详细搭建流程
  19. 用python实现基于自媒体数据的人群聚类分析
  20. pr预设的卷及内核锐化是什么_PR CC 特效

热门文章

  1. 【离线】esrally实践总结
  2. python+tensorflow-gpu+CUDA+cudnn+显卡配置关键步骤详解
  3. (原創) 白蘋驚魂記 (iPhone)
  4. mysql组合字段语句_mysql group_concat 使用 (按分组组合字段)
  5. 8位串行输入串行输出移位寄存器的Verilog设计
  6. ubuntu网络无法连接
  7. 算法 - algorithm
  8. Numeric 数据类型
  9. 高等代数 二次型与矩阵的合同(第6章)1 二次型,标准形,规范形
  10. chrony时间同步