自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 收藏
  • 关注

原创 3.3 价值迭代(value iteration)算法

刚刚的例子很简单,在状态转移图中没有“环”,因此我们可以从末状态开始,计算他的价值,然后回到开始状态。然而,如果环境中有“环”,会给我们带来麻烦:求s1,s2s_1,s_2s1​,s2​的价值?每个episode的奖励顺序是[1,2,1,2,1,2,1,2,…][1,2,1,2,1,2,1,2,…][1,2,1,2,1,2,1,2,…]。V(s1)=∑i=0∞γ2i+2γ2i+1=1+γ(2+γ(1+γ(2+⋯ )))V\left( s_1 \right) =\sum_{i=0}^{\infty}{

2022-01-12 10:32:49 1325

原创 2.4 FrozenLake使用cross-entropy方法

FrozenLake是gym的另一个grid world环境。其环境简单的栅格地图,有四种栅格状态,分别用字母SFHG表示,下面是一个地图的例子:SFFF (S: starting point, safe)FHFH (F: frozen surface, safe)FFFH (H: hole, fall to your doom)HFFG (G: goal, where the frisbee is located)...

2022-01-12 10:27:32 679

原创 2.3 CartPole-v0使用cross-entropy方法

所有代码,可能会因为gym,pytorch甚至python版本的更迭输出可能会不同甚至可能失效,不要因为代码失效而刻意选择特定版本的库,最关键的是理解算法的本质和编程语言的基本特性CartPole-v0相当于是gym中的Hello world环境在python中创建该环境import gymenv = gym.make('CartPole-v0')查看智能体可用的actionenv.action_space---输出是:Discrete(2)也就是说action是离散的值,且只能在r

2022-01-10 21:10:57 1752

原创 Ubuntu vscode不能提示和自动补全虚拟环境的包

解决方法:在终端中激活所需的虚拟环境后用命令打开vscode即可

2021-12-30 21:59:47 474

原创 3.2 动作价值函数

之前介绍的Bellman方程实际上是状态价值函数,V(s)V(s)V(s)。除此之外我们还可以定义动作价值函数Q(s,a)Q(s, a)Q(s,a),即在状态s执行动作a所获得的总奖励,Q(s,a)Q(s, a)Q(s,a)可以通过V(s)V(s)V(s)来定义,同时也是Q-learning的基础。我们的主要目标是获得每对state和action的Q值。Q(s,a)=Es′∼S[r(s,a)+γV(s′)]=∑s′∈Spa,s→s′(r(s,a)+γV(s′))Q\left( s,a \right) =

2021-12-29 14:02:06 2177

原创 3.1 贝尔曼(bellman)方程

假设智能体观测到状态s0s_0s0​,并且有NNN个可用action,每个action都会导致另一种状态,及相应的奖励。另外,假设我们知道与状态s0相连的所有状态的价值ViV_iVi​。在这种情况下,智能体可以采取的最佳行动是什么?如果选择动作aia_iai​,价值为V0(a=ai)=ri+ViV_0(a=a_i)=r_i+V_iV0​(a=ai​)=ri​+Vi​,如果要选择最佳动作,既要保证aia_iai​满足V0=max⁡a∈1,⋯ ,N(ra+Va)V_0=\max_{a\in1,\cdots,

2021-12-29 10:08:00 1200

原创 2.2 cross-entropy

交叉熵(cross-entropy)是model-free,policy-based,on-policy的强化学习方法。也就是说:不对环境建模估计智能体的策略需要从环境中获得新的数据我们举个例子,注意不同episode的oi,ai,rio_i,a_i,r_ioi​,ai​,ri​是不同的,为了简单起见,取γ=1\gamma=1γ=1每一个单元格都代表了智能体在episode中的每一步。由于环境的随机性和智能体根据概率分布抽样选择动作的方式,某些episode会比其他的更好。cross-ent

2021-12-27 21:32:19 342

原创 2.1 强化学习分类

无模型(Model-free) or 有模型(model-based)Model-free意味着该方法不建立环境或奖励的模型;它直接将observation和action连接起来。相反,model-based试图预测下一次observation和/或reward,基于这一预测,智能体选择最佳行动,通常会多次做出预测,来预测更远的未来。这两类方法都有各自的优点和缺点,但通常在确定性环境中使用model-based方法,例如有严格规则的棋类游戏。另一方面,Model-free方法通常更容易训练,因为很难对复

2021-12-27 12:47:48 138

原创 1.3 马尔可夫过程

之前介绍的奖励、智能体、动作、观察和环境可以看成RL的一级概念。以此为基础,我们将探索RL的二级概念,包括状态(state)、事件(episode)、历史(history)、价值(value)和收益(gain)。我们从最简单的马尔可夫过程(MP)开始,然后加入奖励(reward)扩展它,变成马尔可夫奖励过程(Markov reward process)。然后添加行动(action),实现马尔可夫决策过程(Markov decision processes,MDP)。...

2021-12-26 15:14:28 665

原创 1.2 定义

下图显示了两个主要的RL实体——智能体和环境,及其通信通道——动作、奖励和观测。奖励(Reward)让我们回到奖励的概念上来。在RL中,它只是我们定期从环境中获得的标量值。如前所述,奖励可以是正数或负数,大或小,但它只是一个数字。奖励的目的是说明智能体表现得有多好。我们没有定义智能体多久收到一次奖励;它可以是智能体生命周期中的每一秒或仅仅只有一次,尽管通常的做法是在每个固定的时间戳或在每个环境交互时收到奖励。在有些系统中(如once-in-a-lifetime reward systems),除最后一

2021-12-25 16:59:59 1573

原创 1.1 xxxx

为了训练强化学习(RL)智能体(Agent),我们需要一个类似于监督学习中使用的数据集的学习环境。学习环境是一个模拟器,它为RL Agent提供观测(observation),支持RL Agent执行的一组动作,返回动作导致的结果和新的观测。Gridworld是一个简单的环境,其中世界表示为网格。网格上的每个位置都可以称为单元。在此环境中,Agent的目标是在网格中找到到达目标状态的路径,如下所示:...

2021-12-25 16:59:26 1067

翻译 (翻译)Decision-Making in Driver-Automation Shared Control

人机共驾(Shared Control)中的决策:回顾和展望摘要共享控制框架可以让人类驾驶员与自动驾驶智能体一起工作,同时保持驾驶员的控制能力。人类驾驶员作为人机共驾系统中的重要主体,需要对其认知过程、控制策略和决策过程进行精确建模。由于人的内在特性,驾驶员与自动驾驶智能体之间的交互策略设计给以人为中心的驾驶辅助系统带来了极大的挑战。出现了许多开放式问题,比如人类驾驶员在共享控制框架中扮演什么适当的角色?如何在共享控制框架中做出能够平衡智能体收益的智能决策?由于这些关注点和问题的出现,我们有必要对人类驾

2021-05-28 16:58:42 2488

原创 1.2 状态空间描述

输入输出描述我们建立了一个描述线性系统零状态响应的数学方程。假设初始状态为零,输出只由输入决定。考虑一个SISO线性系统。如图所示的单位脉冲信号表达式为u(t)=δΔ(t−t1)u(t)=\delta_\Delta(t-t_1)u(t)=δΔ​(t−t1​)。然后,每个输入u(t)u(t)u(t)都可以用如图所示的一系列脉冲来近似。因此,输入u(t)u(t)u(t)可以近似表示为u(t)≈∑iu(ti)δΔ(t−ti)Δu\left( t \right) \approx \sum_i{u\le

2021-01-04 08:48:59 349 1

原创 1.1 因果性和集总参数、线性系统

如果一个系统接受连续时间信号作为输入,并产生连续时间信号作为它的输出,那么它就被称为连续时间系统。单个输入用小写斜体 u(t)u\left( t \right)u(t) 表示,多个输入用黑体u(t)\mathbf{u}\left( t \right)u(t)表示。如果系统有ppp个输入,则u(t)\mathbf{u}\left( t \right)u(t)是一个p×1p×1p×1向量或u=[u1u2⋯]′\mathbf{u}=\left[ \begin{matrix} u_1& u_2&

2021-01-03 11:00:21 553

原创 ROS-安装

ros(这里都是指ros1)版本对应:ubuntu 16.04 — kineticubuntu 18.04 — melodic(看完整篇文章了再安装)ros官网的安装教程是最权威的:https://www.ros.org/install/,进去后选择相应版本即可,安装的时候,我就遇到一个坑,也是以前我们实验室一哥们遇到过的:The following packages have unmet...

2020-05-08 07:39:15 194

原创 ROS-1.1-基本概念

ROS 的核心是node之间的通信。node(节点)是使用 ROS 中继设备通信的 ROS 程序。一个 node 的启动是独立于其他 node 的,而且 node 启动的顺序是任意的。在一台计算机上可以运行多个 node,node 也可以分布式地运行在计算机网络上。一个 node 能真正体现其价值的时候是与其他 node 通信的时候。node 之间的通信又包括这些概念:topic(话题),mes...

2020-05-07 20:41:54 395

原创 机器人的自由度

自由度的定义为:描述空间运动的刚体所需要的独立变量的个数(最大为6)。由于有时机械臂的轴的数量与自由度之间的关系较为模糊,故在下面稍做说明。机构学是机械工程学的基础,它包括机构运动分析(analysis of mechanisms)和机构综合(synthesis of mechanisms)。在构成机构的要素中,不存在相对运动的部分称为构件(link),两个以上构件相互约束且能够相对运动时,就形...

2020-05-04 21:44:10 11240

原创 机器人学(MATLAB机器人工具箱10.x)——4.1-雅克比矩阵(1)

我们首先研究关节坐标的微小变化如何影响末端执行器的位姿。使用齐次坐标变换表示位姿,我们可以通过一个一阶微分近似得到位姿相对于关节坐标的导数:dTdq≈T(q+δq)−T(q)δq\dfrac{\text{d}T}{\text{d}q}\approx\dfrac{T(q+\delta_q)-T(q)}{\delta_q}dqdT​≈δq​T(q+δq​)−T(q)​根据 TTT 的定义,可以得...

2020-05-03 17:12:30 4795

原创 机器人学(MATLAB机器人工具箱10.x)——3.6-画字母

我们的目标是让机器人绘制字母“B”。机器人工具箱自带了一种 hershey 字体>> load hershey>> B = hershey{'B'};我们可以查看B里面是啥>> B.strokeans = 列 1 至 9 0.1600 0.1600 NaN 0.1600 0.5200 0.6400 ...

2020-05-03 08:18:16 1922 1

原创 机器人学(MATLAB机器人工具箱10.x)——3.5-特殊问题

关节角偏移机器人的零关节角位姿往往是某个很不寻常的(甚至是机械无法实现的)位姿。对于 Puma 机器人,其零角度位姿就呈现出一种不是很明显的 L 形状,机器人的上臂水平,下臂垂直向上,如图所示。这一结果是由机器人的 D-H 参数形式所决定的。机器人的控制设计人员可能会选择零关节角位姿为一些更为明显的位形。关节坐标偏移提供了一种机制,它使我们可以设置任意位形作为零关节坐标。偏移向量 q0q_0...

2020-05-02 23:08:50 1406

原创 机器人学——3.4-轨迹规划

机器人学中最常见的要求之一,是把机器人末端执行器平滑地从位姿 AAA 移动至位姿 BBB。基于之前讨论过的轨迹的内容,我们将讨论两种方法来产生轨迹:在关节空间中的直线和在笛卡儿空间中的直线。这两种直线分别被称为关节空间运动和笛卡儿空间运动。关节空间运动我们考虑末端执行器在两个笛卡儿位姿之间移动:>> T1 = transl(0.4, 0.2, 0) * trotx(pi);&g...

2020-05-02 17:33:56 4313

原创 OpenCV 3-2.4-工具函数

cv::alignPtr()template<T> T* cv::alignPtr( // 返回T*类型指针 T* ptr, // 指针声明 int n = sizeof(T) // 指向内存的大小,为2的整数次幂大小);给定任意类型的指...

2020-05-01 13:43:54 519

原创 OpenCV 3-2.3-辅助类

除了基本类型和大型容器之外,还有一系列辅助对象对于控制各种算法(如终止条件)或对容器执行各种操作(如“range”或“切片”)非常重要。还有一个非常重要的对象,智能指针对象cv::Ptr。cv::TermCriteria 类许多算法需要一个停止条件。通常,停止条件要么是有限迭代次数(称为COUNT或MAX_ITER),要么是某种错误参数,基本上就是说,“如果误差都这么小了,可以退出了”(称为E...

2020-05-01 12:12:54 353

原创 OpenCV 3-2.2-进一步了解 OpenCV 基本数据类型

每个基本类型实际上都是一个相对复杂的对象,包括自己的接口函数、重载操作符等。在本节中,我们将更全面地了解每种类型,以及一些看似相似的类型之间有何不同。我们将学习它们重要的接口,但不会深入到每一个具体的细节实现。我们将根据例子进行说明。point 类在 OpenCV 基本类型中,point 类可能是最简单的。如前所述,这些都是基于模板结构实现的,因此可以有任何类型的点:整数、浮点等等。实际上有两...

2020-05-01 08:47:52 329

原创 OpenCV 3-2.1-基本数据类型概览

最基本的数据类型是模板类cv::Vec<>,这是一个原生容器类,我们将其称为 fixed vector 类。为什么不直接使用STL类呢?主要区别在于,fixed vector 类适用于其尺寸在编译时已知的小向量。这使得操作小变量的时候更加高效。后面我们将介绍cv::Mat类,它是处理任意维数的大型数组的类型,但是现在,可以认为固定的向量类对于小的数据量来说是方便快捷的。cv::Vec...

2020-04-30 20:53:16 239

原创 OpenCV 3-1.6-写入AVI文件

在许多应用程序中,我们希望将流输出到视频流,而OpenCV提供了相关的对象cv::VideoWriter。我们可以将每一帧流传输到cv::VideoWriter对象,最后调用其cv::VideoWriter.release()方法。下面的程序展示了一个对输入视频做对数极坐标变换的例子。#include <opencv2/opencv.hpp>#include <iostrea...

2020-04-30 16:42:58 158

原创 OpenCV 3-1.5-读取摄像头

OpenCV,或者更具体地说,OpenCV的HighGUI库-为我们提供了一种处理这种情况的简单方法。该方法类似于我们从磁盘读取视频的方式,因为cv::VideoCapture对象对于磁盘上或摄像机上的文件的工作方式相同。对于前者,您可以为其指定路径/文件名,对于后者,您可以为其指定摄像机ID(如果只有一个摄像机连接到系统,则通常为0)。默认值是-1,意思是“只选一个”#include <...

2020-04-30 16:19:07 129

原创 OpenCV 3-1.4-简单的图像变换

我们来做一种特别简单的图像操作——平滑图像,其通过将图像与高斯或其他类似核函数卷积来减少图像的信息量。#include <opencv2/opencv.hpp>void example1_4(const cv::Mat &image){ cv::namedWindow("input", cv::WINDOW_AUTOSIZE); cv::namedWin...

2020-04-30 16:11:35 134

原创 OpenCV 3-1.3-加载视频

使用 OpenCV 播放视频也很简单简单。我们需要用循环来按顺序读取每一帧;也需要某种方法来提前退出播放。#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp>#include <string>int main(int argc, char const *...

2020-04-29 18:39:02 150

原创 OpenCV 3-1.2-第一个程序

OpenCV 提供了用于读取各种图像文件类型以及视频和相机的函数。这些函数是名为HighGUI的工具包的一部分。我们将使用其中的一些函数来创建一个简单的程序,该程序可以打开图像并将其显示在屏幕上#include <opencv2/opencv.hpp>int main(int argc, char const *argv[]){ cv::Mat img = cv::im...

2020-04-29 16:54:20 111

原创 OpenCV 3-1.1-头文件

在安装 OpenCV 库并设置我们的编程环境之后,我们首先讨论的是头文件。最主要头文件是opencv2/opencv.hpp;它调用了其他每个 OpenCV 模块的头文件:老版本的 C 语言数据结构和算法:#include "opencv2/core/core_c.h"新的C++数据结构和算法:#include "opencv2/core/core.hpp"近似最近邻匹配函数:#i...

2020-04-29 16:34:56 199

原创 安装ROS报错:The following packages have unmet dependenctes:

在software&update里面把所有的更新都打开,再sudo apt update再安装即可,安装完后如果rosdep init或者rosdep update失败,报错为各种网站打不开什么的,很有可能是因为github被墙了,自己想办法吧...

2020-04-28 10:29:03 460

原创 机器人学——3.3-逆运动学

上一节已经展示了机械臂的正运动学求解方法,即在给定关节坐标以及可选工具和基座变换的条件下,如何确定末端执行器的位姿。实际应用中的另一个问题是运动学的逆问题:给定期望的末端执行器位姿 ξE\xi_EξE​,如何求取所需的关节坐标?例如,如果我们知道一个物体的笛卡儿坐标位姿,那么机器人需要什么样的关节坐标才能接近这个物体?这就是逆运动学问题,写成函数形式如下:q=K−1(ξ)q=\mathcal...

2020-04-28 10:22:19 8809 9

原创 机器人学——3.2-正运动学

机械臂的正运动学通常表述为如下的函数形式:ξE=K(q)\xi_E=\mathcal{K}(q)ξE​=K(q)它表明末端执行器的位姿是基于关节坐标的一个函数。若使用齐次变换,其表达式将是由之前推导的连杆坐标系变换矩阵方程所给的单个连杆变换矩阵 j−1Aj^{j-1}A_jj−1Aj​ 的简单乘积。对于一个 NNN 轴机械臂,有ξE∼0TE=0A11A2⋯N−1AN\xi_E\sim{}...

2020-04-26 19:43:11 5639 3

原创 机器人学——3.1-机械臂DH参数

运动学是力学的一个分支,它在不考虑质量和作用力的前提下研究一个刚体,或者由多个刚体组成系统的运动。一个串联机械臂是由多个连杆和运动副组成的运动链。通过运动副的连接,一个连杆能相对于另一个连杆做相对运动。运动链的一端,即机械手的基座,通常上是固定不动的,而运动链另一端上一般有夹持工具或者末端执行器,可以在空间中自由运动。一个串联机械臂的整个链路是由一组被称为连杆的刚体组成的,这些连杆由关节(运动副...

2020-04-26 11:43:07 4647

原创 机器人学——2.4-坐标系的旋转和运动增量

我们已经讨论了如何产生坐标系的运动,其中包含平移和旋转两部分。平移速度代表了坐标系原点位置的变化率,而旋转速度则要更复杂一些。旋转坐标系物体在三维空间中旋转时有一个角速度向量ω=(ωx,ωy,ωz)\omega=(\omega_x, \omega_y, \omega_z)ω=(ωx​,ωy​,ωz​)。这个向量的方向定义了瞬时转动轴,即在某个特定时间点坐标系旋转所绕的轴。通常情况下,这个轴是随...

2020-04-26 10:12:27 1888 1

原创 机器人学——2.3-姿态插值和笛卡尔运动

之前我们提到mstraj函数并不是不是对坐标系旋转进行插值的理想方式。在机器人学中,我们经常需要对姿态进行插值。例如,我们需要机器人的末端执行器平滑地从姿态 ξ0\xi_0ξ0​ 和改变到 ξ1\xi_1ξ1​。假设某个函数 ξ(s)=σ(ξ0,ξ1,s)\xi(s)=\sigma(\xi_0, \xi_1, s)ξ(s)=σ(ξ0​,ξ1​,s),其中 s∈[0,1]s\in[0,1]s∈[0...

2020-04-26 07:57:19 3180

原创 机器人学——2.2-分段轨迹

机器人应用中经常要求机器人平滑地沿一条路径运动,并不停顿地经过一个或多个中间节点。这样做或许是要在工作空间中避开障碍物,也可能是为了执行一项需要高精度连续轨迹的任务,如在制造业中要涂抹一圈密封胶。为了使问题一般化,考虑该轨迹含有 NNN 个中间点 xkx_kxk​,k∈[1,N]k\in [1, N]k∈[1,N],因此有 N−1N-1N−1 个运动段。由上节可知,x∈R"x∈R"x∈R" 是位...

2020-04-25 21:17:18 1324

原创 机器人学——2.1-轨迹

一条路径只是一个空间结构——空间中从初始位姿过渡到最终位姿的一个图形。而轨迹是具有特定时间属性的一条路径。例如,从 AAA 到 BBB 是路径,但如果规定了 101010 秒的时间或 2m⋅s−12 m\cdot s^{-1}2m⋅s−1 的速度,则变成从 AAA 到 BBB 的轨迹。轨迹的一个重要特征是要平滑——位置和姿态随时间流畅地变化。平滑一维轨迹我们从时间的标量函数开始讨论。这种函数的...

2020-04-24 20:48:07 1159 1

原创 机器人学——1.10-位置与姿态总结

点由坐标系的坐标向量表示。一个刚体上的一组点可以用一个坐标系描述,而且其组成点可由相对于刚体坐标系的位移表示。任何坐标系相对于另一个坐标系的位置和方向,可用相对位姿 ξ\xiξ 表示。相对位姿可以按顺序组合(合成或复合),并且我们还演示了相对位姿如何进行代数运算的操作方法。一个重要的代数运算法则是运算变量不可交换——相对位姿组合的顺序不可交换。我们已经在二维和三维的情况下探讨过用正交旋转矩阵表示...

2020-04-24 15:46:53 1733

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除