首页 > 其他分享 >Solidworks导出urdf,在ros2中使用gazebo仿真教程

Solidworks导出urdf,在ros2中使用gazebo仿真教程

时间:2024-04-05 22:33:54浏览次数:14  
标签:Solidworks description launch urdf robot import gazebo ros2

1.前言

本人目前初学ros2,最近在实践ros2中的gazebo仿真,入门跟着鱼香ros老师和古月居老师来学习相关的知识,在gazebo仿真环节,发现教程里基本都是采用自写urdf来生成几何图像(圆柱、立方体)来组成简单的机器人,因此在后期仿真的真实性带来了一定的局限性,因此我最近在研究如何在ros2中成功的将Solidworks生成的urdf模型导入到gazebo中打开。

 在本文主要介绍在实践过程中遇到的问题,解决办法,以及整个流程,希望对大家有所帮助!

2.从Solidworks生成urdf模型

本节不过多讲解如何在Solidworks生成urdf模型,详细的可以参考以下我搜索到的文章生成urdf

这是生成的模型的完整的文件夹:

主要检查你的meshes文件夹是否包含了你所有的零件。

3.准备工作:urdf进入ros2中

拿到从SolidWork导出的urdf、meshes文件夹后,建立一个软件包,首先新建一个空白文件夹

我这里的文件夹名字为robot,随后新建一个src的文件夹,在此文件夹下新建一个Python的功能包

ros2 pkg create mybot_description --build-type ament_python

随后将你的生成的模型文件导入进该功能包之中,并且切记一定要更新以下urdf文件里的路径。

(CMakeLists.txt文件有些可能会出问题,在编译的时候有时候会出现问题,需要你自己去网上找一个相关的包来更改下配置内容),这里我们直接编译

colcon build

3.1 开始检验一下urdf模型(这一节是在学习过程中新学的,或许可能是关键)

检验urdf模型最后是否能够在gazebo里顺利的打开,我在别的博客里发现了这样一个工具Moveit,这个主要是用在机械臂的规划可能比较多,因为我这次仿真的主要是车,可能比较通用,所以有些配置可以暂时按照默认的配置去完成。

首先需要下载好MoveIt2,

sudo apt install ros-humble-moveit
sudo apt install ros-humble-moveit-setup-assistant

下载好后回到自己新建的工作空间,source一下,运行MoveIt2来配置一下。

$ source install/setup.sh 
$  ros2 run moveit_setup_assistant moveit_setup_assistant

详细配置可以参考教程鱼香ROS到这一步,如果右侧显示出没有正常的显示出来你所要的模型,那你需要检查一下你的setup.py文件是否把你新增的文件编译到install,还有开头的头文件。

直接跳转到生成功能包,我们学习其他博主,新建一个新的文件夹,mybot1

生成的包如下:

我第一次生成的时候缺少了这个玩意,然后我重新生成了一边就有了。

这里说一下注意细节,因为我最开始配置urdf习惯性的把所有的joint里都配置成fixed,造成了我在这一步生成的功能包无法正常的运行,还有不知道是不是邮箱写的不规范,,后来我把几个轮子改成了转动,就能正常的运行demo.py。

这里生成完毕后编译,运行demo.launch.py文件。

1.$ source install/setup.sh 
2.$ ros2 run moveit_setup_assistant moveit_setup_assistant

如果操作的没问题,应该能看到你的模型了,到此检查工作完毕,你的模型具备在gazebo打开的潜能!

3.2 开始编写gazebo的launch文件

参考古月居老师的代码,他的是打开xarco文件,我们这里只需要把urdf路径哪里更改成我的形式就行了.

mbot.launch.py

import os

from ament_index_python.packages import get_package_share_directory

from launch import LaunchDescription
from launch.substitutions import LaunchConfiguration
from launch.actions import DeclareLaunchArgument
from launch_ros.actions import Node

import xacro


