link一改名字rviz中就无法显示?

请先看你的.rviz配置文件,以我的display_rviz.rviz为例(实际抄古月居的)

Panels:
  - Class: rviz_common/Displays
    Name: Displays
  - Class: rviz_common/Views
    Name: Views
Visualization Manager:
  Class: ""
  Displays:
    - Class: rviz_default_plugins/Grid
      Name: Grid
      Value: true
    - Alpha: 0.8
      Class: rviz_default_plugins/RobotModel
      Description Source: Topic
      Description Topic:
        Value: /robot_description
      Enabled: true
      Name: RobotModel
      Value: true
    - Class: rviz_default_plugins/TF
      Name: TF
      Value: true
  Global Options:
    Fixed Frame: base_link
    Frame Rate: 30
  Name: root
  Tools:
    - Class: rviz_default_plugins/MoveCamera
  Value: true
  Views:
    Current:
      Class: rviz_default_plugins/Orbit
      Distance: 1.7
      Name: Current View
      Pitch: 0.33
      Value: Orbit (rviz)
      Yaw: 5.5
Window Geometry:
  Height: 800
  Width: 1200

其中

  Global Options:
    Fixed Frame: base_link
    Frame Rate: 30

这三行定义了rviz的固定坐标系与刷新帧率,你的模型中必须有一个link与固定坐标系名字相同,便于模型在rviz中确定位置。假设你改了这个link的名字,模型会因为无法确定初始位姿而无法显示。

可以显示的xacro文件示例

<?xml version="1.0"?>
<!--xacro基本语法-->
<!--常量定义: <xacro:property name="M_PI" value="3.1415926" />-->
<!--常量使用: <origin xyz="0 0 0" rpy="${M_PI/2} 0 0">-->
<!--数学计算: <origin xyz="0 ${(mortor_length_wheel_length)/2} 0" rpy="0 0 0" />-->
<!--宏定义:一般用于定义轮子等,便于复用。也可以设置一些参数,便于适配不同情况-->
<!--宏定义:<xacro:macro name="wheel" params="A B C">
            ......
          </xacro:macro>
-->
<!--宏调用: <xacro:wheel A="A_value" B="B_value" C="C_value" />-->
<!--文件包含:<xacro:include filename="$(find package_name)/urdf/xacro_file_name" />-->
<robot name="my_robot" xmlns:xacro="http://www.ros.org/wiki/xacro">

<xacro:property name="M_PI" value="3.1415926" />
<xacro:property name="base_wide" value="0.8" />
<xacro:property name="base_high" value="0.3" />
<xacro:property name="wheel_radius" value="0.20" />
<xacro:property name="length_middle_distance" value="0.05" />
<xacro:property name="wheel_wide" value="0.06" />

<!--定义颜色-->
<material name="yellow">
  <color rgba="1 0.4 0 1" />
</material>
<material name="black">
  <color rgba="0 0 0 0.95" />
</material>
<material>
  <color rgba="0.75 0.75 0.75 1" />
</material>

<!--定义惯性矩阵-->
<!--定义球体惯性矩阵:接受两个参数 质量m 半径r 根据计算公式计算惯性矩阵-->
<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>

<!--定义圆柱体惯性矩阵:接受三个参数 质量m 半径r 高度h 根据计算公式计算惯性矩阵-->
<xacro:macro name="cylinder_inertial_matrix" params="m r h">
  <inertial>
    <mass value="${m}" />
    <inertia ixx="${m*(3*r*r+h*h)}" ixy="0" ixz="0"
             iyy="${m*(3*r*r+h*h)/12}" iyz="0" izz="${m*r*r/2}" />
  </inertial>
</xacro:macro>

<!--定义立方体惯性矩阵  m:质量 l w h: 立方体长 宽 高 -->
<xacro:macro name="Box_inertial_matrix" params="m l w h">
       <inertial>
               <mass value="${m}" />
               <inertia ixx="${m*(h*h + l*l)/12}" ixy = "0" ixz = "0"
                   iyy="${m*(w*w + l*l)/12}" iyz= "0"
                   izz="${m*(w*w + h*h)/12}" />
       </inertial>
</xacro:macro>

<!--定义轮子-->
<xacro:macro name="wheel" params="prefix x_positive y_positive">
  <joint name="${prefix}_wheel_joint" type="continuous">
    <!--根据具体位置计算链接节点的位置-->
    <origin xyz= "${x_positive*0.5*(length_middle_distance+wheel_radius)} ${y_positive*0.5*(wheel_wide+base_wide)} ${0.5*wheel_radius}" 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_wide}" />
    </geometry>
    <material name="gray" />
    </visual>
  </link>

  </xacro:macro>

