Monthly Archives: October 2020

xacro

本文完全照搬https://blog.csdn.net/sunbibei/article/details/52297524 Xacro (XML Macros) Xacro is an XML macro language. XACRO文件和URDF实质上是等价的. XACRO格式提供了一些更高级的方式来组织编辑机器人描述. 主要提供了三种方式来使得整个描述文件变得简单. 借用在教程中一句话来形容xacro的优势: “Fortunately, you can use the xacro package to make your life simpler”. 3.1 Constants Usage: <xacro:property name=”WIDTH” value=”2.0″/> 类似于C语言中的宏定义, 在头部定义, 如<xacro:property name=”WIDTH” value=”2.0″/>, 以${WIDTH}的方式进行使用. 经常会看到的一个常量定义, <property name=”PI” value=”3.14159265″ />. 还有定义一个前缀, 这样后面关节名都可以方便的进行修改. 比如<property name=”prefix” value=”my_”/>, 后面关节名字就可以类似的进行更新. <joint name=”${prefix}joint1″ type=”revolute”/>. 在有了上面的常量定义之后, 类似于宏定义, 完成字符串替换, 同时还可以进行一些简单的数学运算. Usage: ${1/2}, ${PI*(WIDTH*0.5)} 3.2 Macros…

Read More

urdf

本文完全照搬具体参照https://www.guyuehom e.com/372 Unified Robot Description Format,简称为URDF(标准化机器人描述格式),是一种用于描述机器人及其部分结构、关节、自由度等的XML格式文件。 一、URDF语法规范 参见:XML 基础学习 二、URDF教程 如下图所示,本节将创建一个如下图所示结构的机器人模型。 2.1 基础模型 上图所示是一个树形机器人模型,我们先从机器人的整体结构出发,不考虑过多的细节,可以将机器人通过如下的URDF表示: 上边的URDF模型定义了机器人的4个环节(link),然后定义了三个关节(joint)来描述环节之间的关联。 ROS为用户提供了一个检查URDF语法的命令: 如果一切正常,将会有如下显示: 2.2 添加机器人尺寸 在基础模型之上,我们为机器人添加尺寸大小。由于每个环节的参考系都位于该环节的底部,关节也是如此,所以在表示尺寸大小时,只需要描述其相对于连接的关节的相对位置关系即可。URDF中的<origin>域就是用来表示这种相对关系。 例如,joint2相对于连接的link1在x轴和y轴都有相对位移,而且在x轴上还有90度的旋转变换,所以表示成<origin>域的参数就如下所示: 为所有关节应用尺寸: 再次使用check_urdf检查通过后继续下一步。 2.3 添加运动学参数 如果我们为机器人的关节添加旋转轴参数,那么该机器人模型就可以具备基本的运动学参数。 例如,joint2围绕正y轴旋转,可以表示成: 同理,joint1的旋转轴是: 应用到我们的URDF中: 继续使用check_urdf检查语法错误。 2.4 图形化显示URDF模型 如果你希望以图形的方式来查看它,那么可以使用urdf_to_graphiz命令工具: 此命令将生成两个文件:my_robot.gv 和 my_robot.pdf。可以使用 evince 打开: 然后即可看到图形化的URDF:

Shell与kernel

