古月居21讲第10个视频
此处是创建的发布者,
下图中的topic 和/turtle1/cmd_vel 是ROS 自带的
发布者要往这个话题中发布数据。
#include <ros/ros.h>
#include <geometry_msgs/Twist.h>
int main(int argc,char **argv)
{
// ros节点初始化 haigui_vel_publisher是节点的名字
ros::init(argc,argv,"haigui_vel_publisher");
//创建节点句柄
ros::NodeHandle n;
//创建一个publisher(发布者 名字是turtle_vel_pub) 发布名为/turtle1/cmd_vel的topic,消息类型为geometry_msgs::Twist,队列长度10
//<>里是消息的数据类型 发一个geometry_msgs::Twist 类型的消息
// 往/turtle1/cmd_vel话题里发
// 如果订阅者来不及接收,那发布者就先把消息放在队列里,要是队列满了,就覆盖最老的消息
ros::Publisher turtle_vel_pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel",10);//向master注册节点信息
//设置循环的频率
ros::Rate loop_rate(10);
int count = 0;
//封装数据并且发布出去,延时满足频率
while(ros::ok() )
{
//初始化geometry_msgs::Twist类型的消息 geometry_msgs::Twist是类,我们创建一个对象叫 vel_msg
geometry_msgs::Twist vel_msg;
vel_msg.linear.x = 0.5;
vel_msg.angular.z = 0.2;
//发布消息
// turtle_vel_pub是发布者, publish()是方法
turtle_vel_pub.publish(vel_msg);
// 下面相当于printf
ROS_INFO("Publsh turtle velocity command[%0.2f m/s,%0.2f rad/s]",
vel_msg.linear.x,vel_msg.angular.z);
//按照循环频率延时
loop_rate.sleep();
}
return 0;
}
在leaning_topic 里面的cmakelist 里的
###########
## Build ##
###########
后面,
###########
## install##
###########
前面。
输入
add_executable(velocity_publisher src/velocity_publisher.cpp)
# 把src/velocity_publisher.cpp 编译成 velocity_publisher 这个可执行文件
target_link_libraries(velocity_publisher ${catkin_LIBRARIES})
#把velocity_publisher这个可执行文件和ROS的库进行链接(主要是c++的接口和ROS的库进行连接)
然后在工作空间根目录下 编译
catkin_make
然后在工作空间的devel/lib/leaning_topic里面有了 velocity_publisher 这个可执行文件。
然后
xrh@xrh-Dell-G15-5511:~/test_ws$ rosrun leaning_topic velocity_publisher
rosrun 也是运行的 velocity_publisher 这个可执行文件
但是:
写在最后:
节点的名字是 haigui_vel_pulisher
注意区别 节点名字和 可执行文件的名字
rosrun leaning_topic velocity_pubulisher
运行 功能包名 可执行文件名(我以为是节点名,但其实不是,看下一张图,节点名字是haigui_vel_publisher)