提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
TODO:写完再整理
文章目录
本文先对机械臂轨迹规划、跟踪控制方向做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章
提示:以下是本篇文章正文内容
类比的,我们可以把机械臂的轨迹规划理解成无人机的轨迹规划,在三维平面进行规划
二无人车的规划多使用二维平面进行规划
路径规划的思想和上述文章介绍大同小异
.
类比的,无人车的控制更偏向于执行路径的跟踪方向,机械臂的控制更偏向于带有模型约束的执行末端轨迹跟踪方向,无人机的控制更偏向于质点模型的飞行轨迹跟踪方向
无论是机械臂、无人机还是无人车,本质上还是二维和三维轨迹的跟踪问题
核心的控制思想还是PID控制器、基于模型的控制器等等,详见控制相关专栏
.
复杂机器人系统(人形机器人、多足机器人和移动物体的机械臂等)【防盗标记–盒子君hzj】的运动规划轨迹和控制是富有挑战性的问题,机器人不仅需要时刻控制多个关节的自由度,还需要处理和环境物体之间的接触、摩擦以及碰撞,这些环境交互给机器人系统带来了非常复杂的运动约束。近年来基于优化的轨迹规划方法在很多机器人系统上得到了成功的应用
复杂的机器人系统通常是高自由度,欠驱动,非线性系统,【防盗标记–盒子君hzj】复杂的机器人系统会发生和环境的交互,特别是摩檫力和碰撞,轨迹规划和轨迹控制都必须通过记载计算机实时进行
.
.
.
【1】目的
根据动力学方程、机器人的约束和机器人生成起始点A终止点B,得到目标运动轨迹曲线【防盗标记–盒子君hzj】
【2】挑战
解决如何通过单个关节的运动实现机器人特定肢体的位移
【3】机器人约束类型
(1)机器人关节执行器的位置、速度、力矩约束
(2)机器人多个关节运动可能会被约束要耦合在一起
(3)一段时间内消耗的能量为定值
【4】轨迹规划的要求
(1)实时性:轨迹规划运行的求解速度必须达到20hz或者50hz,以便进行MPC或者满足控制的频率
(2)准确性:轨迹规划尽量精确的符合约束条件
(3)最好能解出轨迹规划的反馈控制器,反馈控制器能提高控制的稳定性【防盗标记–盒子君hzj】
.
.
.
【1】目的
根据目标运动轨迹曲线,得到机器人系统期望输入的控制量
【2】挑战
对每个关节进行独立的PID控制不一定能够实现整体的轨迹执行目标
.
.
用经典力学分析的质点系统

1)例子一:下落的球

2)例子二:倒立摆小车
3)多足机器人在复杂地形上的动力学模型【防盗标记–盒子君hzj】

.
.
.
把复杂机器人的非线性系统进行线性化,【防盗标记–盒子君hzj】得到线性化的动力学方程(y=kx+b)表征原始的动力学方程,降低建模维度和计算量,提高实时性


非线性系统的线性化精度依赖于参考点的选取【防盗标记–盒子君hzj】,偏离参考点太远时,线性化方程会不准确
.
.
【通过控制u0,使得O=f(x0,u0)的问题及求解】
【通常使用代价函数来描述】

.
.
.

.
.
.

.
.
.

.
.

.
.
(1)能获得最优的轨迹,也能活得最优的反馈控制器
(2)局部LQR问题的求解可以并行化计算,【防盗标记–盒子君hzj】能达到非常高的求解速度
(1)需要较好的初始化轨迹
(2)比较难考虑额外的约束

.
.
波士顿动力机器采用Direct Collocation作为机器人的云顶规划方法,在线生成轨迹和处理约束
直接配点法(Direct Collocation)放弃获得反馈控制器,将轨迹上的每一时刻的状态和控制量看作一个非线性化优化问题的决策变量
,通过成熟的非线性优化领域的技术来处理约束

.
.
.
(1)六足机器人的状态和控制量表述

(2)六足机器人构建非线性与优化问题构建
1)先把机器人在两点之间的运动轨迹全都看做决策变量
2)再构建非线性优化问题,【防盗标记–盒子君hzj】将运动的约束表示为优化问题的等式约束或者不等式约束
如下所示:

.
.
.
1)机器人给定的起始位姿和终止位姿【这两个位姿可以通过机器人上电初始化得到】

2)足尖受到的地面作用力必须处在一个摩擦锥内,这样才能保证避免租佃打滑

3)机器人在运动过程中,腿在swing和stance两个模式切换导致了腿在不同时刻会受到不同的约束,其中:
swing mode:腿在腾空状态,足端上的受力必须是

stance mode:腿在支撑状态,足端的运动速度必须是

4)直接配点法中最重要的约束:【防盗标记–盒子君hzj】对于运动轨迹上两个相邻的点,两个点之间的差必然等于动力学方程在两个时刻之间的积分量

.
.
.
(1)问题引入
上面构建出来的优化问题仅仅适合用于公式表述,并不适合求解,因为假设多足机器人有200条腿(N=200),决策变量的维度是13200,维度太高,计算机时计算不出来的

(2)把轨迹表示成分段的多项式形式,决策变量
并不是轨迹上的点,而是多项式的系数