作者:大宽宽链接:https://www.zhihu.com/question/35382632/answer/803711006来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 shell是什么? 操作系统对外提供的接口是“系统调用”,也就是一堆编程用的接口。这些接口一般以C函数的形式暴露给使用者。通过这些接口,开发者可以命令操作系统“启动一个进程”,“查找某个目录下的所有文件”,“将某个文件的权限配置为744”等等。 实际上我们平时编程用的是对系统调用的包装,比如libc里的那些库函数。但无论如何,你总是得写代码才能使用它们。 问题是我们平时使用电脑,不能每次都编写程序,再编译,再运行得到结果吧。比如你想知道一个目录下的所有文件,你肯定不会去写一段C代码,调用系统调用“readdir” (见http://www.man7.org/linux/man-pages/man3/readdir.3.html),然后gcc编译,然后运行。真这么干,一个最简单的工作也要耗费很长时间。况且,一个函数的返回是“数据结构”,或者输出到stdout或文件之类的地方。你总得以某种形式把结果“画”到界面上(不管是画字符还是画图片),才能查看那个结果。这个格式化输出的工作量也很大。 正常人的思路是先写好程序,然后弄个交互的界面方便使用这个程序。只要使用者敲一组字符串,就可以调用之前写好的程序完成工作。比如我们会在命令行里输入“ls -Rl”这种字符串。这个字符串被翻译成“ls”,“-R”,“-l”。“ls”帮我们找到那个之前写好的程序,并启动它;“-R”和“-l”被作为参数传给这个程序,告诉程序走“递归所有子目录”+“输出长格式”这部分代码。 这个负责把用户输入的字符串转换到需要执行的程序,并把结果以某个形式画出来的东西,就叫做“Shell”,即帮你更方便使用操作系统接口的“壳”。这个词与操作系统内核(Kernel)对应。 在Linux中,bash负责按照某种格式把用户的输出的字符串翻译,比如对于普通非空字符翻译为程序和参数,并尝试去PATH里找对应的程序。例如 对“空格”翻译成分隔符; 对“$XXX”尝试进行环境变量的替换; 对“|”翻译为管道; 对 “>”翻译为输出重定向; 对一个指令末尾的“&”翻译为将程序转到后台执行…… 更多Special Characters and Quoting for shell 另一方面终端将stdout、stderr输出的东西画成我们可以看的一坨坨字符,包括字符、字体、颜色、换行、甚至响铃。 【bash】 + 【终端】大概可以理解为一个以字符为交互方式的“Shell”。 当然,大家会更习惯上说“bash”是一个“Shell”。也许是因为bash大家用的不爽可以换,可以改变配置,可以编程。总之玩法很多。但是对终端一般不怎么理会,默认的就够用了。或者也可以理解为“终端“属于操作系统的一部分。不管如何,可以习惯这些不同角度的不同看法,不需要特别细纠,理解大概意思就好。 除了bash,还有像csh,zsh等,虽然各自的规定有些区别,但干的事情就是这些。Windows里一般等价的就是cmd,与Linux这边相比弱鸡得很。不过Windows有自己的PowerShell,也可以通过cygwin或者linux subsystem的方式使用bash。 如果你自己定义一个解析字符串的“Shell”,你可以规定用分号而不是空格做分隔符;用#而不是$代表变量…… Shell也可以做成图形界面的,比如你点击一个窗口里左边的一个目录图标,右边就展示这个目录下的所有文件。他做的事情和上面ls一模一样,只不过接受的是点击,而不是输入字符串;输出的是一幅画,而不是格式化的文本而已。内部还是转换成调用系统调用来完成工作。 如果你开心,你甚至都把Shell可以做成声控的,比如你说一段语音,你的“Shell”识别后翻译为调用程序的指令,执行成功后就可以把结果翻译为语音再返回给你。你一定熟悉“小爱同学”,“Hi Siri”这种东西吧。 Shell的思想很普遍,并不一定限制在操作系统上。比如你自己写一个程序,有大量复杂的参数和配置。为了使用方便可以写个命令行工具将一个命令翻译成对这段程序的调用。你写的命令行工具就是你自己程序的“Shell”。比如写Java的同学肯定很熟悉mvn。一句mvn install可以产生出成百上千个下载、压缩、编译、清理、测试、上传等api的调用;使用数据库的同学也会用SQL来表达自己的查询,让数据库的“Shell”解释成对存储引擎各种api的调用。 怎么check你用哪个shell?

python与Conda

python从哪里找已经安装的library How does Python know where to find packages when you call import? Python imports work by searching the directories listed in sys.path. 具体我们可以在terminal通过以下code将路径打出来 你可以添加别的路径 python的library都安装在哪里 当你跑如下命令时,scipy被放在sys.path的哪个路径? Python usually stores its library (and thereby your site-packages folder) in the installation directory.在terminal 查看python安装在哪里: 出来的结果是 The default library would reside in C:\Python\Lib\ and third-party modules should be stored in…

Read More

ROS, MoveIt, and OMPL

注意注意:本文基于的版本是ROS melodic(Melodic是基于python2) 第一步:环境setup,全部follow此tutorial的步骤 创建catkin的workspace, 以及安装moveit(从源代码安装) 我们要下载两个ROS packages,剩下的tutorial全是通过启动这两个包来进行的(注意一个ROS package下面可以有多个ROS node,需要指明启动ROS的哪个package里面的哪个node) 第一个ROS包:ROBOT_moveit_config,用来定义robot的;默认的机器人是Panda arm from Franka Emika,所以默认的定义的机器人ROS包是panda_moveit_config, panda代替了ROBOT。 第二个ROS包:下载ROS包moveit_tutorials。 build一下ws_moveit(你的workspace) 第二步:创建自己的机器人config package(有自己的机器人的必要步骤) 即自己的 robot_moveit_config package, 参考the MoveIt Setup Assistant tutorial. 第三步:Visualize a robot with the interactive motion planning plugin for RViz(非必要的步骤) 可视化机器人,并在rviz上有可交互的页面。Rviz是ROS最重要的可视化工具,MoveIt通过他支持的rviz插件,可以实现交互式选取start state与goal state, 测试motion planning等等。 运行roslaunch panda_moveit_config demo.launch rviz_tutorial:=true用于启动panda_moveit_config的ROS包,里面会启动planning_context.launch(用于加载描述robot的信息),启动move_group.launch(moveit的可运行程序),启动moveit_rviz.launch(启动rviz), 如果是第一次启动panda_moveit_config的ROS包,那么你会打开rviz,并有一个空的enviroment,没有机器人。我们需要添加motion planning的插件. 加完该motion planning插件,panda机器臂就出现在环境中。同时我们要对motion planning这个插件做一些关于robot的configuration。另外关于可视化,我们可以设置哪些项目是可见的,有四个东西可以显示。 机器人周围的环境(包括障碍物什么的,scene robot) 规划的路径(planned…

Read More