AutoDL
文档维护:Arvin
网页部署:Arvin
▶
写在前面:通过AutoDL平台租赁云服务器,配置环境,远程桌面。
vscode远程SSH链接
参考链接:https://www.autodl.com/docs/ssh/
vscode安装插件SSH,添加SSH,输入SSH指令,点击connect,输入密码。
然后为remote添加常用的插件。
ros-melodic安装
参考链接:http://www.autolabor.com.cn/book/ROSTutorials/chapter1/12-roskai-fa-gong-ju-an-zhuang/127-zi-65993a-qi-ta-ros-ban-ben-an-zhuang.html
安装源
官方默认安装源:
1sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
或来自国内中科大的安装源
...
路径规划算法(一)
文档维护:Arvin
网页部署:Arvin
▶
写在前面:
全局规划算法与局部规划算法,全局规划属于静态规划,局部规划属于动态规划。
全局规划算法
A*算法
A*算法是一种很常用的路径查找和图形遍历算法。
首先我们需要知道地图信息(栅格地图)、起点位置、终点位置。
然后开始搜索计算每个点的优先级。其核心是下面这个公式:
f(n)=g(n)+h(n)f(n) = g(n) + h(n)
f(n)=g(n)+h(n)
公式是为了求得节点优先级,其中:
f(n)f(n)f(n)是节点n的综合优先级。当选择下一个要遍历的节点时,总会选择综合优先级最高的(值最小)的节点。
g(n)g(n)g(n)是节点nnn距离起点的代价,即节点n与起点的距离。
h(n)h(n)h(n)是节点nnn距离终点的预计代价,也就是A*算法的启发函数,一般采取节点n到终点的曼哈顿距离。
g(n)g(n)g(n)是从开始点到当前点的移动量:
h(n)h(n)h(n)采用曼哈顿距离计算:
然后根据算法进行搜索:
初始化open_set和close_set;
将起点加入open_set中,并设置优先级为0(优先 ...
TSP-RL
文档维护:Arvin
网页部署:Arvin
▶
TSP
TSP问题(Traveling Salesman Problem),是数学领域中著名问题之一。假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求所选的路径路程为所有路径中的最小值。
从图论的角度来看,TSP问题的输入是一个边带权的完全图,目标是找一个权值和最小的哈密顿回路。TSP问题可大致分为对称TSP问题和非对称TSP问题。所谓对称指的是在模型中,城市 u 到城市 v 的距离与城市 v 到城市 u 的距离是一样的,其在图中的体现就是对称TSP问题的输入一般是无向图,而非对称TSP问题的输入往往是有向图。本文主要讨论的是对称TSP问题。
假设给定一个 n 个点的带权完全图 G ,本文需要找到它权值和最小的哈密顿回路。或许会有人觉得这是求最短路,但是这并不是求最短路。最短路是求两点之间权值和最小的路径,而TSP求的是一个回路,并不能直接通过求解最短路进行求解。所有可能的路线共有(n−1)!(n−1){!}(n−1)! 种
下面是两篇经典的使 ...
ROS(六)导航
文档维护:Arvin
网页部署:Arvin
▶
写在前面:本文旨在记录学习ROS过程中的一些重要知识概念和遇到的错误问题。主要参考赵虚左老师的ROS课程(第一个参考链接),由于赵老师用的noetic版本,而我用的是melodic版本,细节上可能会有所差异。
机器人系统仿真
常用组件
1.URDF:
URDF是 Unified Robot Description Format 的首字母缩写,直译为统一(标准化)机器人描述格式,可以以一种 XML 的方式描述机器人的部分结构,比如底盘、摄像头、激光雷达、机械臂以及不同关节的自由度…,该文件可以被 C++ 内置的解释器转换成可视化的机器人模型,是 ROS 中实现机器人仿真的重要组件。
2.Xacro:
Xacro 是 XML Macros 的缩写,Xacro 是一种 XML 宏语言,是可编程的 XML。
Xacro 可以声明变量,可以通过数学运算求解,使用流程控制控制执行顺序,还可以通过类似函数的实现,封装固定的逻辑,将逻辑中需要的可变的数据以参数的方式暴露出去,从而提高代码复用率以及程序的安全性。
3.Rviz:
RViz 是 ROS V ...
李群李代数(一)
文档维护:Arvin
网页部署:Arvin
▶
写在前面:这篇的内容主要来自于《slam十四讲:从入门到实践》中的第三、四章,是为了引出李群李代数,文章大多记录了一些结论,如果对推导有兴趣可以去看书中详细的过程。
基础知识
三维空间刚体运动
旋转矩阵
1.反对称矩阵
设A=(aij)n×nA=(a_{ij})_{n \times n}A=(aij)n×n,若其中元素满足aij=aji,∀i,j⇔AT=Aa_{ij}=a_{ji},\forall i,j\Leftrightarrow A^T=Aaij=aji,∀i,j⇔AT=A,则称AAA是对称矩阵;若其元素满足aij=−aji,∀i,j⇔AT=−Aa_{ij}=-a_{ji},\forall i,j\Leftrightarrow A^T=-Aaij=−aji,∀i,j⇔AT=−A,则称AAA为反对称矩阵。
若AAA是反对称矩阵,则aij=−aija_{ij}=-a_{ij}aij=−aij,当i=ji=ji=j时,便有aij=0a_{ij}=0aij=0,即反对称矩阵对角线上的元全为零,而位于主对角线两侧对称的元素 ...
RL in Constraint Manifold
文档维护:Arvin
网页部署:Arvin
▶
Abstract
由于许多实际问题,包括安全、机械约束和磨损,机器人技术中的强化学习极具挑战性。
通常,这些问题在机器学习文献中没有被考虑。在现实世界中应用强化学习的一个关键问题是安全探索,这需要在整个学习过程中满足物理和安全约束。为了在这样一个安全关键的环境中进行探索,利用机器人模型和约束等已知信息有助于提供更强大的安全保证。利用这些知识,我们提出了一种新的方法,在满足学习过程中的约束的情况下,有效地学习仿真中的机器人任务。
Introduction
深度强化学习虽然在一些问题上表现的很好,但是在现实世界中使用强化学习还是一项具有挑战性的任务,因为典型的强化学习算法,通过不断试错来最大化累计奖励,并没有考虑在探索过程中对约束的满足,而在实际世界中智能体在探索过程中要受到许多约束。
文章提出了一种新方法,在流形空间的切平面上执行动作(Acting on the Tangent Space of the Constraint Manifold, ATACOM)。该方法将约束强化学习问题转化成无约束强化学习问题。
ATACOM的优势可以概括如 ...
ROS(五)运行管理
文档维护:Arvin
网页部署:Arvin
▶
写在前面:本文旨在记录学习ROS过程中的一些重要知识概念和遇到的错误问题。主要参考赵虚左老师的ROS课程(第一个参考链接),由于赵老师用的noetic版本,而我用的是melodic版本,细节上可能会有所差异。
本章主要解决以下几个问题:
如何关联不同的功能包,繁多的ROS节点该如何启动?
功能包、节点、话题、参数重名时应该如何处理?
不同主机上的节点如何通信?
ROS元功能包
在ROS中,提供了一种方式可以将不同的功能包打包成一个功能包,当安装某个功能模块时,直接调用打包后的功能包即可,该包又称之为元功能包(metapackage)。
MwtaPackage是Linux的一个文件管理系统的概念。是ROS中的一个虚包,里面没有实质性的内容,但是它依赖了其他的软件包,通过这种方法可以把其他包组合起来,我们可以认为它是一本书的目录索引,告诉我们这个包集合中有哪些子包,并且应该去哪里下载。
ROS节点管理launch文件
概念
launch 文件是一个 XML 格式的文件,可以启动本地和远程的多个节点,还可以在参数服务器中设置参数。
作用
...
ROS(四)通信机制进阶
文档维护:Arvin
网页部署:Arvin
▶
写在前面:本文旨在记录学习ROS过程中的一些重要知识概念和遇到的错误问题。主要参考赵虚左老师的ROS课程(第一个参考链接),由于赵老师用的noetic版本,而我用的是melodic版本,细节上可能会有所差异。
常用API
初始化
C++
12345678910111213/** @brief ROS初始化函数。 * * 该函数可以解析并使用节点启动时传入的参数(通过参数设置节点名称、命名空间...) * * 该函数有多个重载版本,如果使用NodeHandle建议调用该版本。 * * \param argc 参数个数 * \param argv 参数列表 * \param name 节点名称,需要保证其唯一性,不允许包含命名空间 * \param options 节点启动选项,被封装进了ros::init_options * */void init(int &argc, char **argv, const std::string& name, uint32_t options = 0);
Python
1234567 ...
ROS(三)通信机制
文档维护:Arvin
网页部署:Arvin
▶
写在前面:本文旨在记录学习ROS过程中的一些重要知识概念和遇到的错误问题。主要参考赵虚左老师的ROS课程(第一个参考链接),由于赵老师用的noetic版本,而我用的是melodic版本,细节上可能会有所差异。
ROS中的基本通信机制主要有如下三种实现策略:
话题通信(发布订阅模式)
服务通信(请求响应模式)
参数服务器(参数共享模式)
话题通信
理论模型
话题通信实现模型是比较复杂的,该模型如下图所示,该模型中涉及到三个角色:
ROS Master(管理者)
Talker(发布者)
Listener(订阅者)
ROS Master 负责保管 Talker 和 Listener 注册的信息,并匹配话题相同的 Talker 与 Listener,帮助 Talker 与 Listener 建立连接,连接建立后,Talker 可以发布消息,且发布的消息会被 Listener 订阅。
0.Talker注册
Talker启动后,会通过RPC在 ROS Master 中注册自身信息,其中包含所发布消息的话题名称。ROS Master 会将节 ...
ROS(二)基础
文档维护:Arvin
网页部署:Arvin
▶
写在前面:本文旨在记录学习ROS过程中的一些重要知识概念和遇到的错误问题。主要参考赵虚左老师的ROS课程(第一个参考链接),由于赵老师用的noetic版本,而我用的是melodic版本,细节上可能会有所差异。
ROS基础知识
ROS文件基础架构
ROS文件系统指的是在硬盘上ROS源代码的组织形式,其结构大致可以如图所示:
12345678910111213141516171819202122232425262728293031WorkSpace --- 自定义的工作空间 |--- build:编译空间,用于存放CMake和catkin的缓存信息、配置信息和其他中间文件。 |--- devel:开发空间,用于存放编译后生成的目标文件,包括头文件、动态&静态链接库、可执行文件等。 |--- src: 源码 |-- package:功能包(ROS基本单元)包含多个节点、库与配置文件,包名所有字母小写,只能由字母、数字与下划线组成 |-- CMakeLists.txt 配置编译规则 ...