1.1[ROS]面向对象编程的订阅方实现

前言

面向对象编程时c++等语言的重要特性,之前的文章虽然简单实现了订阅方,但时面向过程编程,本文针对面向对象的编程,编写一个订阅激光扫描话题的节点

要点

与面向过程不同的是,面向对象需要定义很多类,通过实例(对象)的实现来编程

代码

节点代码

这段代码实例化一个控制器的对象

#include <ros/ros.h>
#include <package/Class.hpp>

int main(int argc, char ** argv)
{
	ros::init(argc, argv, "node_name");
	ros::NodeHandle nodeHandle("~");
	node_name::Controller controller(nodeHandle);
	ros::spin();
	return 0;
}

本文中使用的是private的节点句柄,因为这么使用使得本句柄下所有的函数定义都在句柄为名的名称空间下,这样封装性做得更好,而且在大型项目中也避免了重名的风险。

Controller头文件

定义了Controller类。

#pragma once
#include <ros/ros.h>
#include <sensor_msgs/LaserScan.h>

namespace node_name
{
	class Controller
	{
	public:
		Controller(ros::NodeHandle& nodehandle);
		virtual ~Controller();
	private:
		ros::NodeHandle	nodehandle_;
		ros::Subscriber subscriber_;
		std::string topic_;
		int queue_size_	;

		bool readParameters();
		void callBack(const sensor_msgs::LaserScan& msg);
	};
}

Controller实现文件

#include"Controller.hpp"

namespace node_name
{
	Controller::Controller(ros::NodeHandle& nodehandle):nodehandle_(nodehandle)
	{
		if(!readParameters())
		{
			ROS_ERROR("参数服务器的参数未读取成功");
			ros::requestShutdown();
		}
		subscriber_ = nodehandle_.subscribe(topic_,queue_size_,&Controller::callBack,this);
	}
	Controller::~Controller(){}
	bool Controller::readParameters()
	{
		bool flag1 = nodehandle_.getParam("topic_name",topic_);
		bool flag2 = nodehandle_.getParam("queue_size",queue_size_);
		if(flag1==0 || flag2==0)
		{
			return false;
		}
		return true;
	}

	void Controller::callBack(const sensor_msgs::LaserScan& msg)
	{
		ROS_INFO("回调函数已执行");
	}
}

yaml文件

yaml文件是储存参数服务器的配置文件,在roslaunch中可以将yaml中的数据导入服务器

topic_name: /scan
queue_size: 30

launch文件

<launch>
	<node name="subscribe" pkg="pkg" type="node_name" >
		<rosparam command="load" file="$(find pkg)/config/config.yaml" />
	</node>
</launch>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lilili~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值