无人机 PX4 飞控 | ROS应用层开发:指令(字符串)订阅功能

无人机 PX4 飞控 | ROS应用层开发:指令(字符串)订阅功能

指令(字符串)订阅功能

为了通过键盘触发mavros 的不同功能,需要实现一个订阅字符串的功能

该功能同样可用于其它项目

在终端输入

c 复制代码
rostopic pub -1 /keyboard_cmd std_msgs/String "arm" 

含义:在/keyboard_cmd 上发布一条字符串消息,消息内容为"arm"。

程序在接收到该指令后,可进行相关的操作。

代码

代码在之前博客 基础代码框架上进行的添加

在类的定义中加入

c 复制代码
    /* 订阅 topic 话题  */
    ros::Subscriber KeyCmdSub_;//键盘指令
    void KeyCmdSub_callback(const std_msgs::String::ConstPtr& msg);//键盘指令回调函数

构造函数中加入

c 复制代码
    /* 订阅 topic 话题  */
    KeyCmdSub_ = nh_.subscribe("/keyboard_cmd", 10, &MavrosFuctionTest::KeyCmdSub_callback,this);

定义回调函数如下:

c 复制代码
// 键盘指令回调函数
void MavrosFuctionTest::KeyCmdSub_callback(const std_msgs::String::ConstPtr& msg)
{
    if( msg->data == "arm") 
    {
        std::cout<<"receive arm cmd "<<std::endl;
    }
}

测试

编译后进行测试

运行节点

节点照常出现

新开终端输入

c 复制代码
rostopic pub -1 /keyboard_cmd std_msgs/String "arm"

节点终端变为

测试通过

表明回调函数收到了arm的指令 可以进行下一步 mavros功能测试

相关推荐
云卓SKYDROID4 天前
无人机实时信号传输技术要点解析!
科技·无人机·高科技·云卓科技
AI能见度4 天前
硬核:如何用大疆 SRT 数据实现高精度 AR 视频投射?
ar·无人机·webgl
云卓SKYDROID4 天前
无人机精准降落技术要点难点
无人机·高科技·云卓科技·物流无人机
Deepoch4 天前
无人机升级不用改!Deepoc 开发板即插即享智能飞行
人工智能·无人机·开发板·具身模型·deepoc·智能无人机
yoyo君~4 天前
从内存管理到并发架构:C++ 核心内功修炼指南
开发语言·c++·学习·无人机
土拨鼠不是老鼠5 天前
纯软件仿真
无人机·地面站·mavlink·qgc
Mike_6665 天前
无人机的负载设备
无人机·行业应用·负载设备
云卓SKYDROID5 天前
无人机失效模式技术要点
无人机·高科技·云卓科技·失效模块
何伯特5 天前
ROS与Conda的兼容性问题深度解析与解决方案
conda·ros
EriccoShaanxi5 天前
MEMS组合导航——60秒失锁不丢方向,0.01°姿态稳如磐石
人工智能·机器人·无人机