<xacro:macro name="my_robot_base">  
  <xacro:wheel prefix="front_left" x_positive="1" y_positive="-1" />
  <xacro:wheel prefix="front_right" x_positive="1" y_positive="1" />
  <xacro:wheel prefix="last_left" x_positive="-1" y_positive="-1" />
  <xacro:wheel prefix="last_right" x_positive="-1" y_positive="1" />

  <link name="base_link">
    <visual>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <geometry>
        <sphere radius="4" />
      </geometry>
      <material name="yellow" rgba="1 0 0 0.5" />
    </visual>
  </link>
</xacro:macro>
  

</robot>

无法显示的xacro文件示例

<?xml version="1.0"?>
<!--xacro基本语法-->
<!--常量定义: <xacro:property name="M_PI" value="3.1415926" />-->
<!--常量使用: <origin xyz="0 0 0" rpy="${M_PI/2} 0 0">-->
<!--数学计算: <origin xyz="0 ${(mortor_length_wheel_length)/2} 0" rpy="0 0 0" />-->
<!--宏定义:一般用于定义轮子等,便于复用。也可以设置一些参数,便于适配不同情况-->
<!--宏定义:<xacro:macro name="wheel" params="A B C">
            ......
          </xacro:macro>
-->
<!--宏调用: <xacro:wheel A="A_value" B="B_value" C="C_value" />-->
<!--文件包含:<xacro:include filename="$(find package_name)/urdf/xacro_file_name" />-->
<robot name="my_robot" xmlns:xacro="http://www.ros.org/wiki/xacro">

<xacro:property name="M_PI" value="3.1415926" />
<xacro:property name="base_wide" value="0.8" />
<xacro:property name="base_high" value="0.3" />
<xacro:property name="wheel_radius" value="0.20" />
<xacro:property name="length_middle_distance" value="0.05" />
<xacro:property name="wheel_wide" value="0.06" />

<!--定义颜色-->
<material name="yellow">
  <color rgba="1 0.4 0 1" />
</material>
<material name="black">
  <color rgba="0 0 0 0.95" />
</material>
<material>
  <color rgba="0.75 0.75 0.75 1" />
</material>

<!--定义惯性矩阵-->
<!--定义球体惯性矩阵:接受两个参数 质量m 半径r 根据计算公式计算惯性矩阵-->
<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>

<!--定义圆柱体惯性矩阵:接受三个参数 质量m 半径r 高度h 根据计算公式计算惯性矩阵-->
<xacro:macro name="cylinder_inertial_matrix" params="m r h">
  <inertial>
    <mass value="${m}" />
    <inertia ixx="${m*(3*r*r+h*h)}" ixy="0" ixz="0"
             iyy="${m*(3*r*r+h*h)/12}" iyz="0" izz="${m*r*r/2}" />
  </inertial>
</xacro:macro>

<!--定义立方体惯性矩阵  m:质量 l w h: 立方体长 宽 高 -->
<xacro:macro name="Box_inertial_matrix" params="m l w h">
       <inertial>
               <mass value="${m}" />
               <inertia ixx="${m*(h*h + l*l)/12}" ixy = "0" ixz = "0"
                   iyy="${m*(w*w + l*l)/12}" iyz= "0"
                   izz="${m*(w*w + h*h)/12}" />
       </inertial>
</xacro:macro>

<!--定义轮子-->
<xacro:macro name="wheel" params="prefix x_positive y_positive">
  <joint name="${prefix}_wheel_joint" type="continuous">
    <!--根据具体位置计算链接节点的位置-->
    <origin xyz= "${x_positive*0.5*(length_middle_distance+wheel_radius)} ${y_positive*0.5*(wheel_wide+base_wide)} ${0.5*wheel_radius}" 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_wide}" />
    </geometry>
    <material name="gray" />
    </visual>
  </link>

  </xacro:macro>

<xacro:macro name="my_robot_base">  
  <xacro:wheel prefix="front_left" x_positive="1" y_positive="-1" />
  <xacro:wheel prefix="front_right" x_positive="1" y_positive="1" />
  <xacro:wheel prefix="last_left" x_positive="-1" y_positive="-1" />
  <xacro:wheel prefix="last_right" x_positive="-1" y_positive="1" />

  <link name="tast_link">
    <visual>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <geometry>
        <sphere radius="4" />
      </geometry>
      <material name="yellow" rgba="1 0 0 0.5" />
    </visual>
  </link>
</xacro:macro>
  

</robot>

两个文件的区别仅仅是将base_link改为其他名字。

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值