ROS中的坐标与坐标系转换

2023-05-16

ROS中的TF
官网建议新工作直接使用tf2,因为它有一个更清洁的界面,和更好的使用体验。(自ROS Hydro以来,tf第一代已被“弃用”,转而支持tf2)

TF介绍
TF(TransForm),就是坐标转换,包括了位置和姿态两个方面的变换。注意区分坐标转换和坐标系转换。

坐标转换是一个坐标在不同坐标系下的表示,而坐标系转换不同坐标系的相对位姿关系。

ROS中机器人模型包含大量的部件,每一个部件统称之为link(比如手部、头部、某个关节、某个连杆),每一个link上面对应着一个frame(坐标系), 用frame表示该部件的坐标系,frame和link是绑定在一起的。

TF是一个通俗的名称,实际上它有很多含义:

可以被当做是一种标准规范,这套标准定义了坐标转换的数据格式和数据结构.tf本质是树状的数据结构,即"tf tree"。
tf也可以看成是一个话题/tf,话题中的消息保存的就是tf tree的数据结构格式。维护了整个机器人的甚至是地图的坐标转换关系。维持并更新机器人整个坐标系的话题是/tf,/tf话题表示的内容是整个机器人的tf树,而非仅仅是某两个坐标系的转换关系,这样的话,/tf话题是需要很多的节点来维护的,每一个节点维护两个frame之间的关系。
tf还可以看成是一个package,它当中包含了很多的工具.比如可视化,查看关节间的tf,debug tf等等.
tf含有一部分的API接口,用来节点程序中的编程。TF对发布器与订阅器进行了封装,使开发者通过TF的接口更加简单地建立对TF树中某些坐标系转换关系的维护与订阅。
tf是一个树状结构,维护坐标系之间的关系,靠话题通信机制来持续地发布不同link之间的坐标关系。作为树状结构,要保证父子坐标系都有某个节点在持续地发布他们之间的位姿关系,才能使树状结构保持完整。只有父子坐标系的位姿关系能被正确的发布,才能保证任意两个frame之间的连通。

如果出现某一环节的断裂,就会引发error系统报错.所以完整的tf tree不能有任何断层的地方,这样我们才能查清楚任意两个frame之间的关系。

每两个相邻frame之间靠节点发布它们之间的位姿关系,这种节点称为broadcaster。broadcaster就是一个发布器publisher,如果两个frame之间发生了相对运动,broadcaster就会发布相关消息。

TF的原理
TF树的结构
TF库的目的是实现系统中任一个点在所有坐标系之间的坐标变换。也就是说,只要给定一个坐标系下的一个点的坐标,就能获得这个点在其他任意坐标系的坐标。

为了达到上述目的,就需要提供当前ROS系统的中任意两个坐标系的位姿变换关系。

那么TF是用什么方式来描述与记录任意两个坐标系的位姿变换关系的呢?

这里存在一个问题。假设有n个坐标系,那么他们之间的组合关系有c(n,2)个。如果这样穷举个数会非常多,所以不会采用这个方法。

为了更合理、更高效地表示任意坐标系的变换关系。TF使用多层多叉树的形式来描述这个这个ROS系统的坐标系,树中的每一个节点都是一个坐标系。TF树的特点是每个节点只要一个父节点,即采用每个坐标系都有一个父坐标系,可以有多个子坐标系的原则。

TF坐标系表示规范
每个坐标系都有一个父坐标系,可以有多个子坐标系。TF树就是以父子坐标系的形式来组织的,最上面是父坐标系,往下是子坐标系。

在TF树中具有父子关系的坐标系是相邻的,用带箭头的线连接起来。在TF树中用箭头表示这种父子关系。

上图所表示的TF树中base_link坐标系是base_footprint的子坐标系,base_cover_link坐标系也是base_footprint的子坐标系。

描述规范:

source、target frame是在进行坐标变换时的概念,source是坐标变换的源坐标系,target是目标坐标系。这个时候,这个变换代表的是坐标变换。
parent、child frame是在描述坐标系变换时的概念,parent是原坐标系,child是变换后的坐标系,这个时候这个变换描述的是坐标系变换,也是child坐标系在parent坐标系下的描述。
a frame到b frame的坐标系变换(frame transform),也表示了b frame在a frame的描述,也代表了把一个点在b frame里坐标变换成在a frame里坐标的坐标变换。
从parent到child的坐标系变换(frame transform)等同于把一个点从child坐标系向parent坐标系的坐标变换,等于child坐标系在parent frame坐标系的姿态描述。
TF树的通信方式与TF树的具体表示
TF树的建立和维护是基于Topic通信机制的。

