【Mavros解析 】01 ROS消息以及常用指令

2023-05-16

【Mavros解析 】01ROS消息以及常用指令

    • 示例代码一
    • 示例一代码解析
      • ROS初始化
      • 消息订阅:
      • 模板函数
      • 定时器
      • 回调循环
      • 睡眠函数
    • 示例代码二
    • 示例二解析
      • 公布消息
        • 模板函数

  • 标题 : MAVROS教程—offboard模式下自主飞行
  • 起源: 根据阿木实验室讲解课程整理的学习笔记,推荐大家学习无人机的去学习这个课程,俗话说的好:问渠那得清如许,唯有源头活水来 -
    在这里插入图片描述
  • MAVROS教程—offboard模式下自主飞行:https://bbs.amovlab.com/plugin.php?id=zhanmishu_video:video&mod=video&cid=11

示例代码一

#include <ros/ros.h>
#include <mavros_msgs/State.h>
mavros_msgs::State current_state;
void state_cb(const mavros_msgs::State::ConstPtr& msg){
 current_state = *msg;
 printf("message get callback!\n");
}
int main(int argc, char **argv)
{
 ros::init(argc, argv, "offb_node");
 ros::NodeHandle nh;
 ros::Subscriber state_sub = nh.subscribe<mavros_msgs::State>("mavros/state", 10, 
state_cb);
 ros::Rate rate(20.0);
 while(ros::ok())
 {
 ros::spinOnce();
 rate.sleep();
 }
 return 0;

示例一代码解析

ROS初始化

ros::init(argc, argv, "offb_node");
ros::NodeHandle nh;

这两句话是 ros 的初始化函数,每一个 ros 节点都必须执行。

消息订阅:

ros::Subscriber state_sub = nh.subscribe<mavros_msgs::State>("mavros/state", 10, state_cb);

模板函数

 ros::NodeHandle::subscribe 

定时器

申请了一个 20hz 的定时器

ros::Rate rate(20.0);

回调循环

ros::ok()返回真的时候一直循环,当 ros 出现一下问题(如进程被结束 ctrl+c)
的时候会返回一个 false

 while(ros::ok())
 {
 ros::spinOnce();
 rate.sleep();
 }

ros::spinOnce();这一句触发一个消息回调,也就是说,实际上我们的消息回调 state_cb 函数是这个函数执行时被调用的,如果不在循环中加上这一句,那么 state_cb 永远不会被调用,直到队列满结束进程。

睡眠函数

rate.sleep();

这一句是一个睡眠函数,前面我们已经申请了

ros::Rate rate(20.0);

那么在执行sleep 的时候,就会睡眠一个绝对准确的时间来保证这个循环会以 20hz 的频率运行。实际上 rate.sleep();会记录你上次调用此函数的时间
在下一次执行 rate.sleep();的时候他会对比当前系统时间,查看距离上次调用已经经过了多长时间,再用 1 秒除以你设置的频率得到周期时间,再用周期时间减去已经经过的时间,就得到了需要睡眠的时间。然而这一切都是自动的,我们不需要关心。

示例代码二

#include <ros/ros.h>
#include <geometry_msgs/PoseStamped.h>
int main(int argc, char **argv)
{
 //初始化
 ros::init(argc, argv, "offb_node");
 ros::NodeHandle nh;
 wwww.amovauto.com
3
 //公告消息
 ros::Publisher local_pos_pub = nh.advertise<geometry_msgs::PoseStamped>
 ("mavros/setpoint_position/local", 10);
 //设置循环频率
 ros::Rate rate(20.0);
 //实例化要发布的消息
 geometry_msgs::PoseStamped pose;
 pose.pose.position.x = 0;
 pose.pose.position.y = 0;
 pose.pose.position.z = 2;
 while(ros::ok()){
 local_pos_pub.publish(pose);//发布消息
 ros::spinOnce();
 rate.sleep();
 }
 return 0;
}

示例二解析

公布消息

ros::Publisher local_pos_pub = 
nh.advertise<geometry_msgs::PoseStamped>("mavros/setpoint_position/local", 10);

模板函数

advertise 也是一个模板函数,模板参数为要公告的消息类型,有 2 个形参:

  • 参数 1:消息名称,类型为 char *
  • 参数 2:队列长度,类型为 int,一般设置 1000
    公告完成以后我们会得到一个 ros::Publisher 对象(如果成功),以后我们就可以时候这个对象来发布消息了。发布消息:
local_pos_pub.publish(pose);
  • local_pos_pub 是我们得到的 ros::Publisher,publish 是 ros::Publisher 对象的发布函数,参数为我们的消息实体,参数类型为 advertise函数的模板参数
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Mavros解析 】01 ROS消息以及常用指令 的相关文章

  • ROS multi-master——multimaster_fkie配置

    多主站ROS配置和mutimaster fkie ROS版本 kinetic 操作系统 Ubuntu 16 04 multimaster fkie github 1网络配置 1 1路由器 设置无线路由器并连接两台计算机 机器人 为这两台计算
  • ROS之QtCreator开发环境搭建

    文章目录 系统环境 官方教程 安装 卸载 使用 导入工作空间 构建与运行 编写测试程序 系统环境 操作系统 Ubuntu20 04 ROS版本 Noetic 官方教程 按照官方教程或者下面笔记中的内容均能进行环境搭建 笔记中另外做了部分补充
  • ROS系统基本功能的使用详解(基本指令/节点/服务/启动文件/动态参数)

    ROS系统基本功能的使用详解 一 创建工作空间 二 创建与编译ROS功能包 三 ROS的基本命令 3 1 节点 3 2 主题 3 3 服务 3 4 参数服务器 四 节点的创建与运行 4 1 创建源文件 4 2 修改CMakeLists tx
  • ros+arduino学习(六):重构ros_lib库文件

    前言 ros lib是arduino程序和ros连接的库文件 通过使用这些库文件和相关函数 可以在arduino上通过编程使得arduino硬件开ros节点程序 这样arduino硬件就可以与上位机通过话题进行通讯 从而把arduino从传
  • ROS诸多调试工具总结1

    ROS有许多调试工具来为ROS调试你的工具 1 rosnode 参数 用法 作用 list rosnode list 查看当前运行了哪些节点 info rosnode info node name 查看该节点发布 接受哪些话题以及服务 ki
  • Hypervisor介绍及在智能驾驶的应用

    转自Hypervisor 智能座舱和智能驾驶融合的关键技术 腾讯新闻
  • 激光雷达LMS111在ROS上的使用

    LMS111 10100 在ROS上的测试与使用 准备工作 设备 硬件 LMS111 101000激光雷达 软件 ubuntu16 04 ROS 开始 设备连接 将激光雷达与处理器 电脑 工控机等 通过以太网连接好 激光雷达默认的IP地址为
  • Ubuntu18.04配置Seetaface6

    目录 一 下载安装Qt软件 1 安装包下载 2 安装Qt 3 配置 二 下载源码 三 编译工具 四 编译 1 编译OpenRoleZoo 2 编译SeetaAuthorize 3 编译TenniS 五 运行 1 修改lib路径 2 buil
  • Raspberry Pi 上 ROS 服务器/客户端通过GPIO 驱动硬件

    ROS 服务 现在 想象一下你在你的电脑后面 你想从这个服务中获取天气 你 在你身边 被认为是客户端 在线天气服务是服务器 您将能够通过带有 URL 的 HTTP 请求访问服务器 将 HTTP URL 视为 ROS 服务 首先 您的计算机将
  • Ubuntu安装ROS

    原文链接 https blog csdn net qq 44830040 article details 106049992 这也是我在ubuntu里面安装ROS的第N次 以前每次安装过程都忘记总结了 导致每次安装ROS都浪费了很多的时间用
  • 树莓派配置wifi做热点方法

    http wiki jikexueyuan com project raspberry pi wifi html
  • 【ROS】usb_cam相机标定

    1 唠叨两句 当我们要用相机做测量用途时 就需要做相机标定了 不然得到的计算结果会有很大误差 标定的内容包括三部分 内参 外参还有畸变参数 所以标定的过程就是要求得上面这些参数 以前弄这个事估计挺麻烦 需要做实验和计算才能得到 现在通过ro
  • ubuntu18.04命令安装ros2

    ROS2官方文档 本教程为apt get命令安装方式 官网教程有点问题 借鉴一下大佬的安装方式 文章目录 1 安装ROS2 1 1 安装秘钥相关指令 1 2 授权秘钥 1 3 添加ROS2软件源 1 4 安装 2 设置环境 可选但是推荐 2
  • 如何将从 rospy.Subscriber 数据获得的数据输入到变量中?

    我写了一个示例订阅者 我想将从 rospy Subscriber 获得的数据提供给另一个变量 以便稍后在程序中使用它进行处理 目前 我可以看到订阅者正在运行 因为当我使用 rospy loginfo 函数时 我可以看到打印的订阅值 虽然我不
  • 进入 docker 容器,exec 丢失 PATH 环境变量

    这是我的 Dockerfile FROM ros kinetic ros core xenial CMD bash 如果我跑docker build t ros docker run it ros 然后从容器内echo PATH 我去拿 o
  • 错误状态:平台不允许不安全的 HTTP:http://0.0.0.0:9090

    我正在尝试从我的 flutter 应用程序连接到 ws local host 9090 使用 rosbridge 运行 的 Ros WebSocket 服务 但我在 Flutter 中收到以下错误 错误状态 平台不允许不安全的 HTTP h
  • catkin_make后找不到ROS包

    我根据 ROS 的 Wiki 页面创建了一个 ROS 工作区 我还使用创建了一个包catkin create pkg在我刚刚创建的工作区下 然后 按照 ROS Wiki 中的步骤使用以下命令构建包catkin make 构建包后 我插入命令
  • ROS 问题:libQt5Core.so.5:无法打开共享对象文件:没有这样的文件或目录

    当我跑步时 rosrun turtlesim turtlesim node 在 Ubuntu 上 我收到以下消息 opt ros noetic lib turtlesim turtlesim node 加载共享库时出错 libQt5Core
  • 无法在 Ubuntu 20.04 上安装 ROS Melodic

    我正在尝试使用这些命令在 Ubuntu 20 04 上安装 ROS Melodic sudo sh c echo deb http packages ros org ros ubuntu lsb release sc main gt etc
  • 使用 CMake 链接 .s 文件

    我有一个我想使用的 c 函数 但它是用Intel编译器而不是gnu C编译器 我在用着cmake构建程序 我实际上正在使用ROS因此rosmake但基础是cmake所以我认为这更多是一个 cmake 问题而不是ROS问题 假设使用构建的文件

随机推荐