ROS实现消息发布器和订阅器

news/2025/2/22 10:55:16

关于ROS的教程,官网上有很完整的介绍。

英文版http://wiki.ros.org/ROS/Tutorials

中文版http://wiki.ros.org/cn/ROS/Tutorials

但是笔者在按照教程实现的时候由于需要反复修改CMakeLists.txt以及package.xml,总是出现一些问题。现在把笔者从头开始实现的过程记录下来以供参考。采用的版本是Ubuntu16.04 与Kinetic

1.建立工作区间

http://wiki.ros.org/catkin/Tutorials/create_a_workspace

source /opt/ros/kinetic/setup.bash
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
source devel/setup.bash

2.创建功能包catkin_create_pkg

http://wiki.ros.org/catkin/Tutorials/CreatingPackage

cd ~/catkin_ws/src
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
cd ~/catkin_ws
catkin_make
. ~/catkin_ws/devel/setup.bash

3.创建ROS消息和ROS服务

http://wiki.ros.org/cn/ROS/Tutorials/CreatingMsgAndSrv

#创建一个msg
cd ~/catkin_ws/src/beginner_tutorials
mkdir msg
echo "int64 num" > msg/Num.msg
#创建一个srv
roscd beginner_tutorials
mkdir srv
roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv

 创建msg和srv时需要修改CMakeLists.txt及package.xml,这里先不修改,放在最后统一修改

4.编写源文件

http://wiki.ros.org/cn/ROS/Tutorials/WritingPublisherSubscriber%28c%2B%2B%29

本文用到ROS教程中的talker.cpp和listener.cpp,从 https://github.com/ros/ros_tutorials

中下载源码并在roscpp_tutorials中找到listener和talker的cpp文件

将talker.cpp和listener.cpp放在beginner_tutorials的src里面。

修改CMakeLists.txt为如下:

cmake_minimum_required(VERSION 2.8.3)
project(beginner_tutorials)

## Find catkin and any catkin packages
find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs genmsg)

## Declare ROS messages and services
add_message_files(FILES Num.msg)
add_service_files(FILES AddTwoInts.srv)

## Generate added messages and services
generate_messages(DEPENDENCIES std_msgs)

## Declare a catkin package
catkin_package()

## Build talker and listener
include_directories(include ${catkin_INCLUDE_DIRS})

add_executable(talker src/talker.cpp)
target_link_libraries(talker ${catkin_LIBRARIES})
add_dependencies(talker beginner_tutorials_generate_messages_cpp)

add_executable(listener src/listener.cpp)
target_link_libraries(listener ${catkin_LIBRARIES})
add_dependencies(listener beginner_tutorials_generate_messages_cpp)

5.编译及运行

cd ~/catkin_ws
catkin_make

6.测试消息发布器和订阅器

http://wiki.ros.org/cn/ROS/Tutorials/ExaminingPublisherSubscriber

打开一个新的终端 输入roscore
新终端2:
cd ~/catkin_ws
source ./devel/setup.bash
rosrun beginner_tutorials talker 
新终端3:
cd ~/catkin_ws 
source ./devel/setup.bash
rosrun beginner_tutorials listener

 

PS:

后续编写简单的服务器和客户端http://wiki.ros.org/cn/ROS/Tutorials/WritingServiceClient%28c%2B%2B%29

在beginner_tutorials中src中添加相应的.cpp文件,修改CMakeLists.txt,并在工作区目录下catkin_make就可以啦。

运行时记得source


http://www.niftyadmin.cn/n/866733.html

相关文章

2019秋招——笔试

20180906 美团 无人驾驶算法岗位 编程题(2道题30分) 1.给定一张包含N个点,N-1条边的无向连通图,节点从1到N编号,每条边的长度均为1,假设你从1号节点出发并打算遍历所有节点,那么总路程至少是…

捷联惯导总结--初始对准,位置标定,INS姿态更新,GPS/INS组合

惯导及组合导航回顾 2018.09.16 今天和17系的同学一起把惯导的流程捋了一遍,为了加深自己的记忆,这里在前面把心得大致列出来。 我们这里只考虑捷联式惯导及松组合 首先拿到惯性传感器(加速度计和陀螺仪)需要对其进行标定&#x…

C++基础回顾1——数据类型,变量类型、存储、运算

最近找工作没有好好准备code,结果被问了很多基础知识都不会,所以这里要来回顾一下。 大家找工作一定要提前准备啊,好好刷题。 ————————————————————————————————————————————————————…

C++基础回顾2——类和对象、

类和对象 数据封装是面向对象编程的一个重要特点,它防止函数直接访问类类型的内部成员。类成员的访问限制是通过在类主体内部对各个区域标记 public、private、protected 来指定的。关键字 public、private、protected 称为访问修饰符。 一个类可以有多个 public、…

说说 JavaScript 中 BOM 的 location 对象

location 提供了与当前窗口中加载的文档有关的信息以及导航功能。它既是 window 对象的属性,又是 document 对象的属性,即 window.location 与 document.location 引用的是同一个对象。它还能把 URL 解析为独立的片段,下面列出 location 对象…

北斗在轨卫星

https://www.glonass-iac.ru/en/BEIDOU/index.php

2019届秋招导航算法岗位面试回顾

这里笔者根据这一两个月来的面试经验,写一篇导航专业技术面的回顾贴。笔者的面试过程再上一篇文章中写过,签完三方之后会发布出来。 1.简历部分 由于笔者在研究生期间主要做的是卫星导航方面的工作,包括高精度时间传递和动态定位&#xff0…

说说 JavaScript 中 BOM 的 navigator 对象

navigator 对象已成为识别客户端浏览器的事实标准。但每一种浏览器的 navigator 对象都有自己的属性: 属性或方法说明IEFirefoxSafari/ChromeOperaappCodeName浏览器名称。通常是 Mozilla3.01.01.07.0appMinorVersion次版本信息4.0--9.5appName浏览器的完整名称3.0…