我是靠谱客的博主 想人陪帆布鞋,最近开发中收集的这篇文章主要介绍【ros学习笔记】-3 话题话题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

话题

1 发布者

1.1 c++

该c++文件在功能包下的src文件夹下创建

一般步骤:

  • 1 节点初始化(节点名称)
  • 2 创建节点句柄
  • 3 创建话题(发布)话题名称 缓存大小
  • 4 话题发布消息
#include <ros/ros.h>
#include <geometry_msgs/Twist.h>


int main(int agrc,char **agrv){
    //节点名称
	ros::init(agrc,agrv,"pra_topic_publisher");
    //节点句柄
	ros::NodeHandle n;
    //                                    话题消息类型           话题名称        缓存大小
	ros::Publisher pub = n.advertise<geometry_msgs::Twist>("topic_pub_name_cpp",10);
    //循环
	ros::Rate r(1);

	geometry_msgs::Twist msg;
	msg.linear.x=1;
	msg.linear.y=1;
	float var=0;
	while(ros::ok())
	{
        //话题发布消息
		pub.publish(msg);
        //向屏幕打印
		ROS_INFO("x:%.0f,y:%.0f",msg.linear.x,msg.linear.y);
		var = msg.linear.x;
		msg.linear.x = msg.linear.x + msg.linear.y;
		msg.linear.y = var;
        r.sleep();
	}
	return 0;
}

c++语言不可直接执行,需要编译成可执行文件,并与相关库链接

在功能包里的CMakeList文件:

# 1 添加依赖     在find_package添加roscpp等用到的依赖
find_package(catkin REQUIRED COMPONENTS
  roscpp
  std_msgs
  rospy
)

# 2
include_directories(
# include
  ${catkin_INCLUDE_DIRS}
)

# 3 编译成可执行文件,并链接 
# 编译成可执行文件
#    可执行文件名称(名称最好与节点名相同,好分辨)  对应的文件
add_executable(exec_file_name src/pub4.cpp)
#                生成的可执行的文件与库链接
target_link_libraries(exec_file_name ${catkin_LIBRARIES})

运行:

roscore 
rosrun 功能包名 可执行文件
rosrun practice_pkg exec_file_name

:生成的可执行文件在 catkin4/devel/lib/功能包名/ 文件夹下,在该目录终端下,输入以下指令可直接运行

./可执行文件名
./exec_file_name

1.2 python

python是可执行文件,可以直接执行,无需编译、链接
在功能包下创建scripts文件,用于存放python文件

注意:ubuntu 默认的文件都是不可执行的,需要将文件改为可执行的文件:
第一种:在python文件目录下的终端输入:

list -l    # 查看文件是否为可执行文件
chmod +111 file.py # 手动改为可执行文件 

在这里插入图片描述
第二种:直接在文件上右击——属性——权限——勾选可执行文件

#!/usr/bin/env python  

# 上面的命令必须存在   此命令指定为python解释器
import rospy
from geometry_msgs.msg import Twist

def func():
    # 节点名    anonymous默认是false,当是true时,出现同名节点会自动补一串数字,用以区分
    rospy.init_node("pra_topic_publisher",anonymous=True)
    # 创建一个发布者    话题名称    消息类型     缓存
    pub = rospy.Publisher("py_pub_topic",Twist,queue_size=10)
    #循环频率是2
    rat = rospy.Rate(2)
    msg = Twist()
    msg.linear.x=1
    msg.linear.y=1
    while not rospy.is_shutdown():
        # 话题发布消息
        pub.publish(msg)
        # 向屏幕打印消息
        rospy.loginfo(f'x:{msg.linear.x},y:{msg.linear.y}')
        msg.linear.x , msg.linear.y=msg.linear.x+msg.linear.y , msg.linear.x
        rat.sleep()

if __name__=='__main__':
    try:
        func()
    except:
        pass

运行文件:

rosrun practice_pkg pra_topic_publisher.py

在这里插入图片描述

易错点:

#!/usr/bin/env python  

python文件,首行必须有这个;
作用:指定为python解释器

2 订阅者

订阅话题

  • 初始化节点(起节点名)
  • 创建句柄
  • 创建发布者(订阅节点名,缓存,回调函数)
  • 创建回调函数

2.1 c++

文件名称:pra_topic_subscriber.cpp
在这里插入图片描述

#include <ros/ros.h>
#include <geometry_msgs/Twist.h>

//创建回调函数,接受到订阅的消息,会自动进入回调函数
void CallBack(const geometry_msgs::Twist::ConstPtr& msg)
{
    ROS_INFO("subscriber:x:%.0f,y:%.0f,z:%.0f",(msg->linear).x,(msg->linear).y,(msg->linear).z);
}

int main(int agrc,char **agrv){
    //初始化节点        节点名
    ros::init(agrc,agrv,"pra_node_subscriber_cpp");
    //创建句柄
    ros::NodeHandle n;
    //创建订阅者,订阅 叫topic_pub_name_cpp 的话题,缓存是20,接收到消息进入  回调函数
    ros::Subscriber sub = n.subscribe("topic_pub_name_cpp",20,CallBack);
    //循环等待回调函数
    ros::spin();
    return 0;
}

这个文件也需要配置,在CMakeList中:

# 可执行文件名      链接的文件名称
add_executable(pra_topic_subscriber src/pra_topic_subscriber.cpp)
# 可执行文件与相关库做链接
target_link_libraries(pra_topic_subscriber ${catkin_LIBRARIES})

注意:以上完成后还需要编译,即在工作空间目录下运行catkin_make

订阅的话题是topic_pub_name_cpp,因此,运行此节点时也要运行之前的发布者节点

roscore
rosrun practice_pkg pra_topic_publisher
rosrun practice_pkg pra_topic_subscriber

在这里插入图片描述

2.2 python

#!/usr/bin/env python

import rospy
from geometry_msgs.msg import Twist

# 回调函数
def CallBack(msg):
    rospy.loginfo(f"x:{msg.linear.x},y:{msg.linear.y}")


def func():
    # 节点初始化
    rospy.init_node("pra_node_name_py")
    # 订阅信息,订阅的是名叫topic_name的话题  缓存20
    rospy.Subscriber("topic_name",Twist,CallBack,queue_size=20)
    # 循环等待回调函数
    rospy.spin()

if __name__ == "__main__":
    try:
        func()
    except:
        pass

注意:不要忘了将文件改为可执行文件
在这里插入图片描述
注:必须先启动roscore

最后

以上就是想人陪帆布鞋为你收集整理的【ros学习笔记】-3 话题话题的全部内容,希望文章能够帮你解决【ros学习笔记】-3 话题话题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部