优点:
(1)大大减少了优化问题的维度
(2)自然地保证了运动的平滑性
(3)自然低加入约束条件
.
.
(3)直接配点法(Direct Collocation)优点
(1)可以处理任意高精度系统的动力学方程
(2)可以处理非常复杂的约束条件
*(4)直接配点法(Direct Collocation)缺点
(1)只能解出运动轨迹,不能获得反馈控制器
(2)非线性优化算法对于有些问题可能非常低效
.
.
.
这是是增强强化学习的基础,是近年来发展的新的轨迹规划方法
将轨迹规划看作最大后验概率估计问题,【防盗标记–盒子君hzj】建立最优控制和概率估计之间的联系



内置了RRT实现的各种算法(把算法打包成了库直接用就行)
官网链接:https://ompl.kavrakilab.org/
官网链接:https://moveit.ros.org/
https://industrial-training-master.readthedocs.io/en/melodic/_source/session4/Motion-Planning-CPP.html
贝塞尔曲线\B样条、正弦余弦函数拟合、多项式函数拟合
.
.
.
选用经典的摆线函数来规划足式机器人足端的摆动轨迹,【防盗标记–盒子君hzj】规划的摆动轨迹为开环形式,以抬腿时刻所在的位置为起点,以规划的目标着地点为终点
设摆动轨迹坐标可得:

式中,hd为期望的抬腿高度(曲线弧顶高),并且有:
其中hd为摆动相的持续时间(对于p=0.5的 trot 步态,有Tsw=Tst=0.5T,T为步态周期),t∈[0,Tsw]为摆动运动的实时时间并在每次抬腿时刻重设为 0。这样规划得到的开环摆动轨迹不是连续循环的轨迹形式,【防盗标记–盒子君hzj】每一步都是根据抬腿瞬间机器人的状态进行重新规划,避免将上一步的运动误差带入下一步的抬腿运动中
.
摆线函数缺点
使用摆线函数规划摆动轨迹只适用于平坦路面及较平缓的不平地形复杂地形
【四足机器人–摆动相足端位置速度轨迹规划】(4.1)FootSwingTrajectory(bezier曲线计算脚的摆动轨迹)代码解析
【四足机器人–关节初始化时足端位置(速度、加速度)轨迹规划】(4.2)JPosInitializer(B样条曲线计算脚的摆动轨迹)代码解析
.
.
当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少
我正在使用Ruby2.1.1和Rails4.1.0.rc1。当执行railsc时,它被锁定了。使用Ctrl-C停止,我得到以下错误日志:~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`gets':Interruptfrom~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`verify_server_version'from~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.
我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新rubygems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems
说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时
在我的Character模型中,我添加了:字符.rbbefore_savedoself.profile_picture_url=asset_path('icon.png')end但是,对于数据库中已存在的所有角色,它们的profile_picture_url为nil。因此,我想进入控制台并遍历所有这些并进行设置。在我试过的控制台中:Character.find_eachdo|c|c.profile_picture_url=asset_path('icon.png')end但这给出了错误:NoMethodError:undefinedmethod`asset_path'formain:O
当我进入Rails控制台时,我已将pry设置为加载代替irb。我找不到该页面或不记得如何将其恢复为默认行为,因为它似乎干扰了我的Rubymine调试器。有什么建议吗? 最佳答案 我刚发现问题,pry-railsgem。忘记了它的目的是让“railsconsole”打开pry。 关于ruby-on-rails-带有Pry的Rails控制台,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/question
我正在尝试将$stdout设置为临时写入一个文件,然后返回到一个文件。test.rb:old_stdout=$stdout$stdout.reopen("mytestfile.out",'w+')puts"thisgoesinmytestfile"$stdout=old_stdoutputs"thisshouldbeontheconsole"$stdout.reopen("mytestfile1.out",'w+')puts"thisgoesinmytestfile1:"$stdout=old_stdoutputs"thisshouldbebackontheconsole"这是输出。r
我在思考流量控制的最佳实践。我应该走哪条路?1)不要检查任何东西并让程序失败(更清晰的代码,自然的错误消息):defself.fetch(feed_id)feed=Feed.find(feed_id)feed.fetchend2)通过返回nil静默失败(但是,“CleanCode”说,你永远不应该返回null):defself.fetch(feed_id)returnunlessfeed_idfeed=Feed.find(feed_id)returnunlessfeedfeed.fetchend3)抛出异常(因为不按id查找feed是异常的):defself.fetch(feed_id
我真的只是不确定这意味着什么或我应该做什么才能让网页在我的本地主机上运行。现在它只是显示一个错误,上面写着“我们很抱歉,但出了点问题。”当我运行railsserver并在chrome中打开localhost:3000时。这是控制台输出:StartedGET"/users/sign_in"for127.0.0.1at2013-07-0512:07:07-0400ProcessingbyDevise::SessionsController#newasHTMLCompleted500InternalServerErrorin55msNoMethodError(undefinedmethod`
在Rails控制台中执行类似yGrau.all的命令时,我得到这些奇怪的!binary字符串而不是属性名称。知道如何解决这个问题吗?谢谢。irb(main):003:0>yGrau.all←[1m←[36mGrauLoad(0.0ms)←[0m←[1mSELECT"graus".*FROM"gr←[1m←[35mEXPLAIN(0.0ms)←[0mEXPLAINQUERYPLANSELECT"grauEXPLAINfor:SELECT"graus".*FROM"graus"0|0|0|SCANTABLEgraus(~1000000rows)----!ruby/object:Grauat