根据TF树的原理,它是靠建立与维护每个父子坐标系的变换关系来维护整个系统的所有坐标系的变换关系的。每个parent 坐标系到child坐标系变换关系是靠被称为broadcastor的发布器节点来持续发布的。

虽然是靠Topic通信机制发布的parent 坐标系到child坐标系的变换,但并不是让每一对父子坐标系都发布一个话题,实际上发布的唯一个话题是/topic,该话题集合了所有发布的父子坐标系的变换关系。

也就是说TF机制并不是让每一对父子坐标系都发布一个话题,而是将所有的父子坐标系都集合到到一个话题上,该话题的消息中传递的数据是所有父子坐标系的变换关系,是父子坐标系变换关系的一个大数组。

使用tf的tflisener就可以监听从任意两个坐标系的变换。前提是TF的树上能把这两个联通。

TF树的建立
在开始建立TF树的时候需要指定第一个父坐标系(parent frame)作为最初的坐标系。比如机器人系统中的map坐标系。

在第一次发布一个从已有的parent frame到新的child frame的坐标系变换时,这棵树就会添加一个树枝,之后就是维护。

TF树的建立和维护靠的是tf提供的tfbroadcastor类的sendtransform接口。

transformBroadcaster()类就是一个publisher,而sendTransform的作用是来封装publish的函数。

TF树的维护
在运行过程中要不断更新已有的parent frame到已有的child frame的坐标系变换,从而保证最新的位姿转换关系。

作为树状结构,要保证父子frame都有某个节点在持续地发布这两个frame之间的位姿关系,才能使树状结构保持完整。只有每一个父子的frame的位姿关系能被正确的发布,才能保证任意两个frame之间的连通。

TF树的使用
一旦正常的建立一个TF树,保证每个父子坐标系都能得到正常的维护,那么就可以利用TF提供的订阅器,订阅任意两个坐标系的转换关系。

如何根据TF树得到任意坐标系的转换关系?

如果想要获得任意两个坐标系的转换关系,其实订阅器是收取的/tf话题上的消息,该消息集合了所有发布的父子坐标系的变换关系。订阅器接收的其实是当前时刻的整个TF树,然后搜索这棵树,根据不同的父子坐标系关系找到一条变换的路径。这条变换路径就能通过父子关系通路连接起所求的这两个坐标系,从而通过不断将该通路上的变换矩阵相乘得到最终的所求的这两个坐标系的变换关系。

TF对发布器与订阅器进行了封装,使开发者通过TF的接口更加简单地建立对TF树中某些坐标系转换关系的维护与订阅。用tf的tflisener监听某一个指定的从一个a frame到b frame的变换即可。

总结(引用网络资源):
基本原理是,tfbroadcastor的类里有个publisher,tflisener的类里有个subscriber,一个发布叫/tf的topic,一个订阅这个topic,传送的消息message里包含了每一对parent frameid和child frameid的信息。这个机制意味着,所有的tb会发布某一特定的parent到child的变换,而所有tl会收到所有的这些变换,然后tl利用一个tfbuffercore的数据结构维护一个完整的树结构及其状态。基于此,tl在使用这棵树时,会用lookuptransform或waitfortransform来获得任意坐标系之间的变换。

这样即使只要是一个tflisener(即只监听两个坐标系的变换关系),就要跟所有tfbroadcastor建立连接,就要收取/tf上的整个TF树,还要负责搜索这棵树,找到一条变换的路径,然后通过变换矩阵相乘得到两个坐标系最终的变换关系。

TF的特点
优点:

各种数值计算的细节,你不用考虑,tf库可以帮你
接口很简洁,会广播和监听就行;
问题找的很准,那就是需要维护坐标系之间的关系,尤其是父子坐标系的关系
提供了很多工具程序
考虑了与时间相关的变换
支持tf-prefix,可以在多机器人上用。通过让不同机器人使用不同的prefix,来区分机器人。如果只有一个机器人一般是使用/
缺点:

