ros的入门知识

news/2024/11/15 8:25:17/

ros的入门教程链接:

  1. linux ros安装
  2. 学前小案例-键盘控制小海龟的移动
  3. 创建工作空间与功能包
  4. 发布者publisher
  5. 订阅者subscriber

ros的基础知识点

不同的linux系统安装的ros版本是不一样的,linux18.04安装melodic,linux20.04安装noetic。

roscore:所有节点运行的管理器

rosrun运行某个功能包某个节点的指令,rosrun后面添加某个功能包的名字和对应编译后的可执行文件的名称。其中可执行文件和节点名字要一致

rqt_graph:显示当前系统运行情况的动态图形,包括当前运行存在的节点、节点之间的消息是怎么样传递的

rostopic echo [topic_name]:指令查看一个话题上发布的消息。其中,topic_name 表示所要查看的话题名字,例如:/lane_data、/object_data

rospack list:查询当前安装完成的所有包文件.当刚编译好的功能包,不能rosrun自动补全功能包名字,则可以用rospack list来更新一下

在ros中,功能包(packages)、节点(nodes)和话题(topics)是三个非常重要的概念,它们之间的关系如下:

  • 功能包(packages)
    功能包是ros组织代码的基本单元,它将一组相关的文件(如节点、配置文件、编译脚本等)放在一起。使用功能包的好处是可以将不同的ros节点和其他相关文件组合在一起,以便更方便地管理和使用。
  • 节点(nodes)
    节点是ros运行时的基本单元,每个节点都是一个可执行文件,用于执行特定的任务。例如,节点可以读取传感器数据,控制机器人运动,或者提供某些服务。
  • 话题(topics)
    话题是实现节点之间的通信,节点可以发布(publish)消息到话题,也可以订阅(subscribe)来自话题的消息。通过话题,节点可以相互交流和协调,实现复杂的应用程序。

话题消息的定义与使用:

  • 话题消息定义的作用:确定节点之间的传递消息的类型,例如传递yolo的消息,包括目标的类型、中心点、高宽、置信度等
  • 在某个功能包中,创建一个msg文件夹。在该文件夹中,创建保存自定义的数据类型的msg文件

在对于一个非ros的cmakelist.txt中,,除了加上ros中一些必须的头文件和库,在生成的可执行文件的TARGET_LINK_LIBRARIES中添加${catkin_LIBRARIES}

发布者的实现步骤

  1. 初始化ROS节点,ros::init(argc, argv, “节点名字”); ros::NodeHandle node;
    注释:node是用于访问ROS系统的句柄
  2. 创建一个ROS发布者对象:ros::Publisher chatter_pub = node.advertise<std_msgs::String>(“chatter”, 1000);
    注释:"chatter"是话题名称,1000是用于缓存未发送的消息的数量上限。
  3. 设定发布频率:ros::Rate loop_rate(10);
    注释:10表示发布者每秒钟发布的消息数量。
  4. 发布消息:chatter_pub.publish(msg); loop_rate.sleep();
    注释:loop_rate.sleep()方法用于根据我们设定的发布频率使程序暂停相应的时间。

订阅者的实现步骤

  1. 初始化ROS节点,ros::init(argc, argv, “节点名字”); ros::NodeHandle node;
    注释:node是用于访问ROS系统的句柄
  2. 定义一个订阅者对象,指定要订阅的消息类型及其话题名称: ros::Subscriber sub = n.subscribe<std_msgs::String>(“topic_name”, 1000, callback_function);
    注释:<std_msgs::String>表示要订阅的消息类型;"topic_name"是订阅主题的名称;1000是消息队列的长度;callback_function是回调函数,每当订阅到新消息时,都会自动调用这个回调函数来处理消息。
  3. 编写一个回调函数callback_function,用于处理接收到的消息。
    void callback_function(const std_msgs::String::ConstPtr& msg){ROS_INFO("I heard: [%s]", msg->data.c_str());}
注释:msg是收到的消息,可以使用msg->data来获取消息内容。
  1. 使用ros::spin()函数来让ROS节点保持运行状态,同时处理收到的新消息: ros::spin();

ROS订阅者:当ROS节点启动后,订阅者会开始接收来自话题topic_name的std_msgs::String类型的消息,并通过回调函数callback_function来处理它们。每当新消息到达时,都会自动调用回调函数进行处理,从而实现ROS订阅者的功能。

