一、如何创建自定义的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. leetcode-155 最小栈
  2. 智能车竞赛B车模车轮毂断裂原因所在
  3. day06:02oracle体系结构_存储结构
  4. 在Hammerstein非线性模型中,基于PSO的参数辨识系统
  5. pdf 中添加文章操作
  6. 【城市沙龙】LiveVideoStack Meet|南京:互联网沙漠的音视频发展
  7. 配置vim支持源码浏览(vim+ctags+cscope)
  8. gpu编程如何一步步学习_如何学习贴片机编程
  9. rabbitmq——镜像队列
  10. linux找不到动态链接库 .so文件的解决方法
  11. Echart.js的趋势图入门与实例
  12. 【Oracle】RedHat 6.5 安装 11g数据库
  13. 第六章 输入输出系统-作业
  14. 计算机图形学(三)——实验三:圆的生成算法
  15. SqlHelper方法
  16. Matlab fftshift函数 C 代码实现
  17. js 浏览器语音播报
  18. R语言plot(lm)绘图结果解读
  19. 不同版本cuda对应的NVIDIA驱动版本
  20. 网页设计中的图片技巧

热门文章

  1. 听音乐用什么蓝牙耳机好?听音乐音质好的蓝牙耳机推荐
  2. IEEE Transactions on Industrial Informatics(TII)投稿须知
  3. 如何在达梦数据库安装ODBC
  4. 【微服务】GateWay概念与使用
  5. 简易教程:教你如何使用Meshlab提取已有的三维模型的结构点云
  6. svchost.exe占用cpu100 的解决方法
  7. ssd测试软件cy,简析物体识别SSD算法
  8. 概率论 思维导图复习提纲
  9. VS2019中文输出乱码解决方法(C语言)
  10. 线性dp,后缀处理——cf1016C好题