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

相关推荐
森焱森5 小时前
水下航行器外形分类详解
c语言·单片机·算法·架构·无人机
kyle~11 小时前
计算机视觉---RealSense深度相机技术
人工智能·数码相机·计算机视觉·机器人·嵌入式·ros·传感器
龙猫略略略15 小时前
ros+px4仿真中的二维激光雷达消息
ros·px4·激光雷达
Eric.Lee20211 天前
ROS2的topic桥接ROS1
ros·ros2到ros1桥接·ros的topic
Mr.Winter`2 天前
障碍感知 | 基于3D激光雷达的三维膨胀栅格地图构建(附ROS C++仿真)
人工智能·机器人·自动驾驶·ros·具身智能·环境感知
云卓SKYDROID2 天前
无人机3控接力模式技术分析
无人机·通道·遥控器·高科技·云卓科技
云卓SKYDROID2 天前
无人机载重模块技术要点分析
人工智能·无人机·科普·高科技·云卓科技
森焱森2 天前
无人机三轴稳定化控制(1)____飞机的稳定控制逻辑
c语言·单片机·算法·无人机
通信与导航2 天前
无人机Ku相控阵卫星通信系统技术说明
无人机·信息与通信·射频工程·基带工程
阿木实验室2 天前
Science Robotics发表 | 20m/s自主飞行+避开2.5mm电线的微型无人机!
无人机·机器人前沿