2021.8.19~8.20---6.4、6.5/9---机器人系统仿真之URDF优化_xacro、Rviz中控制机器人模型运动

一、URDF优化_xacro

在这里插入图片描述
在这里插入图片描述

1.Xacro_快速体验

在这里插入图片描述

1)Xacro文件编写

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2)Xacro 文件转换成 urdf 文件

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.Xacro_语法详解

1)属性与算数运算

在这里插入图片描述
在这里插入图片描述

2)宏

在这里插入图片描述

在这里插入图片描述

3)文件包含

在这里插入图片描述

3.Xacro_完整使用流程示例

在这里插入图片描述

1)编写 Xacro 文件

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

·URDF文件
<robot name="mycar" xmlns:xacro="http://wiki.ros.org/xacro">

        <xacro:property name="footprint_radius" value="0.001" />
        <!-- 1.添加 base_footprint -->
         <link name="base_footprint">
                <visual>
                        <geometry>
                                <sphere radius="${footprint_radius}" />
                        </geometry>
                </visual>
        </link>   


        <!-- 2.添加底盘 -->
        <!-- 
                形状:圆柱
                半径:0.1m
                高度:0.08m
                离地间距:0.015m
         -->
        <xacro:property name="base_radius" value="0.1" />
        <xacro:property name="base_length" value="0.08" /> 
        <xacro:property name="lidi" value="0.015" />
        <xacro:property name="base_joint_z" value="${base_length / 2 + lidi}" />    
        <!-- 2-1.link -->
        <link name="base_link">
                <visual>
                        <geometry>
                                <cylinder radius="${base_radius}" length="${base_length}" />
                        </geometry>

                        <origin xyz="0 0 0" rpy="0 0 0" />

                        <material name="baselink_color">
                                <color rgba="1.0 0.5 0.2 0.5" />
                        </material>
                </visual>
        </link>
        <!-- 2-2.joint -->
        <joint name="link2footprint" type="fixed">
                <parent link="base_footprint" />
                <child link="base_link" />
                <!-- 关节z上的位置 = 车体高度/2 + 离地高度  -->
                <origin xyz="0 0 ${base_joint_z}" rpy="0 0 0" />
        </joint>

   

        <!-- 3.添加驱动轮 -->
        <!-- 
                形状:圆柱
                半径:0.0325m
                长度:0.015m
         -->

        <!-- 属性 -->
        <xacro:property name="wheel_radius" value="0.0325" />
        <xacro:property name="wheel_length" value="0.015" />
        <xacro:property name="PI" value="3.1415927" />
        <!-- 注意:结果是负数 -->
        <xacro:property name="wheel_joint_z" value="${(base_length / 2 + lidi -wheel_radius) * -1}" />

        <!-- 
            wheel_name:left 或 right
            flag: 1-1
         -->

        <xacro:macro name="wheel_func" params="wheel_name flag">

                <!-- 3-1.link -->
                <link name="${wheel_name}_wheel">
                        <visual>
                                <geometry>
                                        <cylinder radius="${wheel_radius}" length="${wheel_length}" />
                                </geometry>

                                <origin xyz="0 0 0" rpy="${PI / 2} 0 0" />

                                <material name="wheel_color">
                                        <color rgba="0 0 0 0.3" />
                                </material>
                        </visual>
                </link>


                <!-- 3-2.joint -->
                <joint name="${wheel_name}2link" type="continuous">
                        <parent link="base_link" />
                        <child link="${wheel_name}_wheel" />
                        <!-- 
                                x 无偏移
                                y 车体半径
                                z z= 车体高度 / 2 + 离地高度 - 车轮半径
                        -->
                        <origin xyz="0 ${0.1* flag} ${wheel_joint_z}" rpy="0 0 0" />
                        <axis xyz="0 1 0" />
                </joint>

        </xacro:macro >

        <xacro:wheel_func wheel_name="left" flag="1" />
        <xacro:wheel_func wheel_name="right" flag="-1" />



         


        <!-- 4.添加万向轮 -->
        <!-- 
                形状:球
                半径:0.0075m
         -->

        <xacro:property name="small_wheel_radius" value="0.0075" />
        <!-- z 的偏移量 = 车体高度 / 2 + 离地高度 - 万向轮半径 -->
        <xacro:property name="small_joint_z" value="${(base_length / 2 + lidi - small_wheel_radius) * -1}" />
        
        <xacro:macro name="small_wheel_func" params="small_wheel_name flag">         
                <!-- 4-1.link -->
                <link name="${small_wheel_name}_wheel">
                        <visual>
                                <geometry>
                                        <sphere radius="${small_wheel_radius}" />
                                </geometry>

                                <origin xyz="0 0 0" rpy="0 0 0" />

                                <material name="wheel_color">
                                        <color rgba="0 0 0 0.3" />
                                </material>
                        </visual>
                </link>

                <!-- 4-2.joint -->
                <joint name="${small_wheel_name}2link" type="continuous">
                        <parent link="base_link" />
                        <child link="${small_wheel_name}_wheel" />
                        <origin xyz="${0.08 * flag} 0 ${small_joint_z}" rpy="0 0 0" />
                        <axis xyz="0 1 0" />
                </joint>

        </xacro:macro>

        <xacro:small_wheel_func small_wheel_name="front" flag="1" />
        <xacro:small_wheel_func small_wheel_name="back" flag="-1" />
      