catkin_init_workspace:创建工作空间
catkin_make:编译工作空间
catkin_make clean:清理工作空间
catkin_create_pkg:创建功能包

当运行ros的节点时,如果发现功能包和节点不能自动补全:

  • 情况一:没有设置环境变量。需要在终端中输入source devel/setup.bash(~/.bashrc的修改,才需要运行source ~/.bashrc)
  • 情况二:设置后,可能需要自己手动补全一次才行(可能电脑有点反应不过来,需要自己手动教他一遍);使用 rospack list 命令好像也能更新功能包
  • 情况三:检查roscore是否正在运行: 用 roscore命令启用ros核心, 然后再打开终端窗口运行命令, 如果roscore没有运行则不会显示任何内容

http://www.ppmy.cn/news/72555.html

相关文章

Linux 内存管理 pt.3

哈喽大家好&#xff0c;我是咸鱼 在《Linux 内存管理 pt.2》中我们学习了多级页表和大页&#xff0c;我们知道了由于历史遗留的问题&#xff0c;Linux 的页通常为 4KB 这样就会导致一个页表里面会有特别多页&#xff0c;为了解决这个问题&#xff0c;Linux 提供了两种解决方案…

Android 如何获取有效的DeviceId

目录 前言官方唯一标识符建议使用广告 ID使用实例 ID 和 GUID不要使用 MAC 地址标识符特性常见用例和适用的标识符 解决方案DeviceIdANDROID_IDMac地址UUID补充 总结 前言 从 Android 10 开始&#xff0c;应用必须具有 READ_PRIVILEGED_PHONE_STATE 特许权限才能访问设备的不可…

图像去雾的简单介绍

文章目录 图像去雾的简单介绍1. 图像去雾的定义2. 图像去雾的原理3. 图像去雾的方法3.1 基于暗通道先验的方法3.2 基于物理模型的方法3.3 基于深度学习的方法 4. 图像去雾的应用5. 总结 图像去雾的简单介绍 图像去雾是一项重要的图像处理技术&#xff0c;可以提高图像的可见性…

TikTok选品,什么产品在TikTok最受欢迎?

TikTok是当下的海外社交媒体推广新风口已经有目共睹&#xff0c;与此同时跨境商家们或许都面临着同样的问题&#xff0c;就是TikTok要怎么选品&#xff0c;什么产品才会比较受欢迎。俗话说&#xff1a;七分靠选品&#xff0c;三分靠运营。选品选对了&#xff0c;运营也就事半功…

STM32 使用SYN6288语音模块

文章目录 前言一、SYN6288介绍二、SYN6288原理讲解三.数据的异或校验四.代码编写1.串口的初始化2.SYN6288代码编写3.main函数逻辑 总结 前言 本篇文章带大家学习一下SYN6288语音模块&#xff0c;这个模块可以用于车载设备&#xff0c;语音电子书等众多产品当中&#xff0c;而且…

看完这篇文章你就彻底懂啦{保姆级讲解}-----(I.MX6U驱动UART串口通信) 2023.5.20

目录 前言整体文件结构源码分析&#xff08;保姆级讲解&#xff09;串口驱动初始化部分UART1数据收发函数部分 编译结果验证结束语 前言 串口是我们在开发过程中最常用到的外设&#xff0c;所以我们必须掌握。 整体文件结构 源码分析&#xff08;保姆级讲解&#xff09; 串口…

java设计模式之抽象工厂模式

什么是抽象工厂设计模式&#xff1f; 抽象工厂模式是一种创建型设计模式&#xff0c;它提供了一种创建一系列相关或依赖对象的方法&#xff0c;而无需指定它们具体的类。抽象工厂模式是工厂方法模式的扩展&#xff0c;它使用一组相关的工厂来创建对象&#xff0c;而工厂方法模…

【JVM】6. 堆

文章目录 6.1. 堆&#xff08;Heap&#xff09;的核心概述6.1.1. 堆内存细分6.1.2. 堆空间内部结构&#xff08;JDK7&#xff09;6.1.3. 堆空间内部结构&#xff08;JDK8&#xff09; 6.2. 设置堆内存大小与OOM6.2.1. 堆空间大小的设置6.2.2. OutOfMemory举例 6.3. 年轻代与老年…