将GNSS、IMU、LiDAR、Camera传感器和机器人的base分别放在不同的文件中。这样可以提高模型的可维护性和模块化。下面是一个示例,展示如何将这些部分分别放在不同的.xacro文件中,然后通过导入的方式组合在一起。

1. 创建基础文件:my_robot.xacro

这个文件将包含机器人的基本结构和导入其他部分的指令。

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

  <!-- Import base link Xacro file -->
  <xacro:include filename="base_link.xacro"/>

  <!-- Import GNSS sensor Xacro file -->
  <xacro:include filename="gnss_sensor.xacro"/>

  <!-- Import IMU sensor Xacro file -->
  <xacro:include filename="imu_sensor.xacro"/>

  <!-- Import LiDAR sensor Xacro file -->
  <xacro:include filename="lidar_sensor.xacro"/>

  <!-- Import Camera sensor Xacro file -->
  <xacro:include filename="camera_sensor.xacro"/>

  <!-- Instantiate sensors -->
  <xacro:gnss_sensor parent="base_link" xyz="0.25 0 0.1" rpy="0 0 0"/>
  <xacro:imu_sensor parent="base_link" xyz="0.25 0 0.15" rpy="0 0 0"/>
  <xacro:lidar_sensor parent="base_link" xyz="0.25 0 0.2" rpy="0 0 0"/>
  <xacro:camera_sensor parent="base_link" xyz="0.25 0 0.25" rpy="0 0 0"/>

</robot>
  • 实例化传感器:

    • <xacro:gnss_sensor parent="base_link" xyz="0.25 0 0.1" rpy="0 0 0"/>:在 base_link 上实例化 GNSS 传感器,位置为 x=0.25, y=0, z=0.1,姿态为 r=0, p=0, y=0。
    • <xacro:imu_sensor parent="base_link" xyz="0.25 0 0.15" rpy="0 0 0"/>:在 base_link 上实例化 IMU 传感器,位置为 x=0.25, y=0, z=0.15,姿态为 r=0, p=0, y=0。
    • <xacro:lidar_sensor parent="base_link" xyz="0.25 0 0.2" rpy="0 0 0"/>:在 base_link 上实例化 LiDAR 传感器,位置为 x=0.25, y=0, z=0.2,姿态为 r=0, p=0, y=0。

2. 创建base_link.xacro文件

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

  <!-- Robot base link -->
  <link name="base_link">
    <visual>
      <geometry>
        <box size="0.5 0.5 0.2"/>
      </geometry>
      <material name="blue">
        <color rgba="0 0 1 1"/>
      </material>
    </visual>
    <collision>
      <geometry>
        <box size="0.5 0.5 0.2"/>
      </geometry>
    </collision>
    <inertial>
      <mass value="10"/>
      <inertia ixx="1" ixy="0" ixz="0" iyy="1" iyz="0" izz="1"/>
    </inertial>
  </link>

</robot>

3. 创建gnss_sensor.xacro文件

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

  <!-- GNSS Sensor -->
  <xacro:macro name="gnss_sensor" params="parent xyz rpy">
    <link name="gnss_link">
      <visual>
        <geometry>
          <box size="0.05 0.05 0.02"/>
        </geometry>
        <material name="green">
          <color rgba="0 1 0 1"/>
        </material>
      </visual>
      <collision>
        <geometry>
          <box size="0.05 0.05 0.02"/>
        </geometry>
      </collision>
      <inertial>
        <mass value="0.1"/>
        <inertia ixx="0.001" ixy="0" ixz="0" iyy="0.001" iyz="0" izz="0.001"/>
      </inertial>
    </link>
    <joint name="gnss_joint" type="fixed">
      <parent link="${parent}"/>
      <child link="gnss_link"/>
      <origin xyz="${xyz}" rpy="${rpy}"/>
    </joint>
  </xacro:macro>

</robot>

4. 创建imu_sensor.xacro文件

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

  <!-- IMU Sensor -->
  <xacro:macro name="imu_sensor" params="parent xyz rpy">
    <link name="imu_link">
      <visual>
        <geometry>
          <box size="0.05 0.05 0.02"/>
        </geometry>
        <material name="yellow">
          <color rgba="1 1 0 1"/>
        </material>
      </visual>
      <collision>
        <geometry>
          <box size="0.05 0.05 0.02"/>
        </geometry>
      </collision>
      <inertial>
        <mass value="0.1"/>
        <inertia ixx="0.001" ixy="0" ixz="0" iyy="0.001" iyz="0" izz="0.001"/>
      </inertial>
    </link>
    <joint name="imu_joint" type="fixed">
      <parent link="${parent}"/>
      <child link="imu_link"/>
      <origin xyz="${xyz}" rpy="${rpy}"/>
    </joint>
  </xacro:macro>

</robot>

5. 创建lidar_sensor.xacro文件

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

  <!-- LiDAR Sensor -->
  <xacro:macro name="lidar_sensor" params="parent xyz rpy">
    <link name="lidar_link">
      <visual>
        <geometry>
          <cylinder radius="0.05" length="0.1"/>
        </geometry>
        <material name="gray">
          <color rgba="0.5 0.5 0.5 1"/>
        </material>
      </visual>
      <collision>
        <geometry>
          <cylinder radius="0.05" length="0.1"/>
        </geometry>
      </collision>
      <inertial>
        <mass value="0.5"/>
        <inertia ixx="0.01" ixy="0" ixz="0" iyy="0.01" iyz="0" izz="0.01"/>
      </inertial>
    </link>
    <joint name="lidar_joint" type="fixed">
      <parent link="${parent}"/>
      <child link="lidar_link"/>
      <origin xyz="${xyz}" rpy="${rpy}"/>
    </joint>
  </xacro:macro>

</robot>

6. 创建camera_sensor.xacro文件

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

  <!-- Camera Sensor -->
  <xacro:macro name="camera_sensor" params="parent xyz rpy">
    <link name="camera_link">
      <visual>
        <geometry>
          <box size="0.03 0.03 0.03"/>
        </geometry>
        <material name="black">
          <color rgba="0 0 0 1"/>
        </material>
      </visual>
      <collision>
        <geometry>
          <box size="0.03 0.03 0.03"/>
        </geometry>
      </collision>
      <inertial>
        <mass value="0.2"/>
        <inertia ixx="0.001" ixy="0" ixz="0" iyy="0.001" iyz="0" izz="0.001"/>
      </inertial>
    </link>
    <joint name="camera_joint" type="fixed">
      <parent link="${parent}"/>
      <child link="camera_link"/>
      <origin xyz="${xyz}" rpy="${rpy}"/>
    </joint>
  </xacro:macro>

</robot>

7. 将.xacro文件转换为.urdf文件

您可以使用以下命令将.xacro文件转换为.urdf文件:

rosrun xacro xacro --inorder my_robot.xacro > my_robot.urdf

8. 在Gazebo中加载模型

创建一个.world文件(例如my_world.world)并包含您的机器人模型:

<?xml version="1.0"?>
<sdf version="1.6">
  <world name="default">
    <include>
      <uri>model://ground_plane</uri>
    </include>
    <include>
      <uri>model://sun</uri>
    </include>
    <model name="my_robot">
      <include>
        <uri>model://my_robot</uri>
      </include>
    </model>
  </world>
</sdf>

然后在终端中运行:

roslaunch gazebo_ros empty_world.launch world_name:=my_world.world
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