ros + gazebo未报错却加载不出来机器人模型 解决办法

2023-05-16

以下几篇文章的问题,我也遇到了

https://www.zhihu.com/question/442463457/answer/1717320391

https://ask.csdn.net/questions/7405583

我的环境是noetic + ubuntu20.04

具体是在运行古月居老师的view_mbot_gazebo_empty_world.launch出现的情况

这里会涉及到三个档案

view_mbot_gazebo_empty_world.launch

mbot_gazebo.xacro

mbot_base_gazebo.xacro

在view_mbot_gazebo_empty_world.launch 要注意你系统里的$(find xacro)/xacro是否正确安装

<!-- 加载机器人模型描述参数 -->
<param name="robot_description" command="$(find xacro)/xacro --inorder '$(find mbot_description)/urdf/xacro/gazebo/mbot_gazebo.xacro'" />

如果安装正确的话,运行roslaunch mbot_gazebo view_mbot_gazebo_empty_world.launch

会报错[ERROR] [1627529772.148763844]: No link elements found in urdf file

首先将mbot_gazebo.xacro的

<mbot_base_gazebo/>

修改为

<xacro:mbot_base_gazebo/>

然后再次运行,不报错但是不显示机器人,如同其他文章的情况

左边的mbot只加载了一个差速控制插件,其他主体都没有加载,第一个解决办法当然是版本降级,如果ubuntu和ros版本都降到和老师一样肯定能运行,但是....不想降.....所以经过几个小时的研究,我发现其实和刚刚的情况一样,问题就出在升级后,有些写法的规则改了,所有自定义的macro,要引用的话都要加上xacro:

我们把mbot_base_gazebo.xacro里自定义的cylinder_inertial_matrix, sphere_inertial_matrix ,wheel, caster 四个标签引用的时候都加上xacro:

例如<wheel prefix="left"  reflect="-1"/> 改成 <xacro:wheel prefix="left"  reflect="-1"/>