</robot> 

2)集成launch文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

·launch文件
<launch>
        <!-- 1.在参数服务器载入 urdf 文件 -->
        <!-- <param name="robot_description" textfile="$(find urdf01_rviz)/urdf/xacro/demo05_car_base.urdf" /> -->
        <param name="robot_description" command="$(find xacro)/xacro $(find urdf01_rviz)/urdf/xacro/demo05_car_base.urdf.xacro" />
        <!-- 2.启动 rviz -->
        <node pkg="rviz" type="rviz" name="rviz" args="-d $(find urdf01_rviz)/config/show_mycar.rviz"/>
         <!-- 3.添加关节状态发布节点 -->
        <node pkg="joint_state_publisher" type="joint_state_publisher" name="joint_state_publisher" />
         <!-- 4.添加机器人状态发布节点 -->
        <node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher" />
        <!-- 5.添加控制关节运动的节点 -->
        <node pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" name="joint_state_publisher_gui" />
</launch>

4.Xacro_实操

在这里插入图片描述

在这里插入图片描述

1)摄像头和雷达 Xacro 文件实现

在这里插入图片描述

在这里插入图片描述

·xacro文件(摄像头)
<robot name="mycar" xmlns:xacro="http://wiki.ros.org/xacro">
        <!-- 摄像机部件 -->
        <!-- 1.参数 -->
        <!-- 
                参数:
                        连杆属性:厚度,宽度,高度
                        关节属性:x y z
         -->
         <xacro:property name="camera_length" value="0.02" />
         <xacro:property name="camera_width" value="0.05" />
         <xacro:property name="camera_height" value="0.05" />
         <xacro:property name="joint_camera_x" value="0.08" />
         <xacro:property name="joint_camera_y" value="0" />
         <xacro:property name="joint_camera_z" value="${base_length / 2 + camera_height / 2}" />

        <!-- 2.设计连杆和关节 -->
        <link name="camera">
                <visual>
                        <geometry>
                                <box size="${camera_length} ${camera_width} ${camera_height}" />
                        </geometry>

                        <material name="black">
                                <color rgba="0 0 0 0.8" />
                        </material>
                </visual>
        </link>

        <joint name="camera2base" type="fixed">
                <parent link="base_link" />
                <child link="camera" />
                <origin xyz="${joint_camera_x} ${joint_camera_y} ${joint_camera_z}" rpy="0 0 0" />
        </joint>

</robot >

在这里插入图片描述
在这里插入图片描述

·xacro文件(雷达)
<robot name="mycar" xmlns:xacro="http://wiki.ros.org/xacro">
        <!-- 雷达部件 -->
        <!-- 
                1.支架
                        支架尺寸:半径 高度
                        关节偏移量:x y z
                2.雷达
                        雷达尺寸:半径 高度
                        关节偏移量:x y z
         -->
         <xacro:property name="support_radius" value="0.01" />
         <xacro:property name="support_length" value="0.15" />
         <xacro:property name="laser_radius" value="0.03" />
         <xacro:property name="laser_length" value="0.05" />

         <xacro:property name="joint_support_x" value="0" />
         <xacro:property name="joint_support_y" value="0" />
         <!-- z = 车体高度 / 2 + 支架高度 / 2 -->
         <xacro:property name="joint_support_z" value="${base_length / 2 + support_length / 2}" />

         <xacro:property name="joint_laser_x" value="0" />
         <xacro:property name="joint_laser_y" value="0" />
         <!-- z = 支架高度 / 2 + 雷达高度 / 2 -->
         <xacro:property name="joint_laser_z" value="${support_length / 2 + laser_length / 2} " />


        <!-- 1.支架 -->
         <link name="support">
                <visual>
                        <geometry>
                                <cylinder radius="${support_radius}" length="support_length" />
                        </geometry>

                        <material name="yellow">
                                <color rgba="0.8 0.5 0.0 0.5" />
                        </material>
                </visual>
        </link>

        <joint name="support2base" type="fixed">
                <parent link="base_link" />
                <child link="support" />
                <origin xyz="${joint_support_x} ${joint_support_y} ${joint_support_z}" rpy="0 0 0" />
        </joint>

        <!-- 2.雷达 -->
        <link name="laser">
                <visual>
                        <geometry>
                                <cylinder radius="${laser_radius}" length="laser_length" />
                        </geometry>

                        <material name="black">
                                <color rgba="0 0 0 0.5" />
                        </material>
                </visual>
        </link>

        <joint name="laser2support" type="fixed">
                <parent link="support" />
                <child link="laser" />
                <origin xyz="${joint_laser_x} ${joint_laser_y} ${joint_laser_z}" rpy="0 0 0" />
        </joint>
