• kuka协作机器人LBR系列 issy15R930导入到ros2_rviz(带外观文件)


         kuka协作机器人LBR系列 issy15R930导入到ros2_rviz(带外观文件)外观文件未调整好,外观仍需进一步研究,外观文件dae与轮廓(碰撞)文件STL并未完全对应起来。在blender里面看了一下UR机器人的文件,是对应的,本人导出的两种文件总是存在各中角度差。需要进一步研究。

        本文参考了以下两篇文章,和UR的包,本文未详细论述的地方,也可以按参考文章中的相关章节进行操作。

    【ROS2机器人入门到实战】RVIZ2可视化移动机器人模型_rviz移动模型-CSDN博客

    Solidworks模型转换到URDF格式并配置Moveit的详细教程_sw_urdf_exporter将soildwork的模型导为urdf文件怎么安装-CSDN博客 如何下载kuka机器人模型,可以在xpert上注册账号下载,也可以联系本人帮忙下载。

    1.solidworks安装sw2urdf插件

    Releases · ros/solidworks_urdf_exporter · GitHub

    我用的solidworks是2023版SP5,经过验证,该sw2urdf插件是完全可以使用的。

     安装好后,还不太好找在哪里,具体位置如上图

    2.solidworks安装导出dae文件的插件

    Simlab 3D Plugins - Collada exporter for SolidWorks

     这个插件要收费,不过可以试用一个月。安装好后如下图

    3.建立机器人模型的轴和坐标系

    在建立坐标系的时候可以先隐藏相关的组件,按下图建立六个轴的基准轴和坐标系,底座也要建立一个坐标系。

        可以使用两点生成轴,也可以通过一个圆心点和那个圆面生成。效果都差不多。我都是建在凹坑里面,建到凸台上也是可以的。 建好后如下图

    4.sw2urdf插件配置

    这些个都要写,不要搞成自动生成,差别太大,不行的。

     

     

     

    load configuration..是指你导出后,在urdf文件中有个CSV文件,可以选用上次的配置。因为每次进来都是自动生成轴,想修改很麻烦,每次都点击这么多。

    点击Preview and export..按钮,导出前进行确认和配置,关键类型选择有限旋转的这个。如果不配置角度的话,rviz中轴操作无法进行。怎么配置这个角度,可以参考下一节。

     这里面的颜色就保持默认就好,好像改了也没有太大效果。点击导出urdf和meshes文件即可。

    导出后大概就是这样的,如下图。 

     

    5.轴关节限值配置

    在kuka xpert上下载MA_LBR_iisy_zh.pdf这个文件,不会下载的可以找我要。在目录里面找到issy15R930轴数据。

    把这个相关的角度计算成弧度,第一个185就是185/360*3.14=1.61,其他的类似。

    第四步导出模型的时候要跟这个图片的零点位置差不多,这些角度就是上图的姿态为零点的。

    6.建立ros2编译文件工程

     6.1建pyhton格式的文件工程

    ros2 pkg create issy15r930 --build-type ament_python 

     

     在生成的工程目录里面复制meshes和urdf文件从第四步得到的那个文件,launch文件夹是自己建的,可以用命令,也可以界面上直接操作,怎么方便怎么来。

    6.2 lauch文件说明

     就搞了这么一个launch文件,里面比较重要的就是urdf_name这一条,主要要跟urdf中的对应。

    1. import os
    2. from launch import LaunchDescription
    3. from launch.substitutions import LaunchConfiguration
    4. from launch_ros.actions import Node
    5. from launch_ros.substitutions import FindPackageShare
    6. def generate_launch_description():
    7. package_name = 'issy15r930'
    8. urdf_name = "issy15r930.urdf"
    9. ld = LaunchDescription()
    10. pkg_share = FindPackageShare(package=package_name).find(package_name)
    11. urdf_model_path = os.path.join(pkg_share, f'urdf/{urdf_name}')
    12. robot_state_publisher_node = Node(
    13. package='robot_state_publisher',
    14. executable='robot_state_publisher',
    15. arguments=[urdf_model_path]
    16. )
    17. joint_state_publisher_node = Node(
    18. package='joint_state_publisher_gui',
    19. executable='joint_state_publisher_gui',
    20. name='joint_state_publisher_gui',
    21. arguments=[urdf_model_path]
    22. )
    23. rviz2_node = Node(
    24. package='rviz2',
    25. executable='rviz2',
    26. name='rviz2',
    27. output='screen',
    28. )
    29. ld.add_action(robot_state_publisher_node)
    30. ld.add_action(joint_state_publisher_node)
    31. ld.add_action(rviz2_node)
    32. return ld

    6.3 meshes文件说明

    dae文件怎么导出,见第7节说明,和STL放一个文件夹就行。不用太费事。主要是urdf文件中要写对文件地址就好。

    6.4 urdf文件说明

    这个名字要和launch文件里面对应。

    1. "1.0" encoding="utf-8"?>
    2. <robot
    3. name="issy15r930">
    4. <link
    5. name="base_link">
    6. <inertial>
    7. <origin
    8. xyz="3.7076E-05 -0.018098 0.082416"
    9. rpy="0 0 0" />
    10. <mass
    11. value="7.2283" />
    12. <inertia
    13. ixx="0.052936"
    14. ixy="2.5994E-05"
    15. ixz="-5.0195E-05"
    16. iyy="0.040376"
    17. iyz="0.0027943"
    18. izz="0.051987" />
    19. inertial>
    20. <visual>
    21. <origin
    22. xyz="0 0 0"
    23. rpy="0 0 0" />
    24. <geometry>
    25. <mesh
    26. filename="package://issy15r930/meshes/base_link.dae" />
    27. geometry>
    28. <material
    29. name="">
    30. <color
    31. rgba="0.79216 0.81961 0.93333 1" />
    32. material>
    33. visual>
    34. <collision>
    35. <origin
    36. xyz="0 0 0"
    37. rpy="0 0 0" />
    38. <geometry>
    39. <mesh
    40. filename="package://issy15r930/meshes/base_link.STL" />
    41. geometry>
    42. collision>
    43. link>
    44. <link
    45. name="link1">
    46. <inertial>
    47. <origin
    48. xyz="0.0082771 -0.010407 0.10376"
    49. rpy="0 0 0" />
    50. <mass
    51. value="6.0436" />
    52. <inertia
    53. ixx="0.034011"
    54. ixy="0.00069966"
    55. ixz="-0.0020617"
    56. iyy="0.033685"
    57. iyz="0.0026113"
    58. izz="0.030166" />
    59. inertial>
    60. <visual>
    61. <origin
    62. xyz="0 0 0"
    63. rpy="0 0 0" />
    64. <geometry>
    65. <mesh
    66. filename="package://issy15r930/meshes/link1.dae" />
    67. geometry>
    68. <material
    69. name="">
    70. <color
    71. rgba="0.79216 0.81961 0.93333 1" />
    72. material>
    73. visual>
    74. <collision>
    75. <origin
    76. xyz="0 0 0"
    77. rpy="0 0 0" />
    78. <geometry>
    79. <mesh
    80. filename="package://issy15r930/meshes/link1.STL" />
    81. geometry>
    82. collision>
    83. link>
    84. <joint
    85. name="joint1"
    86. type="revolute">
    87. <origin
    88. xyz="0 0 0.172"
    89. rpy="0 0 0" />
    90. <parent
    91. link="base_link" />
    92. <child
    93. link="link1" />
    94. <axis
    95. xyz="0 0 1" />
    96. <limit
    97. lower="-1.61"
    98. upper="1.61"
    99. effort="0"
    100. velocity="0" />
    101. joint>
    102. <link
    103. name="link2">
    104. <inertial>
    105. <origin
    106. xyz="-0.035772 0.16784 0.08072"
    107. rpy="0 0 0" />
    108. <mass
    109. value="10.123" />
    110. <inertia
    111. ixx="0.26037"
    112. ixy="0.048481"
    113. ixz="0.0009505"
    114. iyy="0.043052"
    115. iyz="-0.0044562"
    116. izz="0.27629" />
    117. inertial>
    118. <visual>
    119. <origin
    120. xyz="0 0 0"
    121. rpy="0 0 0" />
    122. <geometry>
    123. <mesh
    124. filename="package://issy15r930/meshes/link2.dae" />
    125. geometry>
    126. <material
    127. name="">
    128. <color
    129. rgba="0.79216 0.81961 0.93333 1" />
    130. material>
    131. visual>
    132. <collision>
    133. <origin
    134. xyz="0 0 0"
    135. rpy="0 0 0" />
    136. <geometry>
    137. <mesh
    138. filename="package://issy15r930/meshes/link2.STL" />
    139. geometry>
    140. collision>
    141. link>
    142. <joint
    143. name="joint2"
    144. type="revolute">
    145. <origin
    146. xyz="0.058615 -0.074125 0.126"
    147. rpy="1.5708 0 0.66908" />
    148. <parent
    149. link="link1" />
    150. <child
    151. link="link2" />
    152. <axis
    153. xyz="0 0 1" />
    154. <limit
    155. lower="-2"
    156. upper="0.43"
    157. effort="0"
    158. velocity="0" />
    159. joint>
    160. <link
    161. name="link3">
    162. <inertial>
    163. <origin
    164. xyz="0.020571 -0.0055652 0.093536"
    165. rpy="0 0 0" />
    166. <mass
    167. value="4.3819" />
    168. <inertia
    169. ixx="0.018095"
    170. ixy="0.0010427"
    171. ixz="-0.0029257"
    172. iyy="0.021705"
    173. iyz="0.00078561"
    174. izz="0.018661" />
    175. inertial>
    176. <visual>
    177. <origin
    178. xyz="0 0 0"
    179. rpy="0 0 0" />
    180. <geometry>
    181. <mesh
    182. filename="package://issy15r930/meshes/link3.dae" />
    183. geometry>
    184. <material
    185. name="">
    186. <color
    187. rgba="0.79216 0.81961 0.93333 1" />
    188. material>
    189. visual>
    190. <collision>
    191. <origin
    192. xyz="0 0 0"
    193. rpy="0 0 0" />
    194. <geometry>
    195. <mesh
    196. filename="package://issy15r930/meshes/link3.STL" />
    197. geometry>
    198. collision>
    199. link>
    200. <joint
    201. name="joint3"
    202. type="revolute">
    203. <origin
    204. xyz="-0.080235 0.37655 0.0255"
    205. rpy="3.1416 0 0" />
    206. <parent
    207. link="link2" />
    208. <child
    209. link="link3" />
    210. <axis
    211. xyz="0 0 1" />
    212. <limit
    213. lower="-1.3"
    214. upper="1.3"
    215. effort="0"
    216. velocity="0" />
    217. joint>
    218. <link
    219. name="link4">
    220. <inertial>
    221. <origin
    222. xyz="-0.0527 0.0075768 0.11883"
    223. rpy="0 0 0" />
    224. <mass
    225. value="4.3253" />
    226. <inertia
    227. ixx="0.031922"
    228. ixy="0.001207"
    229. ixz="0.012121"
    230. iyy="0.040091"
    231. iyz="-0.0017531"
    232. izz="0.019873" />
    233. inertial>
    234. <visual>
    235. <origin
    236. xyz="0 0 0"
    237. rpy="0 0 0" />
    238. <geometry>
    239. <mesh
    240. filename="package://issy15r930/meshes/link4.dae" />
    241. geometry>
    242. <material
    243. name="">
    244. <color
    245. rgba="0.79216 0.81961 0.93333 1" />
    246. material>
    247. visual>
    248. <collision>
    249. <origin
    250. xyz="0 0 0"
    251. rpy="0 0 0" />
    252. <geometry>
    253. <mesh
    254. filename="package://issy15r930/meshes/link4.STL" />
    255. geometry>
    256. collision>
    257. link>
    258. <joint
    259. name="joint4"
    260. type="revolute">
    261. <origin
    262. xyz="0.10722 -0.028729 0.12"
    263. rpy="1.5708 1.2545 1.309" />
    264. <parent
    265. link="link3" />
    266. <child
    267. link="link4" />
    268. <axis
    269. xyz="0 0 1" />
    270. <limit
    271. lower="-1.57"
    272. upper="1.57"
    273. effort="0"
    274. velocity="0" />
    275. joint>
    276. <link
    277. name="link5">
    278. <inertial>
    279. <origin
    280. xyz="0.012242 0.00015735 0.07472"
    281. rpy="0 0 0" />
    282. <mass
    283. value="2.4287" />
    284. <inertia
    285. ixx="0.0066893"
    286. ixy="-1.3173E-05"
    287. ixz="-0.00073951"
    288. iyy="0.007692"
    289. iyz="-9.693E-06"
    290. izz="0.0069254" />
    291. inertial>
    292. <visual>
    293. <origin
    294. xyz="0 0 0"
    295. rpy="0 0 0" />
    296. <geometry>
    297. <mesh
    298. filename="package://issy15r930/meshes/link5.dae" />
    299. geometry>
    300. <material
    301. name="">
    302. <color
    303. rgba="0.79216 0.81961 0.93333 1" />
    304. material>
    305. visual>
    306. <collision>
    307. <origin
    308. xyz="0 0 0"
    309. rpy="0 0 0" />
    310. <geometry>
    311. <mesh
    312. filename="package://issy15r930/meshes/link5.STL" />
    313. geometry>
    314. collision>
    315. link>
    316. <joint
    317. name="joint5"
    318. type="revolute">
    319. <origin
    320. xyz="-0.086604 0.012492 0.256"
    321. rpy="1.5708 -1.4484 1.4275" />
    322. <parent
    323. link="link4" />
    324. <child
    325. link="link5" />
    326. <axis
    327. xyz="0 0 1" />
    328. <limit
    329. lower="-0.95"
    330. upper="0.95"
    331. effort="0"
    332. velocity="0" />
    333. joint>
    334. <link
    335. name="link6">
    336. <inertial>
    337. <origin
    338. xyz="0.0099764 0.0026101 0.050237"
    339. rpy="0 0 0" />
    340. <mass
    341. value="1.366" />
    342. <inertia
    343. ixx="0.0022647"
    344. ixy="-0.00025613"
    345. ixz="-0.00021904"
    346. iyy="0.0031711"
    347. iyz="-5.7372E-05"
    348. izz="0.0035946" />
    349. inertial>
    350. <visual>
    351. <origin
    352. xyz="0 0 0"
    353. rpy="0 0 0" />
    354. <geometry>
    355. <mesh
    356. filename="package://issy15r930/meshes/link6.dae" />
    357. geometry>
    358. <material
    359. name="">
    360. <color
    361. rgba="0.79216 0.81961 0.93333 1" />
    362. material>
    363. visual>
    364. <collision>
    365. <origin
    366. xyz="0 0 0"
    367. rpy="0 0 0" />
    368. <geometry>
    369. <mesh
    370. filename="package://issy15r930/meshes/link6.STL" />
    371. geometry>
    372. collision>
    373. link>
    374. <joint
    375. name="joint6"
    376. type="revolute">
    377. <origin
    378. xyz="0.080493 0.0010481 0.0875"
    379. rpy="-1.5708 -1.5554 -1.5578" />
    380. <parent
    381. link="link5" />
    382. <child
    383. link="link6" />
    384. <axis
    385. xyz="0 0 1" />
    386. <limit
    387. lower="-1.91"
    388. upper="1.91"
    389. effort="0"
    390. velocity="0" />
    391. joint>
    392. robot>

    这个文件里面啊,视觉这块,要跟dae对应meshes文件里面的文件。其他的提示找不到的时候都要检查要对应的。7个link里面都是要修改过来的。 

    6.5 setup文件说明

    增加4跟5中的内容

    1. from setuptools import find_packages, setup
    2. from glob import glob
    3. import os
    4. package_name = 'issy15r930'
    5. setup(
    6. name=package_name,
    7. version='0.0.0',
    8. packages=find_packages(exclude=['test']),
    9. data_files=[
    10. ('share/ament_index/resource_index/packages',
    11. ['resource/' + package_name]),
    12. ('share/' + package_name, ['package.xml']),
    13. (os.path.join('share', package_name, 'launch'), glob('launch/*.launch.py')),
    14. (os.path.join('share', package_name, 'urdf'), glob('urdf/**')),
    15. (os.path.join('share', package_name, 'meshes'), glob('meshes/**')),
    16. ],
    17. install_requires=['setuptools'],
    18. zip_safe=True,
    19. maintainer='cheni',
    20. maintainer_email='cheni@todo.todo',
    21. description='TODO: Package description',
    22. license='TODO: License declaration',
    23. tests_require=['pytest'],
    24. entry_points={
    25. 'console_scripts': [
    26. ],
    27. },
    28. )

    7.导出dae文件

    需要单独打开某个零件,一个一个导出成dae格式,如下图。这个地方可能就是外观和轮廓模型不能对应一致的问题所在。urdf插件肯定处理了什么,这边不知道怎么对应。

     文件导出到urdf导出的meshes文件中即可,一起复制到虚拟机的工程目录中即可。

    8.编译调试

    用这个命令编译

    这个命令去引用

    这个命令去加载 

    效果如下:

    这个就是只有外观的模型,没太在一起,完全可以控制来回转。

     这个是这个碰撞的模型,这个urdf插件导出来的,是可以的,没有任何问题。

     两个一起显示就是这样的,外观文件没有对其碰撞文件

    9.问题分析

    打开ur机器人的dae文件和STL文件,是可以对应的,在blender里面,这个距离是我拉开的,导入是完全重合的。

     对比我导入的dae和stl模型,两者就不太对应。还需要进一步研究。

     测试了移动原点也是不行的,通过这个插件搞了一下工件中心的原点对齐,也是不行的。还需要进一步确认原因。

    xpert下载一次5元icon-default.png?t=N7T8https://item.taobao.com/item.htm?app=chrome&bxsign=scdqor6QWU28XNc9OWfCSkU-CHUI-AJuCDWIGWPTosGsbY2Hq5KZcxkBJDupu_V5lItJnPJnOciY07uys5r9R9Ywfte7ZaUVQ7ACg7y6MYkfdzRmk6S9w1zIPPabV-As4cP&cpp=1&id=769766514957&price=5&shareUniqueId=25609527507&share_crt_v=1&shareurl=true&short_name=h.5FtsLWRmcGNYWrz&sourceType=item,item&sp_abtk=gray_1_code_simpleAndroid2&sp_tk=UUdTcFdsMlhXRlQ=&spm=a2159r.13376460.0.0&suid=9815284f-7724-4861-b99f-05be8c53f351&tbSocialPopKey=shareItem&tk=QGSpWl2XWFT&un=8e550dfe9bde5d682040bd82ddc2e1ea&un_site=0&ut_sk=1.ZQ%20rL9czjnsDANpS6QQfKorD_21646297_1708938056189.Copy.1 

  • 相关阅读:
    企业电子招标采购系统源码Spring Boot + Mybatis + Redis + Layui + 前后端分离 构建企业电子招采平台之立项流程图
    【好文转载】曲线的切向量怎么求?和平面法向量的联系
    K8S存储总结&持久化存储解决方案(以NFS为例)
    电化学传感器使用-电子学角度分析
    Koordinator 协同 containerd NRI 增强容器 QoS,提升应用性能
    vue组件 data选项
    react的1.函数组件2.usestate3.useeffect4.ref5.fragment6.contex 代码加注释
    全球南方《乡村振兴战略下传统村落文化旅游设计》八一新枝——2023学生开学季许少辉瑞博士生辉少许
    java中需要加入依赖才能使用的注解
    智能化物流管理:全国快递物流查询API的角色与优势
  • 原文地址:https://blog.csdn.net/xiaoding_ding/article/details/136300168