文章目录
工作空间是机器人的一项重要性能指标,其表征了当机器人所有关节进行所有可能的运动时,其末端坐标系原点能够到达的位置集合和姿态集合。
求解工作空间的前提是正确计算机器人的正运动学,本文选取六自由度串联机器人,Stanford机器人,机器人坐标系与D-H参数表如下,这里不再赘述。建模过程可参考机器人学相关书籍。

求解机器人工作空间的方法主要有图解法、解析法和数值法三种。
图解法是指根据机器人运动过程绘制机器人工作空间,该方法精确性较差且容易受到复杂结构的限制,主要在设计初期作方案对比时使用。解析法是根据机器人运动学约束关系,利用数学推导的方式得到机器人末端坐标系位姿关于各关节变量的数学解析表达式,这种方法虽然严谨,但是不具有直观性,并且对于关节数目较多的机器人求解过程较为繁琐。数值法是指按照特定的方法给定一定数目的关节变量值,运用运动学正解或逆解方程,求解这些关节变量对应的机器人末端坐标系位姿,典型的数值方法有网格法、Monte- Carlo法等。该方法虽然牺牲了一定的精度,但是计算效率高、易于图形化表达,是目前主要的工作空间求解方法。
本文选择Monte- Carlo法,其本质是随机遍历的方法。
求解工作空间时,需给定机器人的尺寸参数和各个关节的运动范围。
对于斯坦福机器人,给定初始参数为
d2=100
d6=80
d3=(10,30)
其余转动关节的角度范围均设定为-90度~+90度。
利用斯坦福机器人运动学正解求解工作空间,代码如下:
clear;
d2=100;
d6=80;
d3min=10;
d3max=30;
incr=0;
for Theta1=-pi:0.5:pi
for Theta2=-pi:0.5:pi
for d3=d3min:3:d3max
for Theta4=-pi:0.5:pi
for Theta5=-pi:0.5:0.8*pi
incr=incr+1;
PX(incr)=-sin(Theta1).*(d2+sin(Theta4).*sin(Theta5).*d6)+cos(Theta1).*(cos(Theta2).*cos(Theta4)*sin(Theta5)*d6+sin(Theta2)*(d3+cos(Theta5)*d6));
PY(incr)=cos(Theta1).*(d2+sin(Theta4).*sin(Theta5).*d6)+sin(Theta1).*(cos(Theta2).*cos(Theta4)*sin(Theta5)*d6+sin(Theta2)*(d3+cos(Theta5)*d6));
PZ(incr)=-cos(Theta4)*sin(Theta2)*sin(Theta5)*d6+cos(Theta2)*(d3+cos(Theta5)*d6);
end
end
end
end
end
plot3(PX,PY,PZ,'.b')
运行结果如下:
三维视图如下

X-Y平面视图如下:

X-Z平面示意图如下:

Y-Z平面示意图如下:

以上就是利用MATLAB求解串联机器人工作空间的源程序,如果有疑问欢迎在评论区讨论提问~
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳
这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request
在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
使用Ruby1.9.2运行IDE提示说需要gemruby-debug-base19x并提供安装它。但是,在尝试安装它时会显示消息Failedtoinstallgems.Followinggemswerenotinstalled:C:/ProgramFiles(x86)/JetBrains/RubyMine3.2.4/rb/gems/ruby-debug-base19x-0.11.30.pre2.gem:Errorinstallingruby-debug-base19x-0.11.30.pre2.gem:The'linecache19'nativegemrequiresinstall
matlab打开matlab,用最简单的imread方法读取一个图像clcclearimg_h=imread('hua.jpg');返回一个数组(矩阵),往往是a*b*cunit8类型解释一下这个三维数组的意思,行数、数和层数,unit8:指数据类型,无符号八位整形,可理解为0~2^8的数三个层数分别代表RGB三个通道图像rgb最常用的是24-位实现方法,即RGB每个通道有256色阶(2^8)。基于这样的24-位RGB模型的色彩空间可以表现256×256×256≈1670万色当imshow传入了一个二维数组,它将以灰度方式绘制;可以把图像拆分为rgb三层,可以以灰度的方式观察它figure(1
一、引擎主循环UE版本:4.27一、引擎主循环的位置:Launch.cpp:GuardedMain函数二、、GuardedMain函数执行逻辑:1、EnginePreInit:加载大多数模块int32ErrorLevel=EnginePreInit(CmdLine);PreInit模块加载顺序:模块加载过程:(1)注册模块中定义的UObject,同时为每个类构造一个类默认对象(CDO,记录类的默认状态,作为模板用于子类实例创建)(2)调用模块的StartUpModule方法2、FEngineLoop::Init()1、检查Engine的配置文件找出使用了哪一个GameEngine类(UGame