ROS 入门21讲 之~ 实现一个发布者
如何实现一个发布者
主要就是4个步骤:
- 初始化ROS节点;
- 向ROS Master注册节点信息(ROS1,在ROS2中已经没有这个概念),包括发布的话题名,话题的消息类型;
- 创建消息数据;
- 按照一定的频率发布消息。
代码实现
/*该例程将发布一个turtle1/cmd_vel话题,消息类型为geometry_msgs::Twist*/
#include <ros/ros.h>
#include <geometry_msgs/Twist.h>
int main(int argc, char **argv)
{
//ros节点初始化
ros::init(argc, argv, "velocity_publisher");
//创建节点句柄
ros::NodeHandle Node;
//创建一个publisher,发布一个名为/turtle1/cmd_vel的topic, 消息类型为geometry_msgs::Twist, 队列长度为10
ros::Publisher turtle_vel_pub = Node.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel", 10);
//设置循环的频率
ros::Rate loop_rate(10);
int count = 0;
while(ros::ok())
{
//初始化geometry_msgs::Twist类型的消息
geometry_msgs::Twist vel_msgs;
vel_msgs.linear.x = 0.5;
vel_msgs.angular.z = 0.2;
//发布消息
turtle_vel_pub.publish(vel_msgs);
ROS_INFO("Publish turtle velocity cmmand[%0.2f m/s, %0.2 rad/m]", vel_msgs.linear.x, vel_msgs.angular.z);
//按照循环频率延迟
loop_rate.sleep();
}
return 0;
}
代码的编译
在当前的功能包中的CMakeList.txt中 install前添加两行:
add_executable(velocity_publisher src/velocity_publisher.cpp)#指定为编译成velocity_publisher这个可执行文件
target_link_libraries(velocity_publisher ${catkin_LIBRARIES})#帮助把可执行文件与ROS库进行一个连接
然后回到工作空间进行catkin_make,然后编译完成;
我们在终端中运行刚才的节点: