Roscpp中构造函数与析构函数及在无人机串口通信应用

1. 概念辨析

构造函数

作用:初始化,在创建对象时会自动调用,有点像Python中的 __init__ 方法

特点:命名为class命名,在public中声明。

析构函数

作用:完成释放前的一些清理工作。

特点:命名为~+class命名,在public中声明。

调用顺序

栈的顺序,先构造的后析构。

2. 编写示例

ROScpp中在include文件夹下的.h头文件中声明class类别。

以一个无人机串口通信代码为例:

cpp 复制代码
class turn_on_robot
{
	public:
		turn_on_robot(); //构造函数
		~turn_on_robot(); //析构函数
		void Control();//循环控制代码
		serial::Serial Stm32_Serial; //声明串口对象 
	private:
		...
};

3. 在ROScpp中的应用

以无人机串口通信代码为例

在构造函数中,通常要进行Node节点初始化、参数设定、话题设定、打开串口等。

cpp 复制代码
turn_on_robot::turn_on_robot()
{
  ros::NodeHandle private_nh("~");
	
	//参数设定Cmd_Vel_Callback
  private_nh.param<std::string>("usart_port_name", usart_port_name, "/dev/ttyTHS1"); //固定串口
  private_nh.param<int>("serial_baud_rate", serial_baud_rate, 115200); //和下位机底层波特率115200 不建议更高的波特率了
  
  //订阅1个话题
  Cmd_Vel_Sub = n.subscribe("/switch_cmd", 100, &turn_on_robot::Cmd_Vel_Callback, this);//接收阿克曼类型的数据
  
  //初始化串口
  try{
         Stm32_Serial.setPort(usart_port_name);//选择哪个口,如果选择的口没有接串口外设初始化会失败
         Stm32_Serial.setBaudrate(serial_baud_rate);//设置波特率
         serial::Timeout _time = serial::Timeout::simpleTimeout(2000);//超时等待
         Stm32_Serial.setTimeout(_time);
         Stm32_Serial.open();//串口开启
    }
}

在析构函数中,通常要进行数据处理、关闭串口等操作

cpp 复制代码
turn_on_robot::~turn_on_robot()
{
  Send_Data.tx[0]=...
  catch (serial::IOException& e)   
  {
    ROS_ERROR_STREAM("Unable to send data through serial port"); //如果try失败,打印错误信息
  }
  Stm32_Serial.close();//关闭串口  
  ROS_INFO_STREAM("Shutting down");//close 
}

第一部分内容参考构造函数与析构函数

相关推荐
嵌入式仿真实验教学平台1 小时前
「国产嵌入式仿真平台:高精度虚实融合如何终结Proteus时代?」——从教学实验到低空经济,揭秘新一代AI赋能的产业级教学工具
人工智能·学习·proteus·无人机·低空经济·嵌入式仿真·实验教学
吃个早饭2 小时前
2025年第十六届蓝桥杯大赛软件赛C/C++大学B组题解
c语言·c++·蓝桥杯
阿沁QWQ2 小时前
单例模式的两种设计
开发语言·c++·单例模式
六bring个六3 小时前
qtcreater配置opencv
c++·qt·opencv·计算机视觉·图形渲染·opengl
qwertyuiop_i3 小时前
pe文件二进制解析(用c/c++解析一个二进制pe文件)
c语言·c++·pe文件
Perishell3 小时前
无人机避障——如何利用MinumSnap进行对速度、加速度进行优化的轨迹生成(附C++&python代码)
无人机·规划控制·minmum-snap
yxc_inspire3 小时前
基于Qt的app开发第八天
开发语言·c++·qt
June`4 小时前
专题三:穷举vs暴搜vs深搜vs回溯vs剪枝(全排列)决策树与递归实现详解
c++·算法·深度优先·剪枝
我叫珂蛋儿吖5 小时前
[redis进阶六]详解redis作为缓存&&分布式锁
运维·c语言·数据库·c++·redis·分布式·缓存
yxc_inspire5 小时前
基于Qt的app开发第七天
开发语言·c++·qt·app