1. 概念辨析
构造函数
作用:初始化,在创建对象时会自动调用,有点像Python中的 __init__
方法
特点:命名为class命名
,在public中声明。
析构函数
作用:完成释放前的一些清理工作。
特点:命名为~+class命名
,在public中声明。
调用顺序
栈的顺序,先构造的后析构。
2. 编写示例
ROScpp中在include文件夹下的.h头文件中声明class类别。
以一个无人机串口通信代码为例:
class turn_on_robot
{
public:
turn_on_robot(); //构造函数
~turn_on_robot(); //析构函数
void Control();//循环控制代码
serial::Serial Stm32_Serial; //声明串口对象
private:
...
};
3. 在ROScpp中的应用
以无人机串口通信代码为例
在构造函数中,通常要进行Node节点初始化、参数设定、话题设定、打开串口等。
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();//串口开启
}
}
在析构函数中,通常要进行数据处理、关闭串口等操作文章来源:https://www.toymoban.com/news/detail-810190.html
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
}
第一部分内容参考构造函数与析构函数文章来源地址https://www.toymoban.com/news/detail-810190.html
到了这里,关于Roscpp中构造函数与析构函数及在无人机串口通信应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!