<?xml version="1.0"?>
<robot name="mbot" xmlns:xacro="http://www.ros.org/wiki/xacro">

    <!-- PROPERTY LIST -->
    <xacro:property name="M_PI" value="3.1415926"/>
    <xacro:property name="base_mass"   value="20" /> 
    <xacro:property name="base_radius" value="0.20"/>
    <xacro:property name="base_length" value="0.16"/>

    <xacro:property name="wheel_mass"   value="2" />
    <xacro:property name="wheel_radius" value="0.06"/>
    <xacro:property name="wheel_length" value="0.025"/>
    <xacro:property name="wheel_joint_y" value="0.19"/>
    <xacro:property name="wheel_joint_z" value="0.05"/>

    <xacro:property name="caster_mass"    value="0.5" /> 
    <xacro:property name="caster_radius"  value="0.015"/> <!-- wheel_radius - ( base_length/2 - wheel_joint_z) -->
    <xacro:property name="caster_joint_x" value="0.18"/>

    <!-- Defining the colors used in this robot -->
    <material name="yellow">
        <color rgba="1 0.4 0 1"/>
    </material>
    <material name="black">
        <color rgba="0 0 0 0.95"/>
    </material>
    <material name="gray">
        <color rgba="0.75 0.75 0.75 1"/>
    </material>
    
    <!-- Macro for inertia matrix -->
    <xacro:macro name="sphere_inertial_matrix" params="m r">
        <inertial>
            <mass value="${m}" />
            <inertia ixx="${2*m*r*r/5}" ixy="0" ixz="0"
                iyy="${2*m*r*r/5}" iyz="0" 
                izz="${2*m*r*r/5}" />
        </inertial>
    </xacro:macro>

    <xacro:macro name="cylinder_inertial_matrix" params="m r h">
        <inertial>
            <mass value="${m}" />
            <inertia ixx="${m*(3*r*r+h*h)/12}" ixy = "0" ixz = "0"
                iyy="${m*(3*r*r+h*h)/12}" iyz = "0"
                izz="${m*r*r/2}" /> 
        </inertial>
    </xacro:macro>

    <!-- Macro for robot wheel -->
    <xacro:macro name="wheel" params="prefix reflect">
        <joint name="${prefix}_wheel_joint" type="continuous">
            <origin xyz="0 ${reflect*wheel_joint_y} ${-wheel_joint_z}" rpy="0 0 0"/>
            <parent link="base_link"/>
            <child link="${prefix}_wheel_link"/>
            <axis xyz="0 1 0"/>
        </joint>

        <link name="${prefix}_wheel_link">
            <visual>
                <origin xyz="0 0 0" rpy="${M_PI/2} 0 0" />
                <geometry>
                    <cylinder radius="${wheel_radius}" length = "${wheel_length}"/>
                </geometry>
                <material name="gray" />
            </visual>
            <collision>
                <origin xyz="0 0 0" rpy="${M_PI/2} 0 0" />
                <geometry>
                    <cylinder radius="${wheel_radius}" length = "${wheel_length}"/>
                </geometry>
            </collision>
            <xacro:cylinder_inertial_matrix  m="${wheel_mass}" r="${wheel_radius}" h="${wheel_length}" />
        </link>

        <gazebo reference="${prefix}_wheel_link">
            <material>Gazebo/Gray</material>
        </gazebo>

        <!-- Transmission is important to link the joints and the controller -->
        <transmission name="${prefix}_wheel_joint_trans">
            <type>transmission_interface/SimpleTransmission</type>
            <joint name="${prefix}_wheel_joint" >
                <hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
            </joint>
            <actuator name="${prefix}_wheel_joint_motor">
                <hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
                <mechanicalReduction>1</mechanicalReduction>
            </actuator>
        </transmission>
    </xacro:macro>

    <!-- Macro for robot caster -->
    <xacro:macro name="caster" params="prefix reflect">
        <joint name="${prefix}_caster_joint" type="continuous">
            <origin xyz="${reflect*caster_joint_x} 0 ${-(base_length/2 + caster_radius)}" rpy="0 0 0"/>
            <parent link="base_link"/>
            <child link="${prefix}_caster_link"/>
            <axis xyz="0 1 0"/>
        </joint>

        <link name="${prefix}_caster_link">
            <visual>
                <origin xyz="0 0 0" rpy="0 0 0"/>
                <geometry>
                    <sphere radius="${caster_radius}" />
                </geometry>
                <material name="black" />
            </visual>
            <collision>
                <origin xyz="0 0 0" rpy="0 0 0"/>
                <geometry>
                    <sphere radius="${caster_radius}" />
                </geometry>
            </collision>      
            <xacro:sphere_inertial_matrix  m="${caster_mass}" r="${caster_radius}" />
        </link>

        <gazebo reference="${prefix}_caster_link">
            <material>Gazebo/Black</material>
        </gazebo>
    </xacro:macro>

    <xacro:macro name="mbot_base_gazebo">
        <link name="base_footprint">
            <visual>
                <origin xyz="0 0 0" rpy="0 0 0" />
                <geometry>
                    <box size="0.001 0.001 0.001" />
                </geometry>
            </visual>
        </link>
        <gazebo reference="base_footprint">
            <turnGravityOff>false</turnGravityOff>
        </gazebo>

        <joint name="base_footprint_joint" type="fixed">
            <origin xyz="0 0 ${base_length/2 + caster_radius*2}" rpy="0 0 0" />        
            <parent link="base_footprint"/>
            <child link="base_link" />
        </joint>

        <link name="base_link">
            <visual>
                <origin xyz=" 0 0 0" rpy="0 0 0" />
                <geometry>
                    <cylinder length="${base_length}" radius="${base_radius}"/>
                </geometry>
                <material name="yellow" />
            </visual>
            <collision>
                <origin xyz=" 0 0 0" rpy="0 0 0" />
                <geometry>
                    <cylinder length="${base_length}" radius="${base_radius}"/>
                </geometry>
            </collision>   
            <xacro:cylinder_inertial_matrix  m="${base_mass}" r="${base_radius}" h="${base_length}" />
        </link>

        <gazebo reference="base_link">
            <material>Gazebo/Blue</material>
        </gazebo>

        <xacro:wheel prefix="left"  reflect="-1"/>
        <xacro:wheel prefix="right" reflect="1"/>

        <xacro:caster prefix="front" reflect="-1"/>
        <xacro:caster prefix="back"  reflect="1"/>

        <!-- controller -->
        <gazebo>
            <plugin name="differential_drive_controller" 
                    filename="libgazebo_ros_diff_drive.so">
                <rosDebugLevel>Debug</rosDebugLevel>
                <publishWheelTF>true</publishWheelTF>
                <robotNamespace>/</robotNamespace>
                <publishTf>1</publishTf>
                <publishWheelJointState>true</publishWheelJointState>
                <alwaysOn>true</alwaysOn>
                <updateRate>100.0</updateRate>
                <legacyMode>true</legacyMode>
                <leftJoint>left_wheel_joint</leftJoint>
                <rightJoint>right_wheel_joint</rightJoint>
                <wheelSeparation>${wheel_joint_y*2}</wheelSeparation>
                <wheelDiameter>${2*wheel_radius}</wheelDiameter>
                <broadcastTF>1</broadcastTF>
                <wheelTorque>30</wheelTorque>
                <wheelAcceleration>1.8</wheelAcceleration>
                <commandTopic>cmd_vel</commandTopic>
                <odometryFrame>odom</odometryFrame> 
                <odometryTopic>odom</odometryTopic> 
                <robotBaseFrame>base_footprint</robotBaseFrame>
            </plugin>
        </gazebo> 
    </xacro:macro>

