Gazebo仿真小例程一(通过例程熟悉整个仿真步骤)

2023-05-16

目录

1.编辑urdf文件。

(1)dynamic标签

 (2)gazebo标签

(3)transmission标签

(4)ros_control插件

2.编辑yaml文件

3.编辑launch文件启动gazebo仿真环境

4.编写程序控制机器人关节往复运动

5.运行效果

6.全部源码地址


为了方便入门和理解,我们这里建立一个最简单的单关节机器人,以此来入门机器人的gazebo仿真。

1.编辑urdf文件。

首先,我们在solidworks里面新建好机器人模型,然后导出urdf文件。

导出了urdf文件之后呢,我们就需要给urdf文件重新修改了, 首先直接修改文件名,在后面添加上.xacro后缀,改成了xacro文件。

 里面有solidworks软件里面的插件(转urdf插件)自己生成的两个连杆(base_link和link_1)和一个关节(joint_1)。然后我们就需要给其添加gazebo仿真所需要的标签了。

(1)dynamic标签

这个标签主要涉及动力学。

改标签是link标签的子标签,因此这个标签添加在link标签下面,每个link都需要一个dynamic标签。这个标签我们设置两个属性,第一个属性damping是阻尼系数,我们设置为0.7,第二个标签是摩擦系数,我们设置为0.5.

<dynamic damping="0.7" friction="0.5"/>

 (2)gazebo标签

这个标签主要设置连杆的颜色等属性。

  <gazebo reference="link_1">
    <material>Gazebo/Black</material>
  </gazebo>

(3)transmission标签

这个标签主要是设置关节驱动器,关节驱动器一般是电机,舵机这些,用于驱动关节,改变关节变量用的,每个活动关节都需要设置一个关节驱动电机,设置的每个关节驱动电机都需要和对应的关节绑定,以此来说明改驱动器驱动该关节。

  <transmission name="joint_1_trans">
    <type>transmission_interface/SimpleTransmission</type>
    <joint name="joint_1">
      <hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
    </joint>
    <actuator name="joint_1_motor">
      <hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
      <mechanicalReduction>1</mechanicalReduction>
    </actuator>
  </transmission>

(4)ros_control插件

此外我们还需要用gazebo标签来载入ros_control插件,由于我们整个驱动控制是基于ros_control做的,因此需要载入该插件,这个插件会给我们自动处理其余的任务,我们无需自己配置。

需要注意的是下面的<robotNamespace>标签,这个标签声明命名空间,这个需要留意一下。

  <gazebo>
    <plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so">
      <robotNamespace>/gazebo_demo</robotNamespace>
      <robotSimType>gazebo_ros_control/DefaultRobotHWSim</robotSimType>
      <legacyModeNS>true</legacyModeNS>
    </plugin>
  </gazebo>

添加了这些之后,我们的urdf文件就修改好了。

修改好之后的urdf文件如下:

<?xml version="1.0" encoding="utf-8"?>

<!-- This URDF was automatically created by SolidWorks to URDF Exporter! Originally created by Stephen Brawner (brawner@gmail.com) 

     Commit Version: 1.5.1-0-g916b5db  Build Version: 1.5.7152.31018

     For more information, please see http://wiki.ros.org/sw_urdf_exporter -->

