IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> ROS学习笔记(一):利用节点进行发布与订阅 -> 正文阅读

[人工智能]ROS学习笔记(一):利用节点进行发布与订阅

一、创建功能包

cd ~/catkin_ws/src
catkin_create_pkg packagename std_msgs roscpp rospy

其中,packagename替换成自己需要的包名称。

创建完成后,回到工作空间进行编译。

cd ..
catkin_make
source ~/catkin_ws/devel/setup.bash

二、创建Publisher

cd ~/catkin_ws/src/packagename/src
vim talkname.cpp

其中,talkname替换成自己需要的发布者名称。

下面编写发布者,发布的内容为姓名学号以及当前系统的时间。

#include <sstream>
#include <ctype.h>
#include <algorithm>
#include "ros/ros.h"
#include "std_msgs/String.h"
#include <time.h>

using namespace std;

int main(int argc, char **argv)
{
	//ROS节点初始化
	ros::init(argc, argv, "nodename1");//第三个参数替换为需要的节点名称
	
	//创建节点句柄
	ros::NodeHandle n;

	//创建一个Publisher,发布名为cendou的topic,消息类型为std_msgs::String
	ros::Publisher chatter_pub = n.advertise<std_msgs::String>("cendou", 1000);

	//设置循环的频率
	ros::Rate loop_rate(1);//发布的频率为1Hz

	int count = 0;
	while (ros::ok())
	{
		//初始化std_msgs::String类型的消息
		std_msgs::String msg;
		std::stringstream ss;
		

		time_t tt;
		time( &tt );
		tt = tt + 8*3600;  // 转换时区
		tm* t= gmtime( &tt );

		int year, mon, day, hour, min, sec;
		year = t->tm_year + 1900;
		mon = t->tm_mon + 1;
		day = t->tm_mday;
		hour = t->tm_hour;
		min = t->tm_min;
		sec = t->tm_sec;

		string Y;
		stringstream yy;
		yy<<year;
		yy>>Y;
		Y.erase(remove(Y.begin(), Y.end(), ','), Y.end());//此处为了去除自动生成的分隔符

		locale::global(locale(""));
		locale l("");
		wcout.imbue(l);//识别中文
		
		ss << "姓名 学号 " << Y << "-" << mon << "-" << day << " " << hour << ":" << min << ":" << sec << endl;
		msg.data = ss.str();

		//发布消息
		ROS_INFO("%s", msg.data.c_str());
		chatter_pub.publish(msg);
		
		//循环等待回调函数
		ros::spinOnce();

		//按照循环频率延时
		loop_rate.sleep();
		++count;
	}

	return 0;
}

三、创建Subscriber

方法同上,这里只放出如何编写订阅者。

#include <sstream>
#include "ros/ros.h"
#include "std_msgs/String.h"

void chatterCallback(const std_msgs::String::ConstPtr& msg)//回调函数
{
	setlocale(LC_ALL, "");
	setlocale(LC_CTYPE, "zh_CN.utf8");//输出中文
	ROS_INFO("%s", msg->data.c_str());//打印接收到的信息
}

int main(int argc, char **argv)
{
	ros::init(argc, argv, "nodename2");//第三个参数需改成需要的节点名称
	ros::NodeHandle n;
	ros::Subscriber sub = n.subscribe("cendou", 1000, chatterCallback);
	ros::spin();
	return 0 ;
}

四、修改CMakeLists.txt文件

回到功能包,打开CMakeLists.txt文件,找到对应部分进行修改,并去掉注释。

include_directories(include ${catkin_INCLUDE_DIRS})

add_executable(talkname src/talkname.cpp)
target_link_libraries(talkname ${catkin_LIBRARIES})
add_dependencies(talkname ${PROJECT_NAME}_generate_messages_cpp)

add_executable(listenname src/listenname.cpp)
target_link_libraries(listenname ${catkin_LIBRARIES})
add_dependencies(listenname ${PROJECT_NAME}_generate_messages_cpp)

修改完成后,我们返回到工作空间,进行catkin_make。

cd ~/catkin_ws
catkin_make

五、运行

首先进行环境变量的配置——一劳永逸方法:

echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

打开一个终端

roscore

打开第二个终端,我们先启动订阅者。

rosrun packagename listenname

此时终端没有任何输出,因为我们没有启动发布者。

打开第三个终端,启动发布者。

rosrun packagename talkname

此时发布者开始输出发布内容,短暂延迟后,订阅者输出同样的内容。

当然,你也可以再次打开一个终端,运行下面命令来查看节点运行可视化图。

rqt_graph

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-06 12:14:10  更:2021-10-06 12:14:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 10:19:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码