</robot >
<robot name="mycar" xmlns:xacro="http://wiki.ros.org/xacro">
        <!-- 包含底盘,摄像头与雷达 xacro 文件 -->
        <xacro:include filename="demo05_car_base.urdf.xacro">
        <xacro:include filename="demo06_car_camera.urdf.xacro">
        <xacro:include filename="demo07_car_laser.urdf.xacro">
</robot >
·launch文件
<launch>
        <!-- 1.在参数服务器载入 urdf 文件 -->
        <!-- <param name="robot_description" textfile="$(find urdf01_rviz)/urdf/xacro/car.urdf" /> -->
        <param name="robot_description" command="$(find xacro)/xacro $(find urdf01_rviz)/urdf/xacro/car.urdf.xacro" />
        <!-- 2.启动 rviz -->
        <node pkg="rviz" type="rviz" name="rviz" args="-d $(find urdf01_rviz)/config/show_mycar.rviz"/>
         <!-- 3.添加关节状态发布节点 -->
        <node pkg="joint_state_publisher" type="joint_state_publisher" name="joint_state_publisher" />
         <!-- 4.添加机器人状态发布节点 -->
        <node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher" />
        <!-- 5.添加控制关节运动的节点 -->
        <node pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" name="joint_state_publisher_gui" />
</launch>

二、Rviz中控制机器人模型运动

在这里插入图片描述

1.Arbotix使用流程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.创建新功能包,准备机器人 urdf、xacro

在这里插入图片描述

3.添加 arbotix 所需的配置文件

在这里插入图片描述

·arbotix配置文件

controllers: {
      #单控制器设置 
      base_controller: {
            # 类型:差速控制器
            type: diff_controller,
            # 参考坐标
            base_frame_id: base_footprint,
            # 两个轮子之间的距离
            base_width: 0.2,
            # 控制频率
            ticks_meter: 2000,
            # PID控制参数,是机器人车轮快速达到预期速度
            kp: 12,
            kd: 12,
            ki: 0,
            ko: 50,
            # 加速限制
            accel_limit: 1.0
      }
}

4.launch 文件中配置 arbotix 节点

在这里插入图片描述

·launch文件

<launch>
        <!-- 1.在参数服务器载入 urdf 文件 -->
        <!-- <param name="robot_description" textfile="$(find urdf01_rviz)/urdf/xacro/car.urdf" /> -->
        <param name="robot_description" command="$(find xacro)/xacro $(find urdf01_rviz)/urdf/xacro/car.urdf.xacro" />
        <!-- 2.启动 rviz -->
        <node pkg="rviz" type="rviz" name="rviz" args="-d $(find urdf01_rviz)/config/show_mycar.rviz"/>
         <!-- 3.添加关节状态发布节点 -->
        <node pkg="joint_state_publisher" type="joint_state_publisher" name="joint_state_publisher" />
         <!-- 4.添加机器人状态发布节点 -->
        <node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher" />
        <!-- 5.添加控制关节运动的节点 -->
        <node pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" name="joint_state_publisher_gui" />
        <!-- 集成 arbotix 运动控制节点,并且家在参数 -->
        <node pkg="arbotix_python" type="arbotix_driver" name="driver" output="screen">
                <rosparam command="load" file="$(find urdf01_rviz)/config/control.yaml" />
                <param name="sim" value="true" />
        </node>
</launch>

5.启动launch文件并控制机器人模型运动

在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值