def generate_launch_description():

    # Check if we're told to use sim time
    use_sim_time = LaunchConfiguration('use_sim_time')

    # Process the URDF file
    pkg_path = os.path.join(get_package_share_directory('mybot_description'))
    urdf_file = os.path.join(pkg_path, 'urdf', 'mbot_description.urdf')
    robot_description_config = xacro.process_file(urdf_file)
    
    # Create a robot_state_publisher node
    params = {'robot_description': robot_description_config.toxml(), 'use_sim_time': use_sim_time}
    node_robot_state_publisher = Node(
        package='robot_state_publisher',
        executable='robot_state_publisher',
        output='screen',
        parameters=[params]
    )


    # Launch!
    return LaunchDescription([
        DeclareLaunchArgument(
            'use_sim_time',
            default_value='false',
            description='Use sim time if true'),

        node_robot_state_publisher
    ])

gazebo.launch.py(该文件里有环境路径,可自己删掉,或者自己新建一个world文件,导入自己的环境)   

package_name='mybot_description' #<--- CHANGE ME

 world_file_path = 'world/neighborhood.world'

import os

from ament_index_python.packages import get_package_share_directory


from launch import LaunchDescription
from launch.actions import IncludeLaunchDescription
from launch.launch_description_sources import PythonLaunchDescriptionSource

from launch_ros.actions import Node


def generate_launch_description():


    # Include the robot_state_publisher launch file, provided by our own package. Force sim time to be enabled
    # !!! MAKE SURE YOU SET THE PACKAGE NAME CORRECTLY !!!

    package_name='mybot_description' #<--- CHANGE ME
    world_file_path = 'world/neighborhood.world'
    
    pkg_path = os.path.join(get_package_share_directory(package_name))
    world_path = os.path.join(pkg_path, world_file_path)  
    
    # Pose where we want to spawn the robot
    spawn_x_val = '0.0'
    spawn_y_val = '0.0'
    spawn_z_val = '0.0'
    spawn_yaw_val = '0.0'
  
    mbot = IncludeLaunchDescription(
                PythonLaunchDescriptionSource([os.path.join(
                    get_package_share_directory(package_name),'launch','mbot.launch.py'
                )]), launch_arguments={'use_sim_time': 'true', 'world':world_path}.items()
    )

    # Include the Gazebo launch file, provided by the gazebo_ros package
    gazebo = IncludeLaunchDescription(
                PythonLaunchDescriptionSource([os.path.join(
                    get_package_share_directory('gazebo_ros'), 'launch', 'gazebo.launch.py')]),
             )

    # Run the spawner node from the gazebo_ros package. The entity name doesn't really matter if you only have a single robot.
    spawn_entity = Node(package='gazebo_ros', executable='spawn_entity.py',
                        arguments=['-topic', 'robot_description',
                                   '-entity', 'mbot',
                                   '-x', spawn_x_val,
                                   '-y', spawn_y_val,
                                   '-z', spawn_z_val,
                                   '-Y', spawn_yaw_val],
                        output='screen')



    # Launch them all!
    return LaunchDescription([
        mbot,
        gazebo,
        spawn_entity,
    ])

随后编译,运行

colcon build
source install/setup.sh 
ros2 launch mybot_description gazebo.launch.py

然后你突然发现:啥也没有

这时候我就看到别的韭菜钟博主的相关文章,解决了这最后的问题,在你的urdf文件里把原先的

   <mesh filename="package://mybot_description/meshes/base_link.STL" />

 替换成

        <mesh filename="file://$(find mybot_description)/meshes/link1.STL" />

再来运行

 4.总结

目前在参加比赛,后续继续需要研究ros2的导航包使用,最终完成我们参赛作品的导航功能,期间会不定时的更新学习的内容。最后感谢黎同学大半夜推送给我相关文章

标签:Solidworks,description,launch,urdf,robot,import,gazebo,ros2
From: https://blog.csdn.net/Sixfourjie/article/details/137407041

