关于本文
身边的同学多专注于算法与代码结构的设计,对硬件方面了解不多,在调试过程中普遍都是拿网上类似功能模型进行调试,这在整个机器人研发测试过程中就会有短板,本文主要整理这两天所查阅资料,记录下网上没有明确总结过的硬件部分开发流程.
言归正传
笔者个人电脑配置:
Windows10:
Solidworks 2017
[机械结构设计],导出urdf描述文件,STL类型表面文件,材质以及cmakelists等编译文件
Matlab 2018b
[仿真],使用机器人仿真工具包(在探索)
V-Rep PRO EDU
[仿真],查看.urdf,.dar(COLLADA)文件的meshes(怎么仿真还不会,好像潜力很大)
blender 2.8
[机械结构设计,渲染],可以编辑stl,dae等文件,缺点是用在机器人方针需要手写urdf…
Ubuntu 18.04:
ROS-Melodic
[支持也还可以,遇到的兼容性问题不多]
Gazebo 9.1
, RViz
等
VSCode
包含bracket-pair-colorizer c/c++ easy-shell local-history python todo-tree shell-format插件.
Attention: 淘宝客服明确跟我强调blender多用于3D动画制作
,想要机器人设计一步到位还是用SW 用SW 用SW
,不过最后还是用blender设计好并且改写成了urdf格式,也算比较圆满吧.
github所给模型/meshes多为.dae
、.obj
+.mtl
或者.stl
文件
1-需要提前导入到blender
中适度优化后转化成.stl
文件(单个部件保存,不用组装)
2-使用Rhino加载.stl
文件另存为.3dm
类型文件(SW可编辑)
3-进而加载.3dm
到Solidwork
的[元件]工程中,另存为.SLDPRT
类型文件
4-solidwork中新建[装配体]工程,将.SLDPRT
类型元件组装好
5-最后通过SolidWorks to URDF Exporter
插件导出.urdf
文件
最后手动修改成.urdf.xacro
,yeah!
此处还是特别感谢:陈冬林同学提供思路,并且多次很晚开机帮我测试文件,下面附带佬项目图:)
探索过程
SDF和URDF都是基于XML的机器人描述格式。区别在于URDF只能描述单个机器人的运动和动态属性,而无法描述环境信息,也不支持多机器人、闭链(并联)机器人;SDF是相对更新的格式,它可以包含从世界环境到机器人属性相关的全部信息,且支持闭链结构。
尽管SDF格式具备更明显的优点,Gazebo官方也主推SDF格式,甚至已经下架了部分关于URDF的教程。但到目前为止,大多数网络上能找到的中文ROS教程仍然是基于URDF的,部分插件工具也只支持URDF。因此,在选择机器人描述格式时,如果对自己的开发能力有信心且有长期做Gazebo仿真开发的打算,或必须要用到闭链结构的机器人,推荐使用SDF格式;如果是刚入门的新手,还是建议采用教学资源更加丰富的URDF/XACRO格式建立自己的机器人。
1-solidwork2017链接教程,感谢佳林的baiduyun会员
2-使用solidwork导出URDF,导出目录下生成包含URDF文件、网格文件、材质文件等
urdf文件中部分参数解释,代码部分通过上面的345可以,简易的urdf模型是通过出版的机器人模型在简化建构之后根据DH参数法建模来建立的坐标系并通过solidworks生成了相应的ros package,部分参数如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<visul>描述机器人link部分的外观参数,如size,color,shape等
<inertial>描述link的惯性参数
<collosion>描述link的碰撞属性
<origin>描述位置
<axis>旋转方向
固定关节:fixed,不允许运动
转动关节:revolute,类似与continus,有旋转角度极限
滑动关节:prismatic,沿着某一轴线运动的关节,带有位置极限
浮动关节:floating,运行进行平移,旋转运动
平面运动关节:planner,允许在平面正交方向上平移或旋转
旋转关节:continus,可以绕某轴线无限旋转
<calibration>关节的参考位置,用来校准关节的绝对位置
<dynamics>描述关节的物理属性,例如阻尼值,物理静摩擦力等
<limit>描述运动的一些极限值,包括关节运动的上下限极限位置、速度限制、力矩限制等
<mimic>描述该关节与已有关节的关系
<safety_controller>描述安全控制器参数
这时候学完urdf文件的编写之后总是感觉很迷糊,好像哪里缺了什么东西使得整个流程连贯不起来.
为什么常见的格式都是.xacro,两种文件之间又该怎么转换?
xacro文件转换成urdf文件
1
2
$ rosrun xacro xacro --inorder model.urdf.xacro > model.urdf
$ rosrun xacro xacro.py model.xacro > model.urdf
urdf文件转换成xacro文件
solidwork导出的/urdf包复制到工作空间内,新建myrobot_description.urdf.xacro文件,并 参考进行修改即可.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?xml version="1.0"?>
<robot name="myrobot_description" xmlns:xacro="http://www.ros.org/wiki/xacro">
<!-- 原myrobot_description.urdf文件的内容 -->
<!-- Transmissions for ROS Control -->
<xacro:macro name="transmission_block" params="joint_name">
<transmission name="tran1">
<type>transmission_interface/SimpleTransmission</type>
<joint name="${joint_name}">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="motor1">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
<mechanicalReduction>1</mechanicalReduction>
</actuator>
</transmission>
</xacro:macro>
<!-- 添加关节名 -->
<xacro:transmission_block joint_name="base_link_to_link_02"/>
<xacro:transmission_block joint_name="link_02_to_link_03"/>
<xacro:transmission_block joint_name="link_03_to_link_04"/>
<xacro:transmission_block joint_name="link_04_to_link_05"/>
<xacro:transmission_block joint_name="link_05_to_link_06"/>
<xacro:transmission_block joint_name="finger_joint"/>
<!-- ros_control plugin -->
<gazebo>
<plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so">
<robotNamespace>/myrobot_description</robotNamespace>
</plugin>
</gazebo>
</robot>
当然这只是文件格式
上靠上了xacro,具体的应该仔细学学roswiki关于xacro语法的介绍,毕竟这么费劲改成了xacro格式就是为了以后调参
能够方便一点.
几种文件形式的使用
.obj
+.mtl
->blender
->.dae
/.stl
参考
.obj
/.stl
/.dae
->VREP
(import mesh)->.ttm
参考
.stl
->solidwork
->.urdf
- 存放obj格式文件的地方一般还会有同名的mtl格式文件,obj存放的是几何定义,mtl存放的是材质,直接导入obj,关联的mtl也会导入了,导入后按”Alt + z”来开启texture shading就可以看到有材质的模型了。另外blender界面太棒了…
多图预警
所以接下来几天打算专注一下blender的学习,大致确定一下建模方向,记录一下需要注意的地方以及遇到的几个问题。
g 移动物体 [gg 沿环线移动]
ctrl+r 添加循环边 [拓扑学]
编辑模式下--
i 内嵌面
e 挤出 [侧描轮廓(添加背景图,添加镜像),内凿]
shift+d 选中面后倒角
shift+s 在选中的面上放光标--改变物体初始位置--shift+a后s缩放即可准确放置
表面细分:在容器内进行物体填充,多用于制作边缘柔顺的物体--床垫 枕头
镜像:复杂的对称性物体--小车 步枪
问题一
缩放的比例:使用其他人工程中的物体调整好大小后会发现比例并不对,这样导出的零件格式不统一,再次使用的时候大小方向都恢复到原来的比例重新调节费时费力,所以在导出dae文件的时候应该重新设置比例大小,并且将位置初始化.
1、将调整好大小角度的物体X
放置在原点,xyz比例非1.
2、创建新的立方体,调整大小把物体X
完全罩住.
3、选中立方体,添加布尔工具,操作为交集,对物体X
作用并应用.
4、删掉原来物体X
,给新的模型添加其他属性即可.
问题二
物体的原点
设置:一个小黄点
物体的合并、编辑等均会使原点出现偏移,然而机械设计讲究精密,所以出图的时候一定要将其回归到物体合理的位置上,并且将xyz+rpy均归零单独导出供urdf调用(物体->原点->质心)
问题三
使用贴图功能
参考32分钟部分步骤方法,下面总结部分未提及的内容:
1、选中要贴图的部分,添加材料属性并指定,注意
基础色采用纹理的图像纹理选项,加载所要贴的图片
2、编辑模式下选择要贴图的面,快捷键u
将面展开
,然后打开uvediting界面
3、使用s
g
等常规操作进行位置的调整即可
成果
视频链接
https://youtu.be/Ssp2Lw6Yzzw
本文中使用blender对m100结构等进行二次精确开发设计,各个零件的导出文件以及设计工程已经放在了Github,算是整合了好几个工程中有用的部分,后面会跟同伴创建Organizations将工程一起放进去Github.