ros教程:创建程序包
前言
ros教程:创建程序包
根据前篇教程已经创建好了工作空间,并已经成功生效了环境变量,接下来创建一个功能包
一、创建功能包
功能包的名字根据我们这个功能包的作用来命名。比如我现在的功能包是用来学习ROS的C++编程,那么我的功能包名称就叫做learning_cplus。
打开终端,输入下面指令。
cd catkin_ws/src
catkin_create_pkg learning_cplus roscpp rospy std_msgs
我们通过cd指令切换当前路径到src文件夹下,在该路径下使用catkin_create_pkg指令 来创建一个功能包。
格式如下:catkin_create_pkg 功能包名称 依赖项1 依赖项2 ......
依赖项是你的这个功能包依赖于哪些功能模块,比如该功能包,就导入了C++、Python和std_msgs(后面会有详细介绍)。
然后返回到catkin_ws目录下进行编译。
我们可以看到learning_cplus功能包在catkin_ws工作空间编译成功,我们生效一下环 境变量,通过roscd learning_cplus指令即可进入该功能包。
目前我们的learning_cplus下有include(头文件)和src(源文件)两个文件夹,还有CMakelist.txt编译配置文件和package.xml功能包列表文件。
到这里,我们的learning_cplus功能包创建结束。
二、创建节点
先进入learning_cplus功能包内,进入src文件夹内,创建一个发布节点。
roscd learning_cplus
cd src
touch publisher.cpp
发布节点publisher.cpp内容如下。这里建议大家自行修改内容。
#include "ros/ros.h" //导入ROS系统包含核心公共头文件
#include "std_msgs/String.h" //导入std_msgs/String消息头文件,这个是由std_m sgs包的string.msg文件自动生成。
#include <sstream>
int main(int argc, char **argv)
{
ros::init(argc, argv, "talker"); //初始化ROS,指定节点名称为“talker”,节点 名称要保持唯一性。名称定义参考
ros::NodeHandle n; //实例化节点
ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000); //发布一个消息类型为std_msgs/String,命名为chatter的话题。
//定义消息队列大小为1000,即超过1000条消息之后,旧的消息就会丢弃。
ros::Rate loop_rate(10); //指定发布消息的频率,这里指10Hz,也即每秒10次
//通过 Rate::sleep()来处理睡眠的时间来控制对应的发布频率。