ROS学习-3 (C++编程实现创建发布者+发布数据控制海龟运动)

古月居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)

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值