无人机 PX4 飞控 | ROS应用层开发:指令(字符串)订阅功能
- 指令(字符串)订阅功能
 - 代码
 - 测试
 
指令(字符串)订阅功能
为了通过键盘触发mavros 的不同功能,需要实现一个订阅字符串的功能
 该功能同样可用于其它项目
在终端输入
rostopic pub -1 /keyboard_cmd std_msgs/String "arm" 
 
含义:在/keyboard_cmd 上发布一条字符串消息,消息内容为"arm"。
程序在接收到该指令后,可进行相关的操作。
代码
代码在之前博客 基础代码框架上进行的添加
在类的定义中加入
    /* 订阅 topic 话题  */ros::Subscriber KeyCmdSub_;//键盘指令void KeyCmdSub_callback(const std_msgs::String::ConstPtr& msg);//键盘指令回调函数
 
构造函数中加入
    /* 订阅 topic 话题  */KeyCmdSub_ = nh_.subscribe("/keyboard_cmd", 10, &MavrosFuctionTest::KeyCmdSub_callback,this);
 
定义回调函数如下:
// 键盘指令回调函数
void MavrosFuctionTest::KeyCmdSub_callback(const std_msgs::String::ConstPtr& msg)
{if( msg->data == "arm") {std::cout<<"receive arm cmd "<<std::endl;}
}
 
测试
编译后进行测试
 运行节点
 节点照常出现
 
 新开终端输入
rostopic pub -1 /keyboard_cmd std_msgs/String "arm"
 
节点终端变为
 
 测试通过
 表明回调函数收到了arm的指令 可以进行下一步 mavros功能测试
