ROS
文章平均质量分 84
肥肥胖胖是太阳
我的人生格言:不积跬步无以至千里。
展开
-
ROS:rosbash系列命令行工具的使用(详解)
与rosbash相关的环境变量ROS_PACKAGE_PATH先提及一个环境变量ROS_PACKAGE_PATH,这个变量是一个可选的,但非常常见的环境变量,它允许您从源代码添加更多的ROS包到您的环境中。ROS_PACKAGE_PATH可以由一个或多个由标准OS路径分隔符(':'在类Linux系统上)分隔的路径组成。这些有序的路径告诉ROS系统在哪里搜索更多的ROS包。如果有多个相同名称的包,ROS会首先选择出现在ROS PACKAGE PATH上的包。如下示例:从图中我们可以看到:我们自原创 2022-03-09 10:42:51 · 1749 阅读 · 0 评论 -
ROS:rosbag play系列指令(详解)
Rosbag play系列指令Rosbag play bagFile01.bag bagFile02.bag …播放多个录制文件:由于我们的bag录制文件并不是同一时间录制,因此bag录制文件会因录制顺序不同播放顺序也不同,同时两个录制文件播放的时间间隔等于两个录制文件录制的时间间隔。Rosbag play --bags=bagFile01.bag bagFile02.bag …和上面那个指令作用一样:Rosbag play -p prefix_name bagFile.原创 2022-03-08 22:44:56 · 26979 阅读 · 1 评论 -
ROS中rosparam命令行指令详解
Rosparam list系列指令Rosparam listRosparam list namespace消息的类型+所在功能包名称=唯一确定特定功能包下指定的消息类型,那么参数名称+参数所在的命名空间=指定命名空间下的特定参数。Rosparam get系列之令Rosparam get namespace获取指定命名空间下的参数信息:Rosparam get -p namespace以更好地格式打印参数信息,即汉字不在意ASCII表示,而是以汉字本身的形式表示原创 2022-03-07 11:12:34 · 2311 阅读 · 0 评论 -
Linux中time命令输出的Real time, User time and Sys time
Linux中time命令输出的Real time, User time and Sys time在运行的程序之前加 time 最后得出三个时间 real、 user、 sys, real是程序的实际运行时间,sys是内核态的时间,user是用户态的时间,单核情况,real远远大于user和sys之和。real,从程序开始到程序执行结束时所消耗的时间,包括CPU的用时和所有延迟程序执行的因素的总和。CPU用时被划分为user和sys两块。user表示程序本身,以及它所调用的库中的子例程使用的时间。..原创 2022-03-06 16:12:53 · 4971 阅读 · 0 评论 -
ROS:rosbag命令行指令详解(一)
目录获取当前工作目录下bag文件的信息在当前工作目录下创建bag文件对指定话题进行录制获取当前工作目录下bag文件的信息1. 以列表的方式显示bag文件的信息:指令格式:rosbag info BagFileName.bag结果如下所示:在这个信息列表中包含了“参与通信的消息类型types、话题名称topics以及两者的对应关系(topics:types)”。2. 以yaml格式显示bag文件的信息:指令格式:rosbag info -y BagFileName.原创 2022-03-05 11:27:46 · 7869 阅读 · 1 评论 -
linux命令行模式下输入Ctrl+s后界面锁定,假死
使用vim时,如果按了组合键ctrl+s,会发现按什么都没反应,处于假死的状态,其实这个是linux系统命令行模式下的锁屏快捷键,只是输入的命令没有在输出终端(显示器)显示出来而已。所以,不止vim,只要在命令行模式下,都会如此。要退出此种锁屏界面,需按ctrl+q,此时会发现先前在锁屏时输入的字符都显示出来了,并且可正常使用了。所以,当不注意或者不小心按下ctrl+s时,还真不能乱敲键盘,以免不小心输入破坏性命令,否则麻烦大了!...转载 2022-03-05 09:07:46 · 2749 阅读 · 0 评论 -
ROS中正则表达式的使用(rosbag record -e --regex)
字符匹配1. 匹配指定范围内的空格2. 匹配指定范围内包含任意字符的字符串[^ ]表示不包含空格在内的所有字符3. 匹配指定范围内排除指定字符的字符串筛选出的字符全部不含有“swertyu”中任何一个字母。4. 特殊字符匹配符号的使用上述指令用于匹配包含16进制中字符的字符串,16进制包含0-9和A-F,且不区分大小写。特殊字符匹配符号使用形式为“[[:xdigit:]]”,其中[:xdigit:]不可以单独使用,必须外面套上[]中括号才可以使用。我们也可以理原创 2022-03-04 10:46:40 · 998 阅读 · 0 评论 -
yaml文件中ISO-8601格式的日期解析
ISO-8601 是国际标准化组织提供的一个有关时间表示的规范。UTC格式1970-01-01T00:00:00Z 可能是我们最常看到的格式了,这个表示的是一个 UTC 时间,UTC(Coodinated Universal Time),协调世界时,又称世界统一时间、世界标准时间、国际协调时间。UTC相当于本初子午线(即经度0度)上的平均太阳时,过去曾用格林威治平均时(GMT)来表示.北京时间比UTC时间早8小时,以1999年1月1日0000UTC为例,UTC时间是零点,北京时间为1999年1月1日原创 2022-03-03 15:46:22 · 1294 阅读 · 1 评论 -
ROS中yaml文件编写格式
键值对键值对书写格式键值对中,key必须是字符串,但是value可以为bool/string/int/float类型的:#键值对KeyValueBool:true#boolKeyValueStr:"abc"#string在写键值对时,key与:没有空格,但是value与:之间有空格。在yaml文件内使用launch中替换子标签:#键值对KeyValueBool:true#boolKeyValueStr:"$(optenvROS_...原创 2022-03-03 11:54:38 · 3560 阅读 · 0 评论 -
ROS中tf2实操之坐标追踪详解(示例+代码)
目录项目中文件结构如下所示:1. 启动turtle1节点和turtle1的键盘操作节点、订阅turtle1的位姿信息、发布turtle1的坐标信息(getTurtle1Pose.cpp):2. 启动turtle2节点、订阅turtle2的位姿信息、发布turtle2的坐标信息(getTurtle2Pose.cpp):3. 订阅/tf_static话题并获取坐标系相对关系、发布turtle2的运动信息(frameTransform.cpp):4. launch文件的编写:5. 运行结果原创 2022-02-20 11:22:54 · 2005 阅读 · 2 评论 -
使用tf内置节点进行坐标变换时,为何要同时实现坐标信息的发布方与坐标信息的订阅方?
答案是不行的,那为什么提出要用一个文件实现坐标变换呢?因为我们实现坐标变换时,只需要获知坐标系相对位置关系和坐标点在源坐标系中的坐标即可实现坐标变换。因此我们想在一个CPP文件中声明坐标系的关系和坐标点在源坐标系中的坐标,然后再使用tfs_ros::buffer中的transform函数一气呵成计算出坐标点基于目标坐标系的坐标。理论上来说还挺行得通,但是真的如此吗?错误代码示例:#include"ros/ros.h"#include"geometry_msgs/TransformSta...原创 2022-02-19 10:40:42 · 1074 阅读 · 3 评论 -
用小乌龟案例演示“话题通信、动作通信、服务通信以及参数服务器”
乌龟节点操作原理解析乌龟节点的话题乌龟节点的操作方式和动态参数调节的方式很像,乌龟节点所在turtlesim功能包的节点将大部分话题通信的订阅端和服务通信的服务端全部封装起来使用命令行的格式对它们进行可视化显示。Turtlesim_node是turtlesim功能包下自带的一个节点,需要在命令行启动,只有该节点启动那么turtlesim功能包下所有节点的话题通信的订阅端和服务通信的服务端才可以启动。turtlesim功能包节点的服务通信的topic: Service的topic原创 2022-02-18 18:29:33 · 1168 阅读 · 0 评论 -
ROS中tf2命令行调试工具详解(解析+代码示例+执行逻辑)
Tf2命令行工具的意义在于“我们可以用这些命令行工具了解整个坐标系树状结构以及任意两个坐标系之间转换的信息”。我们会发现几乎全部的tf2命令行工具并不和rostopic一样有自己专属的执行指令,tf2命令行工具的调用更像是我们运行可执行文件的格式。这就对了,tf2命令行工具其实就是官方封装的CPP源文件,我们使用命令行对CPP源文件进行传参调用使其完成相应的功能,tf2功能包所有功能的实现大都基于话题通信的方式实现的。监控“坐标信息的发出者”的运行状态命令格式:rosrun tf tf_monito原创 2022-02-16 12:04:58 · 3764 阅读 · 0 评论 -
ROS中的多坐标变换详解(示例+代码)
多坐标变换与静态/动态坐标变换的不同之处tf坐标转换的实质你也许会被静态/动态/多坐标转换弄晕了头,但是你只要认清坐标转换的实质就会恍然大悟。无论是哪种坐标转换,其实质就是利用tf2_ros::Buffer类对象中缓存的坐标间的相互关系将坐标点基于X坐标系的坐标转化至基于Y坐标系的坐标。多坐标变换我们以坐标系A、坐标系B、坐标系C、坐标系D三个坐标系相互转化为例进行说明:准确的来说lookupTransfrom函数的作用是取得树状图中两个从未有联系的坐标系得相对关系(补齐树状图,使树原创 2022-02-14 12:39:47 · 3332 阅读 · 0 评论 -
ROS中动态坐标变换(动态参数调节+动态坐标变换)
静态坐标变换与动态坐标变换的区别动态坐标转换区别于静态坐标转换的唯一一点就是:坐标系的相对位置是可以发生变化的。那如何才可以发生变化呢?这就需要借助外力来改变坐标系间的相对位置:静态坐标变换详见:(1条消息) ROS中的静态坐标转换(解析+示例)_超级霸霸强的博客-CSDN博客https://blog.csdn.net/weixin_45590473/article/details/122908060项目文件解析通过动态参数调节改变参数服务器中的参数值,然后将参数服务器中的参数读出来原创 2022-02-13 19:05:15 · 3974 阅读 · 1 评论 -
ROS中的静态坐标转换(解析+示例)
什么是TF2?tf2是一个用来描述物体空间位置的工具。我们知道,用一个三维向量和一个四元数就可以描述一个物体相对于一个参考系的位置与姿态,tf2的工作属于“小而美”,它只专注于在ROS2中提供这样一个功能,就是描述一组物体之间的相对位置关系。为何要使用TF2?TF2可以用于描述机器人各关节的相对位置,大大方便了运动学求解。不仅如此,在多机器人的场景中,tf2还可以用于描述机器人之间的相对位置,从而执行跟随、避障等操作。此外,tf2也可以用于描述目标物体与机器人的相对位置。总而言之,我们只需提供坐原创 2022-02-13 13:42:17 · 5929 阅读 · 4 评论 -
彻底搞懂“旋转矩阵/欧拉角/四元数”,让你体会三维旋转之美
向量的旋转一共有三种表示方法:旋转矩阵、欧拉角和四元数,接下来我们介绍一下每种旋转方法的原理以及相互转换方式。旋转矩阵坐标变换的作用在一个机器人系统中,每个测量元件测量同一物体得出的信息是不一样的,原因就在于“每个测量元件所测量的数据是基于不同坐标系所测量的”,例如:在这辆车中有激光雷达M和激光雷达W,这两个雷达测量的数据截然不同,但是这辆汽车相对于测量物体的位置是唯一的,这就说明“由不同位置雷达测量的数据代表的物理含义(即都表示汽车与被测物体的相对位置)是相同的”。那既然被测物体在不.原创 2022-02-11 17:17:30 · 64124 阅读 · 23 评论 -
Eigen在VS2017下的安装与使用
从matlab,python脚本语言转接到C++的项目中来说有一项是我最头痛的就是矩阵运算,说起矩阵运算在C++里边真的是难,远不像脚本语言用起来那么随意,幸好有Eigen这个神器。当VS有了nuget这个工具包管理器就感觉安装所有东西都变的简单多了。新建项目,工具栏下nuget包管理器>>管理方案的nuget程序包,启动nuget管理工具。在浏览栏下的搜索eigen就可以安装并使用了,这种方法适用于很多包,但有些会出些小问题,一般情况下是静态库链接的问题,部分包要手动导入静态库,大家遇转载 2022-02-10 12:00:19 · 1195 阅读 · 0 评论 -
坐标变换最通俗易懂的解释(推到+图解)
目录坐标变换详解坐标变换的作用实现坐标变换所需的数据位姿坐标变换中旋转的实质坐标变换中平移的实质如何计算坐标系B各坐标轴在坐标系A上的投影?(多坐标变换)如何实现坐标变换?坐标变换详解坐标变换的作用在一个机器人系统中,每个测量元件测量同一物体得出的信息是不一样的,原因就在于“每个测量元件所测量的数据是基于不同坐标系所测量的”,例如:在这辆车中有激光雷达M和激光雷达W,这两个雷达测量的数据截然不同,但是这辆汽车相对于测量物体的位置是唯一的,这就说明“由.原创 2022-02-09 19:28:52 · 30709 阅读 · 11 评论 -
ROS中节点、话题、参数重命名以及全局、相对、私有命名空间(示例+代码)
ROS中的命名空间我们首先要了解一下路径的各个部分所代表的含义:① 以话题为例,三级路径:② 以节点为例,共有二级路径:③ 以参数为例,共有三级路径:ROS中的命名空间分为三种:全局、相对、私有。其实命名空间就是名称的前缀,前缀代表着所在路径,存放的位置可以相对于根目录、节点、节点句柄的命名空间这三者来进行划分:私有、全局、相对命名空间判断的依据: 私有命名空间 “/node_name”节点名称在最外侧 全局...原创 2022-01-27 15:51:31 · 6182 阅读 · 4 评论 -
ROS动态参数配置:dynparam命令行工具的使用(示例+代码)
dynparam命令行工具的使用命令行工具使用的格式:rosrun dynamic_reconfigure dynparam COMMAND,命令一共有6个,使用格式如下所示:1. 列出动态节点名称2. 参数的动态配置——set_from_parameters命令格式为:set_from_parameters 动态节点名称 _参数名:=参数值(切记参数名一定要加下划线!)3. 参数的动态配置——set其功能和set_from_parameters一样,只不过调用格式发生.原创 2022-01-26 12:15:07 · 973 阅读 · 0 评论 -
详解ROS中动态参数调整与话题通信配合使用(原理+代码+示例)
ROS中动态调整参数的原理我们在现实中有个需求:我们希望可以改变参数服务器中的参数用于调试机器人,而且我们不希望每改一遍参数之后必须重启一次相关节点才可以生效,这样耗时耗力太麻烦。我们期望的是:我们既可以改变参数服务器中的参数用于调试,也可以使我们刷新的参数服务器中的数据立刻起作用无需再次启动。在ROS中,当参数服务器中的参数发生了改变,通信双方是无法知晓的,因为我们从参数服务器的工作原理就可以发现(以话题通信架构为例):我们重点关注从参数服务器回传的数据会发现参数服务器通信方式的以下缺点:原创 2022-01-24 19:25:18 · 6780 阅读 · 2 评论 -
史上最全的launch的解析来啦,木有之一欧
ROS工作空间简介元功能包:功能包的组织者对于ROS中的文件结构,我们重点关注src部分,我们经过了解ROS的文件结构知道:src目录下可以包含多个功能包,假设我们需要使用机器人导航模块,但是这个模块中包含着地图、定位、路径规划...等不同的功能包,它们的逻辑关系如下:如果我要获取“导航功能”,我需要一个一个按照功能包之间的依赖关系启动功能包,这样有些太麻烦了。在Linux系统中为了更方便的组织工程项目(这里针对的是项目文件,即功能包),出现了“元功能包”的概念。这个是一个“虚包”,就.原创 2022-01-23 10:17:01 · 7856 阅读 · 0 评论 -
ROS中库的创建与配置(代码示例+解析):自定义类类型在ROS中的使用
前言C++代码风格编写C++代码时,我们常常将“类/结构体的声明、定义和使用“相互剥离,在ROS项目文件中我们也可以这样做。在ROS项目文件中声明、定义、使用自定义数据类型时,我们可以进行如下两种方式的操作:① 自定义数据类型的声明+自定义数据类型的定义及使用② 自定义数据类型的声明+自定义数据类型的定义+自定义数据类型的使用我们最关键要做的不是编写自定义数据类型的声明、定义、实例化文件,而是将CMakelist.txt文件配置好,只有将其配置好三者才可以相互链接构成一个统一的.原创 2022-01-21 11:34:08 · 1713 阅读 · 0 评论 -
CMakelist.txt文件中常用部分最通俗易懂的解析(示例+解析)
CMakelist.txt的作用是什么?要了解CMakelist.txt文件,首先我们先了解一下Makefile。Makefile 可以简单的认为是一个工程文件的编译规则,描述了整个工程的编译和链接等规则。其中包含了那些文件需要编译,那些文件不需要编译,那些文件需要先编译,那些文件需要后编译,那些文件需要重建等等。编译整个工程需要涉及到的,在 Makefile 中都可以进行描述。换句话说,Makefile 可以使得我们的项目工程的编译变得自动化,不需要每次都手动输入一堆源文件和参数。Cmake的所有原创 2022-01-20 19:04:55 · 6287 阅读 · 1 评论 -
话题/服务/动作通信相关函数解析(覆盖通信中常用函数)
节点句柄的作用节点句柄一共有四大作用:① 初始化节点;② 创建publisher/subscriber对象的roscpp接口;③ 创建server/client对象的roscpp接口;④ 操作参数服务器具体应用在如下对应小节中一一介绍。话题通信话题消息的发布① listener的信息注册函数(NodeHandle成员函数)ros::Subscribersub=topic_node.subscribe<topic::person>("ch...原创 2022-01-19 17:50:44 · 671 阅读 · 0 评论 -
ROS之Action动作通信详解(分析+源码)
话题通信:异步通信话题通信的好处在于:只要双方通过同一个topic建立联系,talker就可以向topic一直发送数据,listener也可以从topic中实时的获取数据。只要这个联系一直存在,那么数据的单向传输就不会中断。那现在我们试想一下这样的情况:我想要控制机械臂一直在空中旋转并且实时的获取机械臂的运动位姿,那作为单向传输的话题通信就有些复杂了:要用到两个topic才可以实现,这样一看确实有些复杂。服务通信:同步通信...原创 2022-01-16 16:59:09 · 15939 阅读 · 2 评论 -
话题通信下ROS项目的结构配置
话题通信下ROS项目的结构配置① 创建符合ROS标准的项目框架② 添加构建ROS标准项目文件的库当我们使用vscode打开ROS标准项目文件时,按下Ctrl+Shift+B可以进行编译,但是我们需要设置构建ROS标准项目文件所需的功能包:{//有关tasks.json格式的文档,请参见//https://go.microsoft.com/fwlink/?LinkId=733558"version":"2.0.0",...原创 2022-01-14 12:11:07 · 330 阅读 · 0 评论 -
ROS中rosservice系列命令详解
Rosservice call service_name arg1 arg2……我们如何可以实现像rostopic pub topic_name topic_type: “arg1_name:arg1……”那样在命令行发布消息,rosservice call可以帮我们做到:输入完topic_type后,后面紧跟着arg1 arg2……就行,不用像话题通信那样繁琐。输入之后,客户端反应如下:Rosservice find service_type如果说“rostopic f..原创 2021-11-18 17:36:52 · 9139 阅读 · 0 评论 -
ROS中关于rosmsg命令的详解
Rosmsg show message_type这个命令是用来查看我们自定义的.msg文件的数据结构的,也就是说我们使用这个命令可以查看话题通信中构成topic_type话题类型的基本数据类型:Rosmsg list这个指令用于列出系统中所有话题的topic_type自定义数据类型,但是它将所有的列出来了,包括我们自定义的和系统自己定义的话题类型:Rosmsg package package_name如果你认为rosmsg list列出的话题名太繁琐,没有针对性,这个..原创 2021-11-18 16:52:53 · 6737 阅读 · 0 评论 -
详细的Rostopic命令系列(包括消息发布等实例操作)
详细的rostopic命令行指令,包含有“如何使用rostopic pub发布带有header类类型对象的消息,如何发布带有map键值对类型的数据“等操作,还有响应的操作示例原创 2021-11-16 20:27:04 · 31277 阅读 · 4 评论 -
ROS中自定义带有header的消息文件
ROS中自定义带有header的消息文件为什么需要header?在发布端发布的数据或者在订阅端订阅数据时,数据通常是连续发布或者被订阅的,这些信息没有特定的标识,搞得我们发和收了很多消息,都不知道具体发布了多少个数据,收了多少个数据。而且在ROS中有许多坐标系,我们光凭借数据也无法得知这些XYZ坐标数据到底是哪个坐标时下的,并且在机器人运动时,我们想要加上一些“时间戳”来显示机器人随着时间运动的状态或者规律。总之,我们想要添加一些数据标识来得知“这条数据到底是我们发送/被订阅到的第几条数据,这条数据原创 2021-11-12 15:45:38 · 10187 阅读 · 2 评论 -
Rosnode命令系列
Rosnode命令系列Rosnode list这个命令主要是列举出现如今在本项目文件下,已经正在被运行的节点。示例如下:我已经运行了我编写的源文件,一个是lisener_person节点所在的sub_person.cpp文件以及talker_person节点所在的pub_person.cpp源文件。当我运行完这两个源文件之后,我在转到RosProject这个项目文件下调用rosnode list就可以列举出现在正在运行的节点了。Rosnode kill node_name这个命.原创 2021-11-12 12:11:51 · 1450 阅读 · 0 评论 -
参数服务器的理论模型+实际操作实例
参数服务器的理论模型参数服务器实现是最为简单的,该模型如下图所示,该模型中涉及到三个角色:ROS Master (参数管理者:参数服务器) Talker (参数设置者) Listener (参数调用者)ROS Master 作为一个公共容器保存参数,Talker 可以向容器中设置参数,Listener 可以获取参数。整个流程由以下步骤实现:① Talker 设置参数:Talker 通过 RPC 向参数服务器发送参数(包括参数名与参数值),ROS Master 将参数保存到参数.原创 2021-11-09 08:02:31 · 913 阅读 · 0 评论 -
ROS话题通信,最详细最易懂(从文件构建到执行原理)
Package.xml和CMakelist.txt文件的功能编译规则的“制定者”——CMakelist.txt文件我们知道 Linux 平台编译 C++ 文件,需要编译器和链接器,其中编译器是将源代码编译成目标代码,链接器是将目标代码链接到可执行文件。若是编译单个文件,用 g++ 即可;若是编译一个 C++ 工程,则需要批处理编译工具,如 make,通过设定规则文件 makefile 调用 g++ 等编译工具进行批量编译。但 makefile 的编写十分复杂,便诞生了 CMake,通过编写简单的 C原创 2021-11-08 15:24:28 · 3511 阅读 · 0 评论 -
ROS服务通信,最详细最易懂(从文件构建到原理解析)
ROS中“逻辑处理需求”是什么?逻辑一词本身的含义就是“规则”的意思,逻辑处理需求就相当于一种基于规则的通信机制,即你呼我应的通信关系。这种通信规则不同于ROS的话题通信,服务通信的通信规则没有时间规律,因此可以在任意时刻创建服务通信并按照预先设定好的通信规则进行。服务通信的基本原理服务是基于 C/S 模式的双向数据传输模式(有应答的通信机制),话题是无应答的通信机制。服务通信和话题通信的对比由于服务通信较强的实时性也就代表了talker和listener之间的通信链路的存在是暂时的是有原创 2021-11-08 15:05:29 · 3860 阅读 · 3 评论