无人机 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功能测试