SolidWorks机器转ROS2 URDF
文章目录
- 开发环境
- SolidWords插件使用
- 生成urdf文件之后的处理
- CMakeLists文件修改
- package.xml变更
- Launch更改
- 运行
开发环境
Linux系统:Ubuntu 22.04
Ros2版本:humble
Solidwords版本:2023 (2019以上版本应该都是可以的)
SolidWords插件:sw_urdf_exporter 下载
SolidWords插件使用
该功能已经有很多教程,这里不再累述。请移步此处链接
生成urdf文件之后的处理
CMakeLists文件修改
ROS2中已经没有catkin_make这样的工具,统一使用colcon来进行编译,可以看到cmake文件中包含了catkin_make。所以需要先更改此处的文件。更改之前的文件为
cmake_minimum_required(VERSION 2.8.3)project(QY2023-00019)find_package(catkin REQUIRED)catkin_package()find_package(roslaunch)foreach(dir config launch meshes urdf)install(DIRECTORY ${dir}/DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/${dir})
endforeach(dir)
需变更为,项目名与需要构建成的包名一致
cmake_minimum_required(VERSION 3.5)project(urdf_robot)find_package(ament_cmake REQUIRED)install(DIRECTORY images launch meshes rviz urdfDESTINATION share/${PROJECT_NAME}
)if(BUILD_TESTING)find_package(ament_lint_auto REQUIRED)ament_lint_auto_find_test_dependencies()
endif()ament_package()
package.xml变更
默认的报名直接使用3D模型的名称,这里主要是更改下包名称和版本,以及一些过时的依赖信息。sw导出的package.xml
<package format="2"><name>QY2023-00019</name><version>1.0.0</version><description><p>URDF Description package for QY2023-00019</p><p>This package contains configuration data, 3D models and launch files
for QY2023-00019 robot</p></description><author>TODO</author><maintainer email="TODO@email.com" /><license>BSD</license><buildtool_depend>catkin</buildtool_depend><depend>roslaunch</depend><depend>robot_state_publisher</depend><depend>rviz</depend><depend>joint_state_publisher_gui</depend><depend>gazebo</depend><export><architecture_independent /></export>
</package>
更改之后的,需要主要的是exec_depend项使用了urdf_launch。需要先下载编译安装运行这个包,链接地址
<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3"><name>urdf_robot</name><version>1.1.0</version><description>This package contains a number of URDF robot.</description><maintainer email="davidvlu@gmail.com">qhf</maintainer><license>BSD 3-clause</license><url>http://ros.org/wiki/urdf_tutorial</url><author email="davidvlu@gmail.com">David V. Lu!!</author><buildtool_depend>ament_cmake</buildtool_depend><exec_depend>urdf_launch</exec_depend><test_depend>ament_lint_auto</test_depend><export><build_type>ament_cmake</build_type><gazebo_ros gazebo_model_path="${prefix}/.."/></export>
</package>
这两项完成之后应当就能顺利使用colcon build编译,编译完成后记得source install里面的setup.bash的路径。最后可以使用ros2 pkg list 来检查下是否已经顺利将包安装到环境中。
Launch更改
使用sw_urdf_exporter插件导出的只有*.launch文件,所以需要自己写一个python的启动文件。我这里就直接参考了官方的urdf_tutorial的包,源码地址。记得切换下ROS2分支。以下是参考的display.launch.py文件,需要更改的部分已经用中文注释。新建这样的py文件放到导出的urdf文件夹中即可
from launch import LaunchDescription
from launch.actions import DeclareLaunchArgument, IncludeLaunchDescription
from launch.substitutions import LaunchConfiguration, PathJoinSubstitution
from launch_ros.substitutions import FindPackageShare
def generate_launch_description():ld = LaunchDescription()urdf_robot_path = FindPackageShare('urdf_robot') #urdf_robot更改为自己的包名default_model_path = PathJoinSubstitution(['urdf', 'QY2023-00019.urdf']) #QY2023-00019.urdf更改为自己的urdf文件default_rviz_config_path = PathJoinSubstitution([urdf_robot_path, 'rviz', 'urdf.rviz'])# These parameters are maintained for backwards compatibilitygui_arg = DeclareLaunchArgument(name='gui', default_value='true', choices=['true', 'false'],description='Flag to enable joint_state_publisher_gui')ld.add_action(gui_arg)rviz_arg = DeclareLaunchArgument(name='rvizconfig', default_value=default_rviz_config_path,description='Absolute path to rviz config file')ld.add_action(rviz_arg)# This parameter has changed its meaning slightly from previous versionsld.add_action(DeclareLaunchArgument(name='model', default_value=default_model_path,description='Path to robot urdf file relative to urdf_robot package'))ld.add_action(IncludeLaunchDescription(PathJoinSubstitution([FindPackageShare('urdf_launch'), 'launch', 'display.launch.py']),launch_arguments={'urdf_package': 'urdf_robot','urdf_package_path': LaunchConfiguration('model'),'rviz_config': LaunchConfiguration('rvizconfig'),'jsp_gui': LaunchConfiguration('gui')}.items()))return ld
运行
编译后,使用一下命令行即可运行
ros2 launch urdf_robot display.launch.py
其中urdf_robot为自己命名的包名,display.launch.py为上述所说的启动文件名。
运行之后还会报一个错误,此错误是由于.urdf文件路径描述ROS1中语法在ROS2中不能识别的原因,所以还需要做将.urdf中关于模型文件的路径更改。
更改前:
<geometry><meshfilename="package://QY2023-00019/meshes/base_link.STL" /></geometry>
更改后:
<geometry><meshfilename="file://$(find urdf_robot)/meshes/base_link.STL" /></geometry>
所有的路径都做这样的修改。然后重新编译运行即可。
相关文章:
SolidWorks机器转ROS2 URDF
文章目录 开发环境SolidWords插件使用生成urdf文件之后的处理CMakeLists文件修改package.xml变更Launch更改运行 开发环境 Linux系统:Ubuntu 22.04 Ros2版本:humble Solidwords版本:2023 (2019以上版本应该都是可以的)…...
(Linux驱动学习 - 6).Linux中断
一. Linux 中断 API 函数 1.中断号 每个中断都有一个中断号,通过中断号即可区分不同的中断,有的资料也把中断号叫做中 断线。在 Linux 内核中使用一个 int 变量表示中断号。 2.申请中断 - request_irq 函数原型: int request_irq(unsigne…...
SpringBoot驱动的明星周边产品电商解决方案
1系统概述 1.1 研究背景 如今互联网高速发展,网络遍布全球,通过互联网发布的消息能快而方便的传播到世界每个角落,并且互联网上能传播的信息也很广,比如文字、图片、声音、视频等。从而,这种种好处使得互联网成了信息传…...
C++、Ruby和JavaScript
C C最初被称为带类的C, 兼容C的语法,此既是C得以流行的前提,也是C某些语法被捆绑的根源。C的来源于C语言的递增运算符,代表增加,意义为扩展。 C的历史 C类的设计思想来源于Simula. Simula为模拟的意思,被称为最早的面向…...
32单片机 低功耗模式
以下是一个基于STM32的低功耗模式示例代码,展示如何将STM32微控制器置于低功耗模式,并在特定条件下唤醒它。这个示例使用的是STM32 HAL库。 ### 示例代码:进入睡眠模式并使用外部中断唤醒 c #include "stm32f4xx_hal.h" // 函数声明…...
501、二叉搜索树中的众数
1、题目描述 . - 力扣(LeetCode) 要求:给一个包含重复值的BST,找出并返回BST中的众数(出现频次最高的元素)。 注:如果树中有不止一个众数可以按任意顺序返回,即如果有多个众数多个都要返回。 ps࿱…...
【洛谷】P2330 [SCOI2005] 繁忙的都市 的题解
【洛谷】P2330 [SCOI2005] 繁忙的都市 的题解 题目传送门 题解 水最小生成树,发现可以水一堆黄题qaq 这题显然就是求最大边权最小的生成树,而用 Kruskal 很容易证明这就是最小生成树,考虑一下这个算法每次取的都是不构成环的最小边即可&a…...
第18场小白入门赛(蓝桥杯)
第 18 场 小白入门赛 6 武功秘籍 考察进制理解。 对于第 i i i 位,设 b i t i x bit_ix bitix ,每一位的最大值是 b j b_j bj ,也就是说每一位是 b j 1 b_j1 bj1 进制 ,那么第 i i i 位的大小就是 x ∑ j i 1…...
Redission · 可重入锁(Reentrant Lock)
前言 Redisson是一个强大的分布式Java对象和服务库,专为简化在分布式环境中的Java开发而设计。通过Redisson,开发人员可以轻松地在分布式系统中共享数据、实现分布式锁、创建分布式对象,并处理各种分布式场景的挑战。 Redisson的设计灵感来…...
初阶C语言-指针
1.指针是什么? 理解指针的两个要点: 1.指针是内存中一个最小单元的编号,也就是地址 2.口头语中说的指针,通常是指指针变量,是用来存放内存地址的变量 总结:指针就是地址,口语中说的指针通常是指…...
论文笔记:微表情欺骗检测
整理了AAAI2018 Deception Detection in Videos 论文的阅读笔记 背景模型实验可视化 背景 欺骗在我们的日常生活中很常见。一些谎言是无害的,而另一些谎言可能会产生严重的后果。例如,在法庭上撒谎可能会影响司法公正,让有罪的被告逍遥法外。…...
智能家居有哪些产品?生活中常见的人工智能有哪些?
智能家居有哪些产品? 1、智能照明设备类:智能开关、智能插座、灯控模块、智能空开、智能灯、无线开关。 2、家庭安防类:智能门锁、智能摄像机、智能猫眼、智能门铃。 3、智能传感器类:烟雾传感器、可燃气体传感器、水浸传感器、声光报警器…...
洗车行软件系统有哪些 佳易王洗车店会员管理系统操作教程#洗车店会员软件试用版下载
一、前言 【试用版软件下载可点击本文章最下方官网卡片】 洗车行软件系统有哪些 佳易王洗车店会员管理系统操作教程#洗车店会员软件试用版下载 洗车管理软件应用是洗车业务的得力助手,实现会员管理及数据统计一体化,助力店铺高效、有序运营。 洗车项…...
【Java】springboot 项目中出现中文乱码
在刚创建的springboot项目中,出现乱码,跟走着解决一下 1、Ctrl Shift S 打开idea设置,根据图片来,将③④这三个地方都修改为UTF-8 2、返回配置查看,解决...
开放式耳机是什么意思?漏音吗?开放式的运动蓝牙耳机推荐
目前运动耳机市场主要分为入耳式、骨传导和开放式三类。入耳式耳机占比30%-40%,虽目前占比较大,但因在运动场景下有闷塞感、出汗不适、屏蔽外界环境音带来安全隐患等缺点,占比会逐渐下降。 骨传导耳机占比也为30%-40%,其不堵塞耳…...
如何优雅的处理NPE问题?
1.什么是NPE? NPE,即NullPointerException,是开发中最常见的问题之一,有必要知道如何正确地处理NPE。 对于 Java 开发者来说,null 是一个令人头疼的类型,一不小心就会发生 NPE (空指针…...
k8s 中存储之 NFS 卷
目录 1 NFS 卷的介绍 2 NFS 卷的实践操作 2.1 部署一台 NFS 共享主机 2.2 在所有k8s节点中安装nfs-utils 2.3 部署nfs卷 2.3.1 生成 pod 清单文件 2.3.2 修改 pod 清单文件增加 实现 NFS卷 挂载的 参数 2.3.3 声明签单文件并查看是否创建成功 2.3.4 在 NFS 服务器 创建默认发布…...
Redis中BitMap实现签到与统计连续签到功能
服务层代码 //签到Overridepublic Result sign() {//1.获取当前登录的用户Long userId UserHolder.getUser().getId();//获取日期LocalDateTime now LocalDateTime.now();//拼接keyString keySuffix now.format(DateTimeFormatter.ofPattern(":yyyyMM"));String …...
【Spring】“请求“ 之传递 JSON 数据
文章目录 JSON 概念JSON 语法JSON 的语法JSON 的两种结构 JSON 字符串和 Java 对象互转JSON 优点传递 JSON 对象 JSON 概念 JSON:JavaScript Object Notation【JavaScript 对象表示法】 JSON 就是一种数据格式,有自己的格式和语法,使用文本…...
文心一言 VS 讯飞星火 VS chatgpt (359)-- 算法导论24.3 1题
一、在图 24-2上运行Dijkstra算法,第一次使用结点 s s s作为源结点,第二次使用结点 z z z作为源结点。以类似于图 24-6 的风格,给出每次while循环后的 d d d值和 π π π值,以及集合 S S S中的所有结点。如果要写代码,…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果。链条循环: Bean A → Bean…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏
一、引言 在深度学习中,我们训练出的神经网络往往非常庞大(比如像 ResNet、YOLOv8、Vision Transformer),虽然精度很高,但“太重”了,运行起来很慢,占用内存大,不适合部署到手机、摄…...