树的结构很简单,但有时候很笨拙。对于同级的坐标系,就需要从下到上找共同先辈,然后从这个先辈再往下找,进而确定二者的关系。
每个订阅器要想获得某两个坐标系的关系都要搜索同一颗树,这样的开销太大,主要是网络传输的负荷比较大。
很难满足实时性的要求,这一点比较显然。这也是为什么TF会将每个变换存10秒钟的数据
虽然整体比较容易上手但是很多细节不易理解。比如,now()和time(0);比如,技术文档里的一些术语名词;比如,采用了机器人里的习惯,与飞行器,惯导,车辆里的习惯区别较大,使用时不能想当然。
TF消息:两个frame之间的消息
每个父子坐标系之间都会有broadcaster节点来发布消息维系坐标之间的转换关系。TransformStampde.msg就是/tf话题上消息。该消息格式用来表示两个frame之间一小段tf变换的相对坐标关系的。

说明:

ROS中实际上是靠TF tree来表示整个系统的坐标系关系的,而非简单地靠多个两两父子坐标系的转换关系来描述的。这里的TransformStampde.msg消息的TF tree消息类型的片段即其中的一对父子坐标系位姿的描述方式,TF tree消息类型基于TransformStampde.msg消息,因此先介绍TransformStampde.msg。TransformStampde.msg本质上描述的是TF tree中一小段tf变换。

具体消息类型如下:

geometry_msgs/TransformStamped(可见该消息类型是属于geometry_msgs程序包的,而非tf包)

std_mags/Header header
uint32 seq
time stamp
string frame_id
string child_frame_id
geometry_msgs/Transform transform
geometry_msgs/Vector3 translation
float64 x
float64 y
float64 z
geometry_msgs/Quaternion rotation
float64 x
float64 y
flaot64 z
float64 w
消息解释:
该消息表示的的是当前坐标系frame_id和它的子坐标系child_frame_id之间的转换关系。具体的转换位姿是由geometry_msgs/Transform消息类型来定义的,该消息类型用三维向量表示平移,用四元组表示旋转。

TF消息:TF树的消息类型
/tf话题表示的内容是整个机器人的tf树,而非仅仅是某两个坐标系的转换关系,这样的话,/tf话题是需要很多的节点来维护的,每一个节点维护两个父子frame之间的关系。即一个/tf话题上面,可能会有很多个node向上面发送消息。

这样就相当于TF tree是由很多的frame之间TF拼接而成。刚才说的TransformStampde.msg消息类型表示的是两个frame之间TF关系,接下来要介绍真正在/tf话题上进行传输的TF tree的消息类型。

在tf2中的TF树对应的消息类型是tf2_msgs/TFMessage.msg。可见该消息位于tf2_msgs程序包内。

tf2_msgs/TFMessage消息的具体格式:

geometry_msgs/TransformStamped[] transforms
std_msgs/Header header
uint32 seq
time stamp
string frame_id
string child_frame_id
geometry_msgs/Transform transform
geometry_msgs/Vector3 translation
float64 x
float64 y
float64 z
geometry_msgs/Quaternion rotation
float64 x
float64 y
flaot64 z
float64 w
可以看出TF树的消息类型实际上就是一个TransformStamped类型定义的可变长度数组。也就是说本质就是由很多个两个frame之间的TF消息TransformStamped形成描述整个机器人的TF树的消息类型tf2_msgs/TFMessage.msg。

TF在roscpp与rospy中的接口
无论是roscpp中还是rospy中都有TF库,TF提供了很多有用的接口。这里只大体描述,具体使用的时候再参考具体的资料。

提供的结构种类:

数据类型的定义(类):向量、点、四元数、3*3旋转矩阵、位姿等
数据转换:给出了旋转矩阵、四元数、欧拉角、旋转轴之间的转换函数
关于点、向量、角度、四元数等的运算的函数
TF类,封装好了发布器与订阅器接口。可以将坐标系转换关系发布到/tf话题上的一段transform上;也可以订阅/tf话题,并且得到到从源坐标系到目标坐标系这两个坐标系之间的转换关系。
transformBroadcaster()类就是一个publisher,而sendTransform的作用是来封装publish的函数。在实际的使用中,我们需要在某个Node中构建tf::TransformBroadcaster类,然后调用sendTransform(),将transform发布到/tf的一段transform上。

TransformListener类就是从/tf上接收的类。

TF程序包相关的命令行使用
用命令行显示当前所有frame的方法:

rosrun tf tf_monitor #显示当前坐标变换树的信息,主要是名称和实时的时间延时
rostopic echo /tf #以TransformStamped消息类型的数组显示所有父子frame的位姿转换关系
以上主要是数据显示

根据当前的tf树创建一个pdf图:

$ rosrun tf view_frames
这个工具首先订阅/tf,订阅5秒钟,根据这段时间接受到的tf信息,绘制成一张tf tree,然后创建成一个pdf图。

将会以图形的形式显示出TF树中所有的frame和两个frame 的父子关系及其Broadcaster、Average rate等

查看当前的tf树:

$ rosrun rqt_tf_tree rqt_tf_tree
该命令同样是查询tf tree的,但是与第一个命令的区别是该命令是动态的查询当前的tf tree,当前的任何变化都能当即看到,例如何时断开何时连接,捕捉到这些然后通过rqt插件显示出来。

查看两个frame之间的变换关系:

$ rosrun tf tf_echo[source_frame][target_frame]
将会持续的显示源坐标系和目标坐标系的位姿变换关系。

该指令可以查询任意两个frame的转换关系。

参考资料
https://sychaichangkun.gitbooks.io/ros-tutorial-icourse163/content/chapter8/8.3.html(基础讲义)

http://blog.exbot.net/archives/1686(TF的理解)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS中的坐标与坐标系转换 的相关文章

  • 使用WTGAHRS2(JY-GPSIMU)在ROS中读取数据并发布话题

    目录 IMU简介 驱动程序 IMU串口通信协议 程序 效果 IMU简介 十轴惯性导航传感器WTGAHRS2传感器集成高精度的陀螺仪 加速度计 地磁场传感器 GPS 模块 采用高性能的微处理器和先进的动力学解算与卡尔曼动态滤波算法 能够快速求
  • ROS之QtCreator开发环境搭建

    文章目录 系统环境 官方教程 安装 卸载 使用 导入工作空间 构建与运行 编写测试程序 系统环境 操作系统 Ubuntu20 04 ROS版本 Noetic 官方教程 按照官方教程或者下面笔记中的内容均能进行环境搭建 笔记中另外做了部分补充
  • ROS与navigation教程——ACML参数配置

  • Webots小车与Gampping建图仿真与ORB3算法实践

    此篇博客转自本作者在古月居的博客 https www guyuehome com 34537 前言 在研一的时候 由于XXX项目的需要 其中一项就是需要测试Gmapping建图 自然也要求使用ROS系统 由于之前经常在webots中进行仿真
  • 无人飞行器智能感知竞赛--模拟器安装

    开发环境 win11 wsl2 注意事项 请配合视频使用 如果不看视频会对下面的配置过程迷惑 因为一开始我是想安装在ubuntu18 04的 中途发现ubuntu18 04没有ros noetic 所以转入ubuntu20 04配置 视频链
  • 无人驾驶论坛

    1 百度Apollo论坛 http www 51apollo com 2 人工智能中文资讯网 http www ailab cn
  • rosrun 和 roslaunch 的时候 TAB 的自动补全出现问题

    rosrun 和 roslaunch 的时候 TAB 的自动补全出现问题 rospack Warning error while crawling home sun boost filesystem status Permission de
  • 线速度和角速度

    转自 https baike baidu com item E7 BA BF E9 80 9F E5 BA A6 1532652 fr aladdin https baike baidu com item E8 A7 92 E9 80 9F
  • ROS turtlebot_follower :让机器人跟随我们移动

    ROS turtlebot follower 学习 首先在catkin ws src目录下载源码 地址 https github com turtlebot turtlebot apps git 了解代码见注释 其中有些地方我也不是很明白
  • Ubuntu下vscode配置ROS环境

    摘要 最近准备放弃用clion开发ROS使用更主流的vscode 整理一下在ubuntu18 04下的VSCode安装和ROS环境配置流程 安装 方法一 软件商店安装 个人还是推荐使用ubuntu软件下载vscode 简单不容易出错 方法二
  • ROS rosdep update 出错方法 不需要翻墙切换之类的解决方法 ‘https://raw.githubusercontent.com/ros/rosdistro/master/inde

    系统 ubuntu18 rosdep update参考的这篇文章 https blog csdn net weixin 43311920 article details 114796748 utm source app app versio
  • ROS noetic tf demo错误处理及python版本切换

    文章目录 报错描述及解决 ubuntu20 04下python版本切换 报错描述及解决 ubuntu版本 20 04 ROS版本 noetic roslaunch turtle tf turtle tf demo launch 报错信息 t
  • 激光雷达LMS111在ROS上的使用

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

    ROS2官方文档 本教程为apt get命令安装方式 官网教程有点问题 借鉴一下大佬的安装方式 文章目录 1 安装ROS2 1 1 安装秘钥相关指令 1 2 授权秘钥 1 3 添加ROS2软件源 1 4 安装 2 设置环境 可选但是推荐 2
  • ROS AsyncSpinner 的多线程行为

    我试图了解 ROS 中的 AsyncSpinner 是如何工作的 因为我可能有一些误解 你可以找到类似的问题here As seen here它的定义提到 异步旋转器 产生几个线程 可配置 将并行执行回调 同时不会阻塞执行该操作的线程 叫它
  • 错误状态:平台不允许不安全的 HTTP:http://0.0.0.0:9090

    我正在尝试从我的 flutter 应用程序连接到 ws local host 9090 使用 rosbridge 运行 的 Ros WebSocket 服务 但我在 Flutter 中收到以下错误 错误状态 平台不允许不安全的 HTTP h
  • 我的代码的 Boost 更新问题

    我最近将 boost 更新到 1 59 并安装在 usr local 中 我的系统默认安装在 usr 并且是1 46 我使用的是ubuntu 12 04 我的代码库使用 ROS Hydro 机器人操作系统 我有一个相当大的代码库 在更新之前
  • 如何从里程计/tf数据获取投影矩阵?

    我想将视觉里程计的结果与 KITTI 数据集提供的事实进行比较 对于地面中的每一帧 我都有一个投影矩阵 例如 1 000000e 00 9 043683e 12 2 326809e 11 1 110223e 16 9 043683e 12
  • 无法在 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问题 假设使用构建的文件