<robot

  name="gazebo_demo">

  <link

    name="base_link">

    <inertial>

      <origin

        xyz="0 9.74542958129844E-19 -4.31390337655099E-18"

        rpy="0 0 0" />

      <mass

        value="6.99004365423729" />

      <inertia

        ixx="0.0101938136624294"

        ixy="0"

        ixz="-3.37700910261971E-35"

        iyy="0.0101938136624294"

        iyz="-8.16962303997948E-35"

        izz="0.00873755456779662" />

    </inertial>

    <visual>

      <origin

        xyz="0 0 0"

        rpy="0 0 0" />

      <geometry>

        <mesh

          filename="package://gazebo_demo/meshes/base_link.STL" />

      </geometry>

      <material

        name="">

        <color

          rgba="0.537254901960784 0.349019607843137 0.337254901960784 1" />

      </material>

    </visual>

    <collision>

      <origin

        xyz="0 0 0"

        rpy="0 0 0" />

      <geometry>

        <mesh

          filename="package://gazebo_demo/meshes/base_link.STL" />

      </geometry>

    </collision>
  <dynamic damping="0.7" friction="0.5"/>

  </link>
  <gazebo reference="base_link">
    <material>Gazebo/Black</material>
  </gazebo>

  <link

    name="link_1">

    <inertial>

      <origin

        xyz="0.1 -1.86377227087894E-19 -1.38777878078145E-17"

        rpy="0 0 0" />

      <mass

        value="1.12492033114729" />

      <inertia

        ixx="0.000798459868114599"

        ixy="1.67727625611222E-20"

        ixz="8.85083255431749E-21"

        iyy="0.00679752984625413"

        iyz="9.66746937132908E-21"

        izz="0.00712727290972403" />

    </inertial>

    <visual>

      <origin

        xyz="0 0 0"

        rpy="0 0 0" />

      <geometry>

        <mesh

          filename="package://gazebo_demo/meshes/link_1.STL" />

      </geometry>

      <material

        name="">

        <color

          rgba="1 1 1 0.32" />

      </material>

    </visual>

    <collision>

      <origin

        xyz="0 0 0"

        rpy="0 0 0" />

      <geometry>

        <mesh

          filename="package://gazebo_demo/meshes/link_1.STL" />

      </geometry>

    </collision>
  <dynamic damping="0.7" friction="0.5"/>

  </link>
  <gazebo reference="link_1">
    <material>Gazebo/Black</material>
  </gazebo>

  <joint

    name="joint_1"

    type="revolute">

    <origin

      xyz="0 0 0.075"

      rpy="0 0 0" />

    <parent

      link="base_link" />

    <child

      link="link_1" />

    <axis

      xyz="0 0 -1" />

    <limit

      lower="-1.57"

      upper="1.57"

      effort="1"

      velocity="10" />

  </joint>

  <transmission name="joint_1_trans">
    <type>transmission_interface/SimpleTransmission</type>
    <joint name="joint_1">
      <hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
    </joint>
    <actuator name="joint_1_motor">
      <hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
      <mechanicalReduction>1</mechanicalReduction>
    </actuator>
  </transmission>

  <gazebo>
    <plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so">
      <robotNamespace>/gazebo_demo</robotNamespace>
      <robotSimType>gazebo_ros_control/DefaultRobotHWSim</robotSimType>
      <legacyModeNS>true</legacyModeNS>
    </plugin>
  </gazebo>


</robot>

2.编辑yaml文件

yaml文件为配置文件,主要配置关节控制器的物理参数,例如控制器类型,和pid等参数。

控制器类型一共有三种,分别是:位置控制,速度控制和力控制。

我这里配置好的文件如下。

gazebo_demo:

  # Publish all joint states -----------------------------------

  joint_state_controller:

    type: joint_state_controller/JointStateController

    publish_rate: 50  



  # Position Controllers ---------------------------------------

  joint1_position_controller:

    type: position_controllers/JointPositionController

    joint: joint_1

    #pid: {p: 100.0, i: 0.01, d: 10.0}



gazebo_demo/gazebo_ros_control/pid_gains:

  joint_1: {p: 100.0, i: 0.0, d: 10.0}

3.编辑launch文件启动gazebo仿真环境

这里我也编辑好了,如下:

<launch>

  <param name="robot_description" command="$(find xacro)/xacro $(find gazebo_demo)/urdf/gazebo_demo.urdf.xacro" />

  <!-- these are the arguments you can pass this launch file, for example paused:=true -->
  <arg name="paused" default="false"/>
  <arg name="use_sim_time" default="true"/>
  <arg name="gui" default="true"/>
  <arg name="headless" default="false"/>
  <arg name="debug" default="false"/>

  <!-- We resume the logic in empty_world.launch, changing only the name of the world to be launched -->
  <include file="$(find gazebo_ros)/launch/empty_world.launch">
    <arg name="world_name" value="$(find gazebo_demo)/worlds/gazebo_demo.world"/>
    <arg name="debug" value="$(arg debug)" />
    <arg name="gui" value="$(arg gui)" />
    <arg name="paused" value="$(arg paused)"/>
    <arg name="use_sim_time" value="$(arg use_sim_time)"/>
    <arg name="headless" value="$(arg headless)"/>
  </include>


  <node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"
    args="-urdf -model myrobot -param robot_description"/>


  <rosparam file="$(find gazebo_demo)/config/joint_names_gazebo_demo.yaml" command="load"/>

  <node name="controller_spawner" pkg="controller_manager" type="spawner" respawn="false"
	output="screen" ns="/gazebo_demo" args="joint1_position_controller"/>

  <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"
	respawn="false" output="screen">
    <remap from="/joint_states" to="/gazebo_demo/joint_states" />
  </node>



</launch>

启动之后就可以看到这个机器人出现在了地面上。

4.编写程序控制机器人关节往复运动

这里编写了一个简单的节点进行控制,程序如下:

#include "ros/ros.h"
#include "std_msgs/Float64.h" 
#include <sstream>

int main(int argc, char  *argv[])
{   
    setlocale(LC_ALL,"");
    ros::init(argc,argv,"control_gazebo_demo");
    ros::NodeHandle nh;
    ros::Publisher pub = nh.advertise<std_msgs::Float64>("/gazebo_demo/joint1_position_controller/command",10);
    std_msgs::Float64 control_gazebo_demo;
    control_gazebo_demo.data=0.0;
    bool flag=0;//0weizeng 1weijian
    ros::Rate r(50);
    while (ros::ok())
    {
        
        for(control_gazebo_demo.data=0.0;control_gazebo_demo.data<=1.5;control_gazebo_demo.data+=0.01)
        {
		pub.publish(control_gazebo_demo);

		ROS_INFO("发送的消息:%f",control_gazebo_demo);
		r.sleep();
        }

        for(control_gazebo_demo.data=1.5;control_gazebo_demo.data>=0.0;control_gazebo_demo.data-=0.01)
        {
		pub.publish(control_gazebo_demo);

		ROS_INFO("发送的消息:%f",control_gazebo_demo);
		r.sleep();
        }
       

        
        ros::spinOnce();
    }
    return 0;
}

5.运行效果

Gazebo仿真1自由度关节

6.全部源码地址

源码地址:

https://gitee.com/li9535/gazebo_simulation_ros_package/tree/master/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Gazebo仿真小例程一(通过例程熟悉整个仿真步骤) 的相关文章

  • Gazebo仿真PX4运行roslaunch PX4 mavros_posix_sitl.launch时报错Required process [sitl-2] has died 解决方法

    报错如图 解决方法为卸载Gazebo9安装Gazebo9 19 参考下文中4 4部分 xff0c 问题类似但解决方法相同 xff1a https blog csdn net qq 38768959 article details 10604
  • 【ROS】Gazebo仿真平台安装及问题解决

    Gazebo安装 这里的ROS版本是Melodic xff0c 如果是其他版本的ROS可以修改下面命令的melodic为指定版本 sudo apt get install ros melodic gazebo ros pkgs ros me
  • 教程 | 阿克曼结构移动机器人的gazebo仿真(五)

    第四章 用xacro优化URDF并配置gazebo仿真插件 1 前言 上节用简易模型写了一个小车的URDF代码 xff0c 这一节将用xacro对其进行优化 xff0c 这里我并不打算用宏对参数进行封装 xff0c 因为我个人觉得这样看起来
  • Ubuntu 16.04 安装 Gazebo

    Gazebo 是一款 3D 动态模拟器 xff0c 能够准确有效地模拟复杂室内和室外环境中的机器人群体 虽然类似于游戏引擎 xff0c Gazebo 提供了更高保真度的物理模拟 一套传感器以及用户和程序接口 Gazebo 的典型用途包括 x
  • gazebo打开后黑屏_week33 gazebo仿真时遇到的问题

    No transform from left wheel link to base link 左轮未显示 被覆盖住 看不到 cannot launch node of type joint state publisher gui joint
  • 【2020-8-9】APM,PX4,GAZEBO,MAVLINK,MAVROS,ROS之间的关系以及科研设备选型

    0 概述 无人机自主飞行平台可以分为四个部分 xff1a 动力平台 xff0c 飞行控制器 xff0c 机载电脑和模拟平台 动力平台 xff1a 负责执行飞行任务 xff0c 包括螺旋桨 电机 机架等 xff0c 用于科研的一般都是F380
  • Gazebo 详细介绍

    Gazebo is a 3D multi robot simulator with dynamics It is capable of simulating articulated robot in complex and realisti
  • PX4 GAZEBO无人机添加相机并进行图像识别

    PX4 GAZEBO无人机添加摄像头并进行图像识别 在之前完成了ROS的安装和PX4的安装 xff0c 并可以通过roslaunch启动软件仿真 接下来为无人及添加相机 xff0c 并将图像用python函数读取 xff0c 用于后续操作
  • ros + gazebo未报错却加载不出来机器人模型 解决办法

    以下几篇文章的问题 xff0c 我也遇到了 https www zhihu com question 442463457 answer 1717320391 https ask csdn net questions 7405583 我的环境
  • PX4+Offboard模式+代码控制无人机起飞(Gazebo)

    参考PX4自动驾驶用户指南 https docs px4 io main zh ros mavros offboard cpp html 我的另一篇博客写了 键盘控制PX4无人机飞行 PX4无人机 键盘控制飞行代码 可以先借鉴本篇博客 xf
  • gazebo模型下载以及配置

    最近在学习ROS xff0c 主要是为了结合SLAM仿真使用 启动gazebo命令 roscore 在另一个终端执行 gazebo 就可以进入清爽的gazebo界面 xff08 如果屏幕出现黑屏并不是安装错误可以稍微等待一会 xff09 x
  • 三 机器人仿真软件Gazebo介绍

    ROS教程 这是小弟的学习笔记 xff0c 有错求请拍 xff0c 多指教 xff0c 谢谢 三 机器人仿真软件Gazebo介绍 Gazebo功能 1 构建机器人运动仿真模型 在Gazebo里 xff0c 提供了最基础的三个物体 xff0c
  • ROS学习(2)——rviz与gazebo问题记录

    ROS学习 xff08 2 xff09 rviz与gazebo问题记录 继续按照教程学习 xff0c 踩了很多坑 1 工作环境配置问题 实践6 2 4在rviz中显示模型时 xff0c 运行launch文件出现如下报错 原因 xff1a 出
  • ROS+Gazebo----Unable to find uri[model:// ]

    基于ROS 43 Gazebo环境 xff0c 用roslaunch把sdf模型加载到gazebo仿真世界 目录结构如下 输入命令roslaunch my simulation my world launch 报错 xff1a 1 不接入网
  • 基于gazebo的无人车编队仿真实战总结(二)

    基于gazebo的无人车编队仿真实战总结 xff08 二 xff09 上一篇博客是通过古月居的多机器人编队仿真考虑讲前期做的基于阿克曼转向的仿真模型 xff0c 进行三台无人小车的编队仿真 问题 1 将无人小车的仿真模型 xff0c 按照博
  • MAVROS +ardupilot +gazebo 无人机集群仿真 (一)

    MAVROS 43 ardupilot 43 gazebo 无人机集群仿真 xff08 一 xff09 无人机仿真环境搭建仿真软件安装仿真环境测试无人机多机仿真apm launch文件修改修改 iris ardupilot world修改
  • ROS Gazebo(三):启动gazebo/URDF

    打开Gazebo的方式主要有两种 xff1a rosrun 和 roslaunch 1 启动ROS节点 启动ROS节点 bring up 机器人的标准工具是roslaunch 打开一个空的Gazebo世界命令如下 xff1a roslaun
  • Gazebo 加载xacro文件和URDF文件的方式

    版权声明 xff1a lt 本博客所有内容均为自己在学习工作中的总结 摘录等 转载请注明出处 如有侵权请联系删除 gt https blog csdn net xuehuafeiwu123 article details 71108959
  • ROS--URDF集成Gazebo仿真小车和rviz结合

    ROS URDF集成Gazebo仿真小车 实现流程 需要编写封装惯性矩阵算法的 xacro 文件 为机器人模型中的每一个 link 添加 collision 和 inertial 标签 xff0c 并且重置颜色属性 在 launch 文件中
  • gazebo仿真与ros控制器学习

    gazebo是一个功能强大的模拟器 尤其适合机器人的运动和控制模拟 但也存在很多bug 官方学习地址 http gazebosim org tutorials 包括了所有的教程 从初级中级到高级 也可以按照分类进行学习 这里主要讲与ros控

随机推荐

  • CSDN周赛第十二期

    CSDN的比赛难度相对而且比较简单 xff0c 适合小白练手 xff0c 而且刷题本身在于锻炼思维 xff0c 写出题目不难 xff0c 但是需要拥有缜密的思维才能通过全部的用例 1 豚鼠排名榜 已知字符A B C 每个字符都有自己的权值q
  • rocon app

    规格 xff1a Rapp指代rocon app或者叫robot app 用在机器人的控制中Robotics in Concert xff0c 这是通过 Rapp Manager 安装和执行的元数据 它旨在允许更高级别的控制器采用提供所需公
  • 矩阵按键的两种扫描方法

    1 实验目的 掌握两种按键扫描方法 xff1a 行扫描 xff0c 行列扫描 xff08 高低电平翻转 xff09 2 实验流程图 3 代码分析 xff08 1 xff09 行扫描 include 34 stm32f10x h 34 u16
  • 计算机二进制的浮点表示法

    计算机二进制的浮点表示法 0 1 3 61 0 3 组成 符号位 0表示正 1表示负 指数位 2的n次方 xff0c n 43 127 对于4字节浮点数 xff0c 此处为127 再换算成二进制 尾数位 直接用 过程 将整数部分换算成二进制
  • STM32延时函数的三种方法——最好掌握第三种

    单片机编程过程中经常用到延时函数 xff0c 最常用的莫过于微秒级延时delay us 和毫秒级delay ms 1 普通延时法 这个比较简单 xff0c 让单片机做一些无关紧要的工作来打发时间 xff0c 经常用循环来实现 xff0c 不
  • 【常用模块】HC-05蓝牙串口通信模块使用详解(实例:手机蓝牙控制STM32单片机)

    HC 05蓝牙串口通信模块应该是使用最广泛的一种蓝牙模块之一了 为什么呢 xff1f 因为HC05模块是一款高性能主从一体蓝牙串口模块 xff0c 可以不用知道太多蓝牙相关知识就可以很好的上手 说白了 xff0c 只是个蓝牙转串口的设备 x
  • uln2003驱动电路

    一 uln2003有什么作用 ULN2003是大电流驱动阵列 xff0c 多用于单片机 智能仪表 PLC 数字量输出卡等控制电路中 可直接驱动继电器等负载 输入5VTTL电平 xff0c 输出可达500mA 50V ULN2003是高耐压
  • 简单超声波测距

    用到模块 hc sr04超声波模块 xff0c stm32开发板 本实验通过超声波测距模块得到长度 直接打印到窗口显示 xff0c 故主要用到定时器函数 xff0c 串口函数 hcsr04 c 只需要提供一个 10uS以上脉冲触发信号 xf
  • Javaer,你必须要了解的ExecutorService

    ExecutorService初接触 之前做的一个功能里有一个耗时操作 xff1a 处理数据库里对应的记录 xff0c 然后将每个处理后的结果做个排序 恕本人小白 xff0c 刚开始直接用单线程处理 xff01 你敢信 xff1f xff0
  • 平衡自行车-理论篇

    原文链接 xff1a http nicekwell net blog 20180121 ping heng zi xing che li lun pian html 一 模型分析 1 倒立摆2 自行车的平衡控制 2 1 怎样的状态才叫平衡2
  • 魔百盒CM201-1刷机教程

    家里有一块魔百盒CM201 1一直在家积灰 xff0c 由于看到网上教程可以刷各种系统 xff0c 所以想着玩来试试看 先刷一个电视版安卓系统看 盒子样子大概就是下面这样 xff1a 拿到手之后就迫不及待的将外壳拆掉了 xff0c 下面这样
  • RK3288刷机教程:安装Ubuntu 16.04

    网上有很多基于瑞芯微RK3288芯片的板子 xff0c 个人感觉配置都非常不错 xff01 然后就淘了两块玩玩 如下图所示 xff1a 然后可以看到 xff0c 各种接口也比较全乎 xff01 有HDMI和VGA视频输出接口 xff0c 两
  • ros串口通讯(读取串口数据)

    ros串口通讯是非常重要的通讯手段 xff0c 通常跟下位机或者各种usb口外设都是通过串口进行通讯的 那么我们跟着教程来学习一下如何读取手机通过无线串口发送给电脑的数据 这里我通过一个usb ttl工具将蓝牙连接到电脑上 xff0c 然后
  • No package ‘orocos-bfl‘ found

    目录 问题 xff1a 原因 xff1a 解决办法 xff1a 问题 xff1a 在编译ros工程的时候 xff0c 出现如下错误提示 xff1a No package 39 orocos bfl 39 found 如下图所示 xff1a
  • 人工智能(AI)入门

    人工智能的入门学习需要具备的知识结构 xff1a 一 编程语言选择 推荐python xff0c 原因有二 xff0c 其一 xff0c 语法简单易学 xff1b 其二 xff0c 有丰富的库支持 二 算法设计基础 人工智能的研究内容集中在
  • 卡尔曼滤波(Kalman filter)算法以及Arduino应用-mpu6050(导航贴)

    正在更新中 这篇文章要跟大家一起完全搞明白卡尔曼滤波 xff0c 连一个标点符号也不放过 xff0c 完完全全理解明白 如果你看不懂 xff0c 那说明我写的不好 本文是看了dr con博士的视频后做的 xff0c 建议可以去看看 如果哪里
  • ROS发布tf坐标

    我们写个小程序来发布一个坐标系 xff1a 坐标系消息格式 xff1a std msgs Header header 头信息 uint32 seq 序列号 time stamp 时间戳 string frame id 坐标 ID strin
  • pop_back()的用法及运行机制

    vector在c 43 43 中非常好用 xff0c 简单的说 xff0c vector是一个能够存放任意类型的动态数组 能够增加和压缩数据 一般使用push back 和pop back 函数将数据存放进容器末尾 如下例程 xff1a i
  • Gazebo启动不开

    问题 xff1a 按照书上的指引 xff0c 启动gazebo仿真软件 当然记得运行roscore rosrun gazebo ros gazebo 结果我在这个页面等了三分钟一点儿动静也没有 查阅资料 xff0c 说明这是因为model库
  • Gazebo仿真小例程一(通过例程熟悉整个仿真步骤)

    目录 1 编辑urdf文件 xff08 1 xff09 dynamic标签 xff08 2 xff09 gazebo标签 xff08 3 xff09 transmission标签 xff08 4 xff09 ros control插件 2