相关文章

  • SOLIDWORKS二次开发参数化设计软件 慧德敏学
    SOLIDWORKS参数化设计软件-SolidKits.AutoWorks专为规格变化多、变化规律强的产品开发,将变化规律集成到三维设计软件,通过一键点击实现自动化产品再设计,如智能选型、自动化修改产品属性、产品参数、产品状态、图纸更新、重命名、并自动打包生成交付物。研发设计效率提升数倍。增强......
  • 【ROS2】机器人建模与仿真——建模入门(URDF+rviz2)
    refer:小鱼一.机器人建模采用URDF(UnifiedRobotDescriptionFormat)统一机器人描述格式,URDF使用XML格式描述机器人文件。通过代码的形式描述机器人的各个组件,以及组件之间的联动关系。1.URDF的组成1.1申明信息xml的申明信息<?xmlversion="1.0"?>机器人的申明信......
  • SOLIDWORKS二次开发的优势和价格 慧德敏学
    在当今数字化时代,各行各业都在不断追求创新和效率的提升。作为一款广泛应用于工程设计领域的软件,SOLIDWORKS在市场上占据着重要地位。然而,对于一些特定行业的用户来说,SOLIDWORKS的功能可能无法完全满足他们的需求。为了解决这个问题,SOLIDWORKS提供了二次开发的功能,让用户能够根据......
  • 第 6 章 ROS-URDF练习(自学二刷笔记)
    重要参考:课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ讲义链接:Introduction·Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程6.3.4URDF练习需求描述:创建一个四轮圆柱状机器人模型,机器人参数如下,底盘为圆柱状,半径10cm,高8cm,四轮由两个驱动轮和......
  • SOLIDWORKS参数化工具自定义设置小技巧 慧德敏学
    利用SOLIDWORKS参数化工具-SolidKits.AutoWorks,我们可以实现产品的一键改型、打包、编码、出BOM。整个流程大家都已经非常熟悉了,但是参数化工具的设置你可能还没有留心,加入你想自定义产品选型的分类名称,那在设置中就可以轻松实现。软件中,产品分类的默认名称为产品大类、产品小类......
  • “base_l_wheel_joint“ was received but not found in URDF
     运行demo05_car_base.urdf.xacro文件时报错:[WARN][1620731067.801481542]:Jointstatewithname:"base_l_wheel_joint"wasreceivedbutnotfoundinURDF 原因:可能要与下载xacro的文件名称一致解决:将left和right(一样会有right的报错,左右都要改)改为 base_l_......
  • SOLIDWORKS参数化设计之工程图更新 慧德敏学
    SOLIDWORKS参数化设计不仅仅包括三维模型的参数化设计,还包括工程图的自动更新,由于自动出图仍然存在一定的局限性,不能完美的实现视图的布局及尺寸的标注,因此,现阶段采用的最多的仍然是图纸的更新,也就是利用SOLIDWORKS本身三维与二维模型的关联性,当三维模型尺寸变化之后,二维图纸随着......
  • 36.solidworks异形孔向导Toolbox文件丢失解决
    1.提示如下问题2.使用Everything_x64搜索电脑上的swbrowser.sldedb文件,得到文件所在位置    3.将文件所在位置 C:\SOLIDWORKSData\lang\english\,去掉后面的内容C:\SOLIDWORKSData,输入下面框内,点击配置,然后确认,注意多试几次4.完成 ......
  • Ububtu 20.04.6 LTS 安装ROS2和Gazebo
    记录本人在Ububtu20.04.6LTS系统下安装ROS2和Gazebo的步骤,方便需要时查阅安装ROS2Foxy获取签名sudocurl-sSLhttps://raw.githubusercontent.com/ros/rosdistro/master/ros.key-o/usr/share/keyrings/ros-archive-keyring.gpg添加软件源以下指令二选一执行即可官方......
  • 利用SOLIDWORKS Flow Simulation来进行旋转流体仿真
    前段时间,一个朋友去到一家做水泵的行业,问我SOLIDWORKS能够做流体仿真么?我说,能啊。朋友又问,我现在做水泵,里面的叶片旋转,可以模拟么?我说,当然可以了啊。那么,我就做了个小例子给他,首先,我先建了个如下图所示模型,当然真正的泵不是这样的,我这个,只是玩具,甚至连玩具都称不上。  看到......