实用指南:机器人描述文件xacro(urdf扩展)

一、定义

通俗来说,xacro 就是 urdf 文件的一种“进阶版”,它是用来简化和优化机器人的描述文件,使得多个机器人可以共享同样的部件和结构,避免重复编写相同的代码。

假设你有很多机器人,它们的结构相似,比如都有轮子、传感器、臂部等部件。每次你需要为这些机器人写 urdf 文件时,都要重复描述每个部件(比如轮子、关节、传感器等)。这样写非常繁琐且容易出错。

xacro 的作用 :就是通过封装和参数化这些部件,使得你可以更方便地重用已有的结构,只需要少量的修改就可以生成不同机器人的 urdf 文件。类似C语言中函数的封装。

二、xacro 文件常见组成部分

1. 命名空间声明

该命名空间的定义使得文件中的 xacro 特性能够正常工作,让你在模型中使用宏和其他 xacro 相关的功能。

2. 定义宏

宏用于封装可复用的结构,例如机器人关节、链接等。你可以定义一个宏并在多个地方调用它,宏可以带有参数,这样就可以创建不同配置的部件。

<xacro:macro name="wheel" params="name x_offset y_offset">

<!-- 定义轮子的link和joint -->

</xacro:macro>


  

3. 调用宏

 宏定义完成后,可以在 xacro 文件的任意位置调用宏来生成相应的部件。调用时,可以传递参数值来定制生成的部件。


4. 定义参数

你可以在 xacro 文件中定义变量(参数),这些变量可以在宏中使用,也可以传递给其它部分。这使得配置变得更加灵活和动态。

在这个例子中,wheel_radius 是一个参数,表示轮子的半径。在后续的代码中,可以直接使用这个参数。

5. 条件语句

xacro 支持条件语句,你可以根据不同的条件生成不同的机器人模型或某些部件。例如,如果你希望某个部件只有在某个参数为 true 时才创建,你可以使用 xacro:ifxacro:else


  

6. 转换 xacro 文件为 urdf

你可以使用 ROS 提供的工具来将 xacro 文件转换为 URDF 文件,生成的 URDF 文件可以直接用于机器人仿真、控制等。

rosrun xacro xacro mybot.xacro > mybot.urdf

7. gazebo标签

在 XACRO 文件中,<gazebo> 标签用于定义与 Gazebo 仿真环境 相关的设置和插件。Gazebo 是一个强大的仿真工具,用于模拟机器人、传感器以及与环境的交互。当你在 XACRO 中使用 gazebo 标签时,通常是为了控制仿真中的物理属性、传感器和控制插件。

三、代码示例

 1. gazebo标签使用(仿真参数配置)

功能:用于描述一些物体以及传感器在gazebo仿真中的一些数据,例如摩擦系数、速度等等。

mybot_gazebo.xacro



  
  
  
  
  
  
    Gazebo/DarkGrey  
  
  
  
    0.5   
    0.5   
    500000.0 
    10.0    
    0.001  
    1.0  
    1 0 0 
    Gazebo/DarkGrey  
  
  
  
    0.5   
    0.5   
    500000.0 
    10.0    
    0.001  
    1.0  
    1 0 0 
    Gazebo/FlatBlack  
  
  
  
    0.1   
    0.1   
    500000.0 
    100.0   
    0.001  
    1.0  
    Gazebo/FlatBlack  
  
  
  
    
      true 
      $(arg imu_visual) 
    
    Gazebo/FlatBlack  
  
  
  
    
      cmd_vel   
      odom   
      odom   
      world 
      true   
      base_footprint 
      false 
      true   
      true 
      false 
      30   
      left_wheel_joint  
      right_wheel_joint 
      0.180 
      0.05   
      10 
      100   
      na  
    
  
  
  
    
      true  
      imu   
      imu  
      imu  
      imu_service 
      0.0  
      0  
      
        
          gaussian  
          
            0.0   
            2e-4 
            0.0000075  
            0.0000008 
          
          
            0.0   
            1.7e-2 
            0.1  
            0.001  
          
        
      
    
  
  
  
    Gazebo/FlatBlack  
    
      0 0 0 0 0 0 
      $(arg laser_visual)  
      7  
      
        
          
            720  
            0.5  
            0.0  
            6.28319 
          
        
        
          0.120  
          12.0   
          0.015 
        
        
          gaussian  
          0.0   
          0.01 
        
      
      
      
        scan  
        base_laser_link 
      
    
  
  
  
    
      true  
      $(arg camera_visual)  
      
          1.085595 
          
              640  
              480 
              R8G8B8 
          
          
              0.03  
              100  
          
      
      
      
        true  
        30.0  
        /  
        base_camera_link  
        image_raw  
        camera_info  
        0.07  
        0.0  
        0.0
        0.0
        0.0
        0.0
      
    
  

2. 引用仿真配置并定义机器人模型(结构)

功能:这段代码描述了一个机器人(mybot)的 物理模型和结构,代码通过定义多个链接(link)和关节(joint)来描述机器人的组成部分,包括主体、轮子、支撑轮、激光雷达等。当我们构建不同的机器人模型时,都可以引用之前的仿真配置。

 注意:这两个文件中的 <robot name="mybot" xmlns:xacro="http://ros.org/wiki/xacro"> 中的 name 字段应该一致。

mybot1.xacro 




  
  
  
  
  
  
    
    
      
  
  
  
      
       
       
      
    
      
      
          
        
       
      
            
      
    
     
       
       
         
     
   
  
  
  
      
       
       
       
    
      
        
          
      
      
          
      
    
    
       
     
         
     
    
  
  
  
      
      
      
      
  
  
  
      
       
       
       
    
      
        
          
      
      
          
      
    
    
     
     
         
     
    
  
  
  
      
      
      
      
  
  
  
      
       
       
       
    
      
        
          
      
      
          
      
    
    
       
     
         
     
    
  
  
  
      
    
    
      
  
  
  
    
      
          
      
      
            
      
    
  
  
  
    
    
      
  
  
  
      
        
          
      
      
            
      
    
  
  
  
    
    
      
  
  
  
      
        
          
      
      
            
      
    
  
  
  
    
    
      
  

四、加载仿真模型(含传感器的机器人)

1. 编写launch文件

最终我们运行的mybot1.xacro ,里面包含了机器人的模型和仿真配置文件。编写launch文件来启动仿真模型。

simulation_robot.launch


  
    
    
    
  
  
  
  
  
  
  
  
  
  

注意:

2. 实际效果

posted @ 2025-11-23 18:40  gccbuaa  阅读(27)  评论(0)    收藏  举报