本节是上一篇《动手学ROS(8):坐标系变换基础》的代码示例。 两个坐标系间的变换 #include <Eigen/Core> #include <Eigen/Geometry> #include <iostream> int main(int argc, char const *argv[]) { Eigen::Quaterniond q(0
之前的文章仅仅是让我们可以run起来ros程序,没有涉及到任何实际的应用场景,从今天开始我们会渐渐接触。 本节的内容不多同时也比较直观,但曾经也觉得有些困扰,在经历多次计算错误后,才决定彻底把坐标变换搞明白。 阅读本节需要一些前置知识:欧氏变换、旋转向量、四元数,这些都是基本的数学概念,希望读者自行学习,这里不再赘述。 两个坐标系间的变换 在开始具体地讲解之前,需要搞清楚两个特别容易混淆的概念:
之前的全部示例代码,我们都是用默认的单线程来处理任务,但顺序执行的方式在很多时候是不能保证时效性的,因此我们有必要来看看ros里面怎么使用多线程来处理回调任务。 目录 单线程的问题:订阅多个Topic,一个Spinner thread 多线程:订阅多个Topic,多个Spinner threads 订阅一个Topic,多个Spinner threads 订阅多个Topic,每个Subscrib
命名空间(namespace)是编程语言中常用的一个名词,读者应该都不会陌生,它的主要作用就是避免命名冲突,也就是说,同一个Class可以存在不同的命名空间中。在ros中,命名空间的概念是相似的,同样也是为了区分名称,这个名称包括: 节点名称 Topic名称 Parameter名称 等等。ros系统的根命名空间是"/"。例如我们查看topic列表: $ rostopic list /A/m
前几篇文章在启动ros node的时候使用的是rosrun命令,但每次启动之前都需要单独启动roscore,显得有些繁琐。其实ros还提供了一种运行ros node的方式:roslaunch。 roslaunch需要一个.launch的xml文件,启动时会检查系统是否已经启动了roscore,如果没有,会自动启动。 roslaunch file最根本的作用是维护参数,同时还可以管理多节点。 如何
之前两节已经介绍了如何创建publisher和subscriber,本节我们再补充一点关于topic的知识。 想要获取Topic中的msg,据我了解有两种方式: 一种是我们已经知道的,通过订阅该Topic, 注册回调函数,从中读取信息; 另一种自然是不需要订阅,直接从Topic取。 这是一种有用的方式,毕竟有些时候,我们只是临时需要某个Topic中的数据。 接下来就直接看示例代码: 1 订阅
工程中由于自定义的msg或srv比较多,通常会单独把自定义的内容放入一个pkg。本节我们新建一个叫public_pkg的pkg。 $ catkin_create_pkg public_pkg std_msgs roscpp 1 自定义msg文件 新建目录msg, 并新增我们自定义的CustomMsg.msg string name uint8 age 修改CMakeLists.txt
ros中的通信方式有三种: Topic 类似于mq(消息队列),异步收发;分为publisher和subscriber; Service 类似http请求,同步; Action 基于topic,实现了一种类似于service的请求/响应通讯机制,区别在于action带有反馈机制,用来不断向客户端反馈任务的进度,并且还支持在任务中途中止运行。常用于机器人的操控。 本教程重点介绍Topi
ROS (Robot Operating System, 机器人操作系统) 提供一系列程序库和工具以帮助软件开发者创建机器人应用软件。它提供了硬件抽象、设备驱动、库函数、可视化、消息传递和软件包管理等诸多功能。 1 安装 ros 安装步骤请参考 安装教程 该页面是ROS Melodic版本。本系列教程提供的代码均为在Ubuntu18.04上实测通过。 2 创建ros node 2.1 创建cat
积分
粉丝
勋章
TA还没有专栏噢
第三方账号登入
看不清?点击更换
第三方账号登入
QQ 微博 微信