</robot>
再次运行,机器人就出现了

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

ros + gazebo未报错却加载不出来机器人模型 解决办法 的相关文章

随机推荐

  • ROS学习笔记9-创建ros消息和服务

    该节内容主要来自于官方文档的两个小节 xff1a 1 使用rosed来编辑 2 创建ros消息的服务 先来看rosed xff1a rosed rosed命令是rosbash的一部分 xff0c 使用rosed可以直接编辑包中的一个文件 x
  • CUAV RTK初步使用体验和感受

    记录使用RTK进行无人机定位并操作的使用体验 一 RTK定位设置 使用的是CUAV制作发售的RTK xff0c 型号为C9P xff0c 目前该产品已经下架 xff0c 上新了C9PS 并不需要太多的设置 xff0c 在飞控接入RTK后 x
  • 记录一次WIN11开机在登录页面循环的问题

    记录一次由于未进行win密码设置 xff0c 导致开机后卡在登录界面无法登录进去的问题 最后完美解决了 1 背景 开机后 xff0c 显示用户登录界面 xff0c 但是和以往不同 xff0c 没有了密码输入框 xff0c 只有一个 登录 按
  • Ubuntu中增加串口的缓冲区

    增加串口缓冲区 xff0c 用于尝试解决px4 ros中显示TX溢出的问题 以下大部分代码和内容均有CHATGPT生成 xff0c 代码已经通过验证 一 通信溢出问题 PX4和ROS的通信溢出可能是由于几个原因造成的 以下是一些建议 xff
  • GRBL代码使用与修改

    下载官方grbl代码 xff0c 并进行修改使其正确 1 问题 xff1a 购买了328p单片机 xff0c 购买了grbl的底板 xff0c 但是烧录之后无法正常使用 问题发现 xff1a 引脚错误了 xff0c 官方代码中的引脚需要修改
  • ubuntu使用rc.local开机自启USB设备读写权限

    无人机飞控为ACM0 xff0c 串口USB为USB0 xff0c 使用rc为其开机自启给与权限 大部分由chagpt生成 xff0c 已验证 首先 xff0c 创建一个新的 etc rc local 文件 xff08 如果尚不存在 xff
  • Friendlycore增加inodes数量

    背景 xff1a 为Nanopim1安装了core系统 xff0c tf卡大小64G xff0c 安装后正常扩展到了整个tf卡 xff0c 但是在安装hass的docker显示磁盘空间不够 xff0c 最终发现是inode被用完了 其ino
  • UORB

    转载地址 xff1a http blog arm so armteg pixhawk 183 0503 html Pixhawk 飞控 系统是基于ARM的四轴以上飞行器的飞行控制器 xff0c 它的前身是PX4 IMU xff0c Pixh
  • rCS启动脚本分析

    转载地址 xff1a http wellmakers com p 61 401 还有一篇很重要的文章 xff0c 讲述了整个系统的大致启动过程 xff1a http blog chinaunix net uid 29786319 id 43
  • PID通俗解释

    转载地址 xff1a http blog gkong com liaochangchu 117560 ashx PID是比例 积分 微分的简称 xff0c PID控制的难点不是编程 xff0c 而是控制器的参数整定 参数整定的关键是正确地理
  • Kali Linux中安装Xfce的步骤2-1

    Kali Linux默认安装的是桌面环境是Gnome xff0c 可以通过以下方法在Kali Linux中安装Xfce xff0c 从而修改其桌面环境 1 Xfce介绍 Xfce是XForms Common Enviroment的简写 其可
  • STM32CubeMX教程之简介及基本使用

    STM32CubeMX是意法半导体推出的图形化配置工具 xff0c 通过傻瓜化的操作便能实现相关配置 xff0c 最终能够生成C语言代码 xff0c 支持多种工具链 xff0c 比如MDK IAR For ARM TrueStudio等 尤
  • Linux 文件流与目录流管理

    Linux 应用开发 04 文件流与目录流管理 本课目标 1 编程目标 xff1a a 实现磁盘文件的拷贝操作 b 缓冲区类型对磁盘真正写入操作的影响 2 理解文件流操作以及缓冲区概念 3 掌握ansi c 文件流相关操作函数 4 理解与掌
  • tensorflow InvalidArgumentError: Cannot serialize protocol buffer of type tensorflow.GraphDef 错误分析

    训练nfm模型 xff0c 每2000个step进行保存 一开始模型训练正常 xff0c 但是在使用tf train Saver的save方法保存模型时出现了如下错误 xff1a tensorflow python framework er
  • 7年厨师想转行程序员

    7年厨师想转行 xff0c 跟我学java 可是工资只有7千我惊呆了 xff0c 我还以为7年厨师工资至少1万多呢 看来每个行业都有工资高也有工资低的 xff0c 他可能属于厨师里工资低的吧
  • 八款值得尝试的精美的Linux发行版,你用过哪几款?

    Linux发行版各式各样 xff0c 每个发行版都有自己的特点 xff0c 在这篇文章中 xff0c 将会列出让一些另 Linux 用户印象最深刻且精美的 Linux 发行版 xff0c 包括对初学者友好和流行的发行版 elementary
  • VINS-mono 解析 生成用于回环检测的字典文件

    VINS回环检测使用的是FAST xff08 Features from Accelerated Segment Test xff09 特征点检测 xff0c 并利用BRIEF描述子存储特征 挑选了两个实时性较好的检测和描述 BRIEF提供
  • 将git下载的c++项目用vs打开

    首先确定下载的项目里包括CMakeLists txt的文件 然后在文件所在目录用cmd或power shell输入以下命令 以2017版本为例 cmake G 34 Visual Studio 15 2017 Win64 34 中间那个 表
  • 用 verilog 实现 minst 数字识别

    用verilog实现minst 的数字识别 可以用modelsim看结果 如果要部署到fpga上 PL的资源要非常非常多 代码下载 包含5个仿真文件 https download csdn net download howard789 13
  • ros + gazebo未报错却加载不出来机器人模型 解决办法

    以下几篇文章的问题 xff0c 我也遇到了 https www zhihu com question 442463457 answer 1717320391 https ask csdn net questions 7405583 我的环境