随机推荐

  • PHP的大数组是什么意思?有什么作用?底层原理是什么?

    在 PHP 中 xff0c 大数组指的是包含大量元素的数组 xff0c 其元素数量可以达到数百万或数千万甚至更多 这种数组在处理大规模数据时非常有用 xff0c 例如在数据分析 机器学习和科学计算等领域中 PHP 的大数组的实现方式可以采用
  • PHP的全局变量是是干什么的?有什么作用?底层原理是什么?

    PHP的全局变量是指在整个PHP脚本中都可以被访问到的变量 这些变量存储在PHP进程的内存中 xff0c 并在整个脚本执行期间保持不变 全局变量的作用是在不同的函数和代码块中共享数据 xff0c 从而使代码更加简洁和易于维护 全局变量的底层
  • PHP的日志是干什么的?有什么用?底层原理是什么?

    在软件开发中 xff0c 日志是记录系统活动的重要方式之一 xff0c 也是排查问题和故障排除的主要工具之一 PHP提供了多种日志记录方式 xff0c 如文件日志 数据库日志和Syslog等 它们的共同目的是在代码执行时收集和记录信息 xf
  • PHP的开发环境和部署环境是什么意思?底层原理是什么?

    PHP的开发环境和部署环境是指在开发和部署PHP应用程序时所使用的不同环境 开发环境通常是指程序员在本地开发PHP应用程序的环境 xff0c 其目的是为了让程序员能够快速开发和测试应用程序 xff0c 同时方便调试和排除问题 在开发环境中
  • PHP为什么需要错误报告级别?底层原理是什么?

    PHP提供了多种错误报告级别 xff0c 包括错误信息 警告信息 提示信息和严格模式等 xff0c 用于在开发过程中捕获和处理错误 底层原理是通过PHP的内部错误处理机制来实现的 当PHP执行脚本时 xff0c 如果出现了错误 xff0c
  • PHP的代码调试技巧是什么意思?底层原理是什么?

    PHP的代码调试技巧是指在开发过程中 xff0c 通过调试技术来解决代码中的问题 xff0c 提高代码的可靠性和稳定性 这些技巧可以帮助开发人员快速定位代码中的错误 xff0c 提高代码的质量和效率 PHP提供了多种调试技术 xff0c 包
  • PHP的mysqli扩展和mysql扩展的区别是什么?底层原理是什么?

    mysqli和mysql扩展都是PHP提供的操作MySQL数据库的扩展 它们的区别在于mysqli扩展是MySQL Improved Extension的简写 xff0c 是mysql扩展的改进版 xff0c 提供了更好的性能和更多的功能
  • PHP的依赖关系是什么意思?底层原理是什么?

    PHP的依赖关系指的是PHP应用程序或库与其他软件包或库之间的关系 这些软件包或库可能包括操作系统提供的库 xff0c 例如文件I O和网络功能 xff0c 也可能包括第三方库 xff0c 例如数据库客户端库和图像处理库 底层原理是 xff
  • 什么是Composer?底层原理是什么?

    Composer是PHP的一个依赖管理工具 xff0c 它可以帮助开发者在项目中自动管理依赖关系 xff0c 例如第三方库 框架 组件等 通过Composer xff0c 可以在项目中添加 更新 卸载依赖项 xff0c 并自动解析它们的依赖
  • 为什么composer可以自动管理依赖关系?底层原理是什么?

    Composer能够自动管理依赖关系的原理是基于包管理和自动加载的机制 首先 xff0c Composer通过一个名为Packagist的在线包存储库来管理各种PHP包 xff0c 这个仓库中包含了大量的PHP库和框架 xff0c 开发者可
  • windows线程同步-事件Event用法总结

    事件对象 Win32 中最具弹性的同步机制就属 events 对象了 Event 对象是一种核 心对象 xff0c 它的唯一目的就是成为激发状态或未激发状态 这两种状态全由程序 来控制 xff0c 不会成为 Wait 函数的副作用 Even
  • composer.lock是干什么的?底层原理是什么?

    composer lock文件是Composer工具在安装依赖包时生成的一个锁文件 它记录了当前应用程序所依赖的所有PHP库及其版本号 xff0c 以及所有依赖库所依赖的其他库及其版本号等信息 在运行composer install命令时
  • PHP的Zend引擎是干什么的?底层原理是什么?

    PHP的Zend引擎是PHP解释器的核心组件 xff0c 负责将PHP代码转换为可执行的指令集 xff0c 并执行这些指令 Zend引擎是PHP的默认执行引擎 xff0c 被广泛使用 Zend引擎的底层原理可以分为以下几个关键步骤 xff1
  • PHP解释器是干什么的?底层原理是什么?

    PHP解释器是用于解释执行PHP代码的软件程序 它负责将编写的PHP代码转换为可执行的机器指令 xff0c 并执行这些指令以实现代码的功能 PHP解释器的底层原理可以分为以下几个步骤 xff1a 词法分析 xff08 Lexical Ana
  • PHP代码的底层是什么?底层原理是什么?

    PHP代码的底层是由计算机可执行的机器码 xff08 二进制指令 xff09 组成 底层原理是将PHP代码经过编译和解释执行的过程转化为机器码 底层原理可以分为以下几个步骤 xff1a 词法分析 xff08 Lexical Analysis
  • Jetson Xavier NX 的SD卡系统镜像制作

    Jetson Xavier NX 的SD卡系统镜像制作 一 SD卡系统查看二 系统镜像制作三 系统镜像烧录 一 SD卡系统查看 现有的SD卡的内存为128G xff0c 其中64G内存并未分配 span class token commen
  • 嵌入式Linux下使用crond服务

    参考 xff1a https www linuxidc com Linux 2014 02 97369 htm http www linuxidc com Linux 2014 02 97360 htm https blog csdn ne
  • 关于Flexsns Sky 卡80%,以及乱码的解决问题

    一直被 flexsns sky 这个应用折磨好久了 xff0c 刚开始的时候安装成功 但是打开界面一直卡在80 那里 xff0c ucenter 里面的设置也是对的 官网也是挂的 xff01 于是百思不得解 接下来 我来说说我的解决办法把
  • Ubuntu18.04运行ORB-SLAM3(Demo+本地Realsense D415运行)

    ORB SLAM3论文地址 xff1a https arxiv org abs 2007 11898 代码地址 xff1a https github com UZ SLAMLab ORB SLAM3 一 安装库 根据ORB SLAM3源代码
  • ROS中的坐标与坐标系转换

    ROS中的TF 官网建议新工作直接使用tf2 xff0c 因为它有一个更清洁的界面 xff0c 和更好的使用体验 xff08 自ROS Hydro以来 xff0c tf第一代已被 弃用 xff0c 转而支持tf2 xff09 TF介绍 TF