- 博客(39)
- 收藏
- 关注
原创 Jetson AGX Xavier避坑指南(二):加装固态硬盘并挂载到/home下
Jetson AGX Xavier自身的系统储存空间太小了,刷机完成之后基本也没剩下多少空间了,但是好在支持M.2nvme接口,可以自己加装固态硬盘。首先还是要说,加装硬盘有一定的风险,需要提前做好备份目录1.查看硬盘分区2.对硬盘分区3.格式化分区4.挂载硬盘分区5.替换原来的home6.设置开机自动挂载1.查看硬盘分区$sudo fdisk -lu 可以看到/dev/nvme0n1就是自己接入的硬盘2.对硬盘分区$sudo fdisk/dev/nvme0n1在命令后输入 n新.
2022-05-05 21:03:09
3699
3
原创 Jetson AGX Xavier避坑指南(一):刷机
目录一、刷机前的准备1. 需要的硬件2. 需要预先安装的软件二、刷机1. 打开SDKManager2. JetPack的下载3. 刷机三、Jtop的安装这几天帮忙师兄做实验,需要在嵌入式计算平台上测试。于是选中了实验室松灵移动平台scout mini pro上配置的Jetson AGX Xavier,这几天来,为了搭建各类环境,踩了n多的坑,好在实验顺利结束了,在这里记录下来,以备不时之需。一、刷机前的准备1. 需要的硬件由于我使用的是英伟达的SDKManager进行刷机,因此需要一台Linu
2022-05-03 19:57:42
2887
1
原创 ROS message_filters的使用
1 message_filters时间同步器message_filters时间同步器有两种时间同步方式,一种是完全同步(ExactTime),另一种采用自适应算法来进行近似的时间同步。2 ExactTime时间同步message_filters::sync_policies::ExactTime策略要求消息具有完全相同的时间戳信息,才能进行匹配,只有当所有通道的消息都具有完全相同的时间戳时才会调用回调函数。#include <message_filters/subscriber.h>#
2022-04-25 11:22:51
915
原创 提高编译速度的方法——ccache的使用
在使用CMake编译大型工程时。如果每次只是单独对一个文件进行修改还好,CMake可以针对修改单独编译,但往往只要对CMakeLists做一点小修改,整个工程就要重新编译,对于普通性能的电脑来说通常非常耗时。ccache是一个编译器缓存,可以大幅度的提高工程重新编译的速度。网上的教程比较繁琐,亲测使用以下方法安装简单快捷:cd ~git clone https://github.com/ccache/ccache.gitcd ccachemkdir buildcd buildcmake -DC
2022-03-29 09:37:25
6351
1
原创 OpenCV4编译链接问题xxxx未定义的引用
大多数情况是因为Anaconda中的部分库冲突,例如usr/lib/x86_64-linux-gnu/libSM.so.6:对‘uuid_unparse_lower@UUID_1.0’未定义的引用首先查看libSM.so的链接关系cd /usr/lib/x86_64-linux-gnuldd libSM.so找到libuuid.so linux-vdso.so.1 (0x00007ffda31fc000) libICE.so.6 => /usr/lib/x86_64-linux-gnu/
2022-03-17 17:00:22
6302
1
原创 ROS Navigation中的TF树与AMCL的关系
ROS Navigation中的TF树与AMCL功能包的关系一、ROS Navigation中的TF树base_link:固定在机器人本体上的坐标系,随着机器人的运动而运动。map:固定的世界坐标系,作为全局参照。odom:里程计坐标系,是一个world-fixed坐标系,机器人的位姿在里程计坐标系上是没有任何约束的。里程计坐标系的建立通常有一些里程计数据源,例如视觉里程计,轮速计,惯性测量单元等。详细解释参见链接根据机器人模型的描述文件,base_link坐标系又有许多分支,根据机器人种类的
2022-02-24 19:24:16
983
原创 从零手写VIO——第一讲作业
3 其他导数使用右乘so(3)\mathfrak{so}(3)so(3),推导以下导数d(R−1p)dR\frac{d(\mathbf{R}^{-1}p)}{d\mathbf{R}}dRd(R−1p)d(R−1p)dR=limϕ→0(Rexp(ϕ∧))−1p−R−1pϕ=limϕ→0exp(−ϕ∧)R−1p−R−1pϕ=limϕ→0(I−ϕ∧)R−1p−R−1pϕ=limϕ→0−ϕ∧R−1pϕ=limϕ→0(R−1p)∧ϕϕ=(R−1p)∧\begin{aligned}\frac{
2021-11-02 22:15:29
162
原创 G2O框架及编程方法
目录一、G2O的基本框架1.图的核心2.顶点和边3.配置SparseOptimizer的优化算法和求解器4.求解二、G2O编程流程三、G2O顶点编程方法1.G2O内部常见顶点类型2.自定义顶点的方法3.向图中添加顶点四、G2O边的编程方法1.G2O中边的类型2.边的主要函数3.自定义G2O的边4.向图中添加边G2O(General Graph Optimization)是一个用来优化非线性误差函数的C++框架, https://github.com/RainerKuemmerle/g2o一、G2O的
2021-10-22 15:13:40
665
原创 视觉SLAM十四讲 第九讲前端实践 运行报错核心已转储
在学习十四讲第九讲前端实践中,project0.2版本,编译可以通过,运行时发现一直报错 段错误(核心已转储)。debug后发现问题出在初始化阶段,在函数void VisualOdometry::extractKeyPoints(){ orb_->detect ( curr_->color_, keypoints_curr_ );}中,keypoints_curr_的长度始终是0,无法提取到有效的关键点,输出的curr_->color_正常,于是将这段提取特征点的代码更
2021-10-21 21:05:59
789
3
原创 error while loading shared libraries: libxmlrpcpp.so: cannot open shared object file: No such file o
编译QT工程时,报错error while loading shared libraries: libxmlrpcpp.so: cannot open shared object file: No such file or directory,原因是链接器找不到库文件,搜索libxmlrpcpp.so,发现其位置为/opt/ros/melodic/lib,接下来我们sudo gedit /etc/ld.so.conf把刚才的目录添加进去,然后执行sudo ldconfig再进行编译,发现编译成功
2021-09-22 21:10:54
1777
原创 qt creator打开ros工作空间后,roscore,catkin_make失效的解决办法
最近在学习用qt给机器人做一个交互界面,在用qtcreator打开ros工作空间之后,发现运行roscore会报错,提示找不到命令,catkin_make也是。试了网上很多方法,发现可能是qtcreator污染了工作空间,在.bashrc中source被污染的工作空间会使得之前source的/opt/ros/melodic/setup.bash失效。因此注释掉这段source,系统就会恢复正常。例如,我用qt打开了ywl_ws这个工作空间,那么在.bashrc中将这句话注释掉就可以了。# source
2021-09-14 19:54:57
507
1
原创 视觉SLAM十四讲 第5讲 相机与图像
目录一、相机模型针孔相机模型畸变双目相机模型RGB-D相机模型一、相机模型针孔相机模型其中OOO为相机的光心,PPP为现实世界空间中的一点,物理成像平面上的点为P′P^{\prime}P′,P=[X,Y,Z]T,p′=[X′,Y′,Z′]TP=[X,Y,Z]^T,p^{\prime}=[X^{\prime},Y^{\prime}, Z^{\prime}]^TP=[X,Y,Z]T,p′=[X′,Y′,Z′]T,焦距为fff。根据相似三角形:Zf=−XX′=−YY′\frac Zf =-\frac
2021-08-19 20:08:21
211
原创 视觉SLAM十四讲 第4讲李群与李代数
目录一、李群与李代数基础群李代数的引出李代数的定义李代数so(3)\mathfrak{so} (3)so(3)李代数se(3)\mathfrak{se}(3)se(3)二、指数和对数映射SO(3)SO(3)SO(3)上的指数映射SE(3)SE(3)SE(3)上的指数映射三、李代数求导与扰动模型BCH公式与近似公式SO(3)SO(3)SO(3)李代数上的求导李代数求导扰动模型(左乘)SE(3)SE(3)SE(3)上的李代数求导一、李群与李代数基础上一节给出了三维旋转矩阵构成了特殊正交群SO(3),变换矩
2021-08-18 16:40:01
464
原创 视觉SLAM十四讲 第3讲 三维空间刚体运动
目录一、旋转矩阵点和向量,坐标系坐标系间的欧式变换二、旋转向量和欧拉角旋转向量欧拉角三、四元数四元数的定义四元数的运算用四元数表示旋转四元数到旋转矩阵的转换本节的部分内容在机器人学导论课程中都有讲述,相关的知识点在上学期的课后整理过,放在这里,机器人学的数理基础知识,本文将在此基础上做些补充。一、旋转矩阵点和向量,坐标系坐标系间的欧式变换二、旋转向量和欧拉角旋转向量旋转矩阵是一个行列式为1的正交矩阵,反之,行列式为1的正交矩阵也是一个旋转矩阵,所以可以把旋转矩阵的集合定义为如下:SO(n
2021-08-16 16:26:55
239
原创 视觉SLAM十四讲 第2讲 初识slam
第二讲 初识SLAM引言常用的相机SLAM中使用的相机往往比我们熟悉的单反相机等更加简单,能够以一定的速率拍摄周围的环境,形成一个连续的视频流。按照工作方式可以分为:单目相机(Monocular)双目相机(Stereo)深度相机(RGB-D)单目相机照片实质是拍照时的场景在相机的成像平面,它以二维的形式反映了三维的世界。因而丢掉了场景的深度(距离)信息。在单目相机中,我们无法从单张照片来计算场景中物体与我们之间的距离,只能通过移动相机才能估计出它的运动。但是单目SLAM估计的轨迹和地图总
2021-08-15 19:16:35
425
原创 Gazebo打不开模型的解决办法
学习古月居的ROS常用SLAM功能包使用指南时,运行~$ roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch Gazebo打开后迟迟加载不出模型,打开mbot_laser_nav_gazebo.launch文件进入world文件夹,发现cloister.world文件中需要加载的模型都不在本地,打开Gazebo时需要在线下载,正常情况下下载速度非常慢,所有Gazebo一直卡住。Gazebo的模型可以在官网http://models..
2021-06-21 19:16:37
2141
原创 机器人静力学与雅可比矩阵
目录机器人静力学与雅可比矩阵引言两大问题虚功与虚功原理操作臂力和力矩的平衡关节驱动力计算雅可比矩阵解析雅可比矩阵几何雅可比矩阵机器人静力学与雅可比矩阵引言两大问题问题一:机器人静力学建模问题。已知外界环境对机器人手部作用力,求相应的满足静力学平衡条件的关节驱动力矩。 输入力与输出力间的传递(映射)关系问题二:刚度问题。在外力和负载的作用下,机器人末端执行器会偏离理想的位置。 载荷与变形间对应关系虚功与虚功原理虚功原理:具有理想约束力学体系,其平衡的充要条件是所有主动力在任意虚位移中所作元
2021-04-22 22:00:34
5744
1
原创 CMake编译C++文件
这篇文章介绍如何使用cmake工具编译一个最简单的helloworld.cpp文件。首先创建一个空的文件夹。~$ mkdir cmake_test在该文件夹下,我们新建一个helloworld.cpp文件~/cmake_test$ touch helloworld.cpp 1 #include <iostream> 2 using namespace std; 3 4 5 int main(int a
2021-04-18 19:00:02
937
原创 MATLAB机器人工具箱(一 机器人运动学)
一、三维空间位姿表示与坐标变换方法三维空间的位置与姿态表示位置描述三维空间中的一点位置可由数组表示,MATLAB中同时提供了函数画出点的位置。姿态描述旋转矩阵MATLAB机器人工具箱中提供了函数rotx(), roty(), rotz()用来计算绕三轴旋转的旋转矩阵(3x3)坐标系绘制函数trplot():接收3x3旋转矩阵R或4x4齐次变换矩阵T,并将子坐标系的位置与姿态在原始坐标系中画出来。函数tranimate():tranimate(x1, x2, options):展
2021-04-11 22:04:28
9071
1
原创 Solution found but controller failed during execution解决方法
学习古月老师的MoveIt编程入门的课程中发现,进行笛卡尔空间运动时,出现以下错误ABORTED: Solution found but controller failed during execution参考网友的方法https://www.guyuehome.com/author/x1dn6_6736疑似是MoveIt自身的bug,需要将路径点列表中的第一个点去掉# 将初始位姿加入列表# waypoints.append(start_pose)我们直接将这一句注释掉,发现仿真可以正常ex
2021-03-27 20:15:37
3359
2
原创 机器人学的数理基础知识
目录位置和姿态的表示位置描述方位描述旋转矩阵位姿描述坐标变换平移坐标变换旋转坐标变换齐次坐标变换齐次变换平移齐次坐标变换旋转齐次坐标变换物体的变换及逆变换齐次变换的逆变换齐次变换的求逆问题通用旋转变换通用旋转变换公式等效转角与转轴位置和姿态的表示位置描述在指定坐标系下,空间中任意一点可有3×13 \times 13×1位置矢量来确定Ap=[pxpypz] ^Ap =\begin{bmatrix}p_x\\p_y\\p_z\end{bmatrix}Ap=⎣⎡pxpypz⎦⎤
2021-03-15 22:52:13
2144
原创 ROS学习笔记十五(常用可视化工具的使用)
ROS学习笔记十五QT工具箱rqt_consolerqt_plotrqt_image_viewRvizGazebo资源整理这是ROS入门系列的最后一篇笔记了,这几天陆陆续续的又把胡老师的《ROS入门21讲》看了一遍,比第一遍的理解更深了,写下了这一系列笔记,希望大家能相互交流,指出错误,一起学习。明天就要返校了,希望自己能在新学期有所进步,在机器人的路上越走越远。QT工具箱日志输出工具–rqt_console计算图可视化工具–rqt_graph数据绘图工具–rqt_plot图像渲染工具–r
2021-03-03 10:35:19
734
原创 ROS学习笔记十四(Launch启动文件的使用方法)
ROS学习笔记十四Launch文件Launch文件语法< launch >< node >< param > / < rosparam > 参数设置< arg > 参数设置< remap > 重映射< include > 嵌套launch示例本节讲介绍快速启动节点的方法,launch启动文件的使用方法Launch文件Launch文件:通过XML文件实现多节点的配置和启动(可自动启动ROS Master)Launc
2021-03-02 19:40:52
529
原创 ROS学习笔记十三(TF坐标系广播与监听的编程实现)
ROS学习笔记十三创建功能包创建TF广播器代码(C++)流程梳理创建TF监听器代码(C++)流程梳理配置TF广播器和监听器代码编译规则编译并运行广播器和监听器代码(Python)广播器监听器本节将介绍上一节海龟跟随的原理,以及TF广播和监听的实现创建功能包$ cd ~/catkin_ws/src$ catkin_create_pkg learning_tf roscpp rospy tf turtlesim创建TF广播器代码(C++)/** * 该例程产生tf数据,并计算、发布turtl
2021-03-02 18:27:36
408
原创 ROS学习笔记十二(ROS中的坐标系管理系统)
ROS学习笔记十二机器人中的坐标变换TF功能包能干什么?TF坐标变换如何实现?小海龟跟随实验tf_echo工具rviz工具机器人中的坐标变换开学这学期就要学机器人学导论,现在还看不太懂hhh。TF功能包能干什么?五秒钟之前,机器人头部坐标系相对于全局坐标系的关系是什么样的?机器人夹取的物体相对于机器人中心坐标系的位置在哪里?机器人中心坐标系相对于全局坐标系的位置在哪?TF坐标变换如何实现?广播TF变换监听TF变换base_link,以机器人底盘上一点建立的坐标系,本体坐标系b
2021-03-02 16:07:59
340
原创 ROS学习笔记十一(参数的使用与编程方法)
ROS学习笔记十一参数模型创建功能包参数命令行使用rosparam列出当前所有参数显示某个参数值设置某个参数值保存参数到文件从文件读取参数删除参数编程方法(C++)流程梳理配置代码编译规则编译并运行编程方法(Python)参数模型下图来源于古月《ROS入门21讲》全局字典,保存各个节点的配置参数,各个节点都可以全局访问。全局变量的存储空间。创建功能包$ cd ~/catkin_ws/src$ catkin_create_pkg learning_parameter roscpp rospy
2021-03-01 19:28:26
219
原创 ROS学习笔记十(服务数据的定义与使用)
ROS学习笔记十服务模型自定义服务数据定义srv文件在CMakeLists.txt添加编译选项在package.xml中添加功能包依赖编译生成语言相关文件创建服务端代码(C++)创建服务端代码(C++)配置服务器/客户端代码编译规则编译并运行客户端和服务端创建客户端和服务端代码(Python)客户端服务端服务模型下图来源于古月《ROS入门21讲》本节我们将自定义一个服务数据类型learning_service::Person自定义服务数据定义srv文件Person.srvstring n
2021-03-01 17:00:43
413
3
原创 ROS学习笔记九(服务端Server的编程实现)
ROS学习笔记九服务模型服务模型下图来源于古月《ROS入门21讲》本文的部分代码来源于古月《ROS入门21讲》往期链接ROS学习笔记八(客户端Client的编程实现)ROS学习笔记七(话题消息的定义与使用)ROS学习笔记六(订阅者Subscriber的编程实现)ROS学习笔记五(发布者Publisher的编程实现)ROS学习笔记四(创建工作空间与功能包)ROS学习笔记三(ROS命令行工具的使用)ROS学习笔记二(ROS的核心概念)ROS学习笔记一(Linux系统基础操作)
2021-03-01 11:16:55
339
原创 ROS学习笔记八(客户端Client的编程实现)
ROS学习笔记八服务模型创建功能包创建客户端代码(C++)流程梳理配置客户端代码编译规则编译并运行客户端客户端代码(Python)服务模型下图来源于古月《ROS入门21讲》通过ROS Master管理节点,客户端turtle_spawn发布请求,产生一只新海龟,给服务端turtlesim,服务端对请求进行处理,并返回一个response,表明处理结果。创建功能包$ cd~/catkin_ws/src$ catkin_create_pkg learning_service roscpp ro
2021-02-28 18:14:51
337
原创 ROS学习笔记七(话题消息的定义与使用)
ROS学习笔记七话题模型自定义话题消息定义msg文件在CMakeLists.txt添加编译选项在package.xml中添加功能包依赖编译生成语言相关文件创建发布者代码(C++)创建订阅者代码(C++)配置代码编译规则编译并运行发布者和订阅者发布者和订阅者代码实现(Python)发布者订阅者话题模型下图源自于古月《ROS入门21讲》以上两节所使用的话题消息都是ROS内定义好的,本次我们将自定义一个新的消息类型,来进行话题通信。ROS Master管理订阅者和发布者两个节点,我们新建learnin
2021-02-28 11:46:29
440
原创 ROS学习笔记六(订阅者Subscriber的编程实现)
ROS学习笔记六话题模型创建订阅者代码(C++)引入头文件主函数回调函数完整代码流程梳理配置订阅者代码编译规则编译并运行订阅者订阅者代码(Python)话题模型下图来源于古月《ROS入门21讲》ROS Master管理两个节点,发布者turtlesim和订阅者Pose Listener之间通过/turtle1/pose话题传输turtlesim::Pose类型的消息进行通信,本节主要实现订阅者Subscriber创建订阅者代码(C++)引入头文件#include <ros/ros.h
2021-02-28 11:00:03
398
原创 ROS学习笔记四(创建工作空间与功能包)
ROS学习笔记四一、工作空间src - 代码空间(Source Space)build - 编译空间(Build Space)devel - 开发空间(Development Space)install - 安装空间(Install Space)二、创建工作空间创建工作空间编译工作空间设置环境变量检查环境变量三、创建功能包创建功能包编译功能包package.xml文件cMakeList.txt一、工作空间工作空间(workspace)是一个存放工程开发相关文件的文件夹。 类似于windows系统中我们所
2021-02-27 12:00:22
500
原创 ROS学习笔记三(ROS命令行工具的使用)
ROS学习笔记三ROS命令行工具以小海龟为例运行roscore运行turtlesim节点运行turtle_teleop_key节点rqt_graph指令rosnode 工具rosnode listrosnode inforostopic 工具ROS命令行工具常用命令:rostopicrosservicerosnoderosparamrosmsgrossrv以小海龟为例运行roscore运行turtlesim节点弹出小海龟:运行turtle_teleop_key节点完成。
2021-02-26 16:47:20
625
原创 ROS学习笔记二(ROS的核心概念)
ROS学习笔记二一、节点与节点管理器节点(Node) --执行单元节点管理器(ROS Master) --控制中心二、话题通信话题(Topic) --异步通信机制消息(Message) --话题数据三、服务通信服务(Service) --同步通信机制四、话题与服务的区别五、参数参数(Parameter) --全局共享字典六、文件系统功能包(Package)功能包清单(Package manifest)元功能包(Meta Packages)一、节点与节点管理器节点(Node) --执行单元执行具体任务
2021-02-26 11:23:56
304
原创 ROS学习笔记一(Linux系统基础操作)
ROS学习笔记一ROS学习笔记一(Linux系统基础操作)一、截图功能二、软件与更新三、终端四、命令行使用基础1. 查看当前终端所在路径:pwd2. 切换路径:cd3. 进入上一级目录:cd . .4. 创建新的文件夹:mkdir + name5. 查看当前路径下的文件:ls6. 在目标文件夹下新创建文件:touch + name7. 对文件进行剪切:mv + file_name + path8. 对文件进行复制粘贴:cp + file_name + path + (new_file_name)9. 删除文
2021-02-26 10:18:12
951
原创 rosdep init 找不到命令的解决办法
rosdep init 找不到命令的解决办法问题之前用虚拟机总是卡,今天终于装了双系统win10+ubuntu18.04,一切顺利,接着安装了ROS,遇到了几个问题,一番查找后,把系列的解决办法和出处写在这里。安装完成后执行sudo rosdep init报错:sudo: rosdep:找不到命令解决方法参考https://blog.csdn.net/qq_14977553/article/details/107493616原因是缺少python-rosdep这个包,安装即可。sud
2021-02-25 19:52:26
5525
10
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人