基于ros的机器人运动控制相关学习(一)

基础知识

机器人控制分层

底层包括三个级别:(1)发动机、编码器;(2)发动机控制器和驱动器;(3)驱动程序和pid控制器整合到一起的基控制器。
中间层:movebase级别,路径规划
高层:slam,语义,图像
基于ros的机器人运动控制相关学习(一)_第1张图片参考https://blog.csdn.net/ktigerhero3/article/details/65443920

具体操作过程如下:
可知机器人简单控制至少
(1)编辑机器人模型
(2)编辑gazebo属性,加载连接器控制驱动插件
(3)编辑gazebo属性,加载ros控制插件
(4)编辑.launch文件
(5)安装键盘控制器包
(6)运行.launch和键盘控制器程序,让小车动起来。

首先应进行urdf和xacro的相关学习:
参考:https://blog.csdn.net/sunbibei/article/details/52297524
和https://blog.csdn.net/qingdu007/article/details/97780621

进行xacro文件编写:
比较三篇参考博客发现,一个主要不同点就是宏定义的不同,ros控制机器人运动中,仅定义了惯性,而xacro文件编写学习笔记中定义了大段的重复代码,节省了时间。但有一个疑问,就是soloworks的urdf文件中没个link位置不一样,二参考博客中则相同,所以暂时先按参考博客中走。
本文拟将大段重复代码定义,从而节省时间。

修改过程中发现SolidWorks导出的urdf文件中包含:collision,inertial,visual三个部分,而参考博客中ros控制机器人运动中则无inertial。暂时按照有inertial进行修改。
先是定义了宏,然后描述了parent link,最后定义

<?xml version="1.0"?>

<robot xmlns:xacro="http://www.ros.org/wiki/xacro" 
       xmlns:sensor="http://playerstage.sourceforge.net/gazebo/xmlschema/#sensor"
       xmlns:controller="http://playerstage.sourceforge.net/gazebo/xmlschema/#controller"
       xmlns:interface="http://playerstage.sourceforge.net/gazebo/xmlschema/#interface"
    name="smallrobot_xacro">


    <xacro:macro name="default_leg" params="number">
               <link name="leg_${number}">
                 <visual>
                   <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
                   <geometry>
                     <mesh
                       filename="package://smallrobot/meshes/robot.STL"/>
                   </geometry>
                   <material name="black">
                     <color rgba="0 0 0 1"/>
                   </material>
                 </visual>
                 <collision>
                   <origin xyz="0 0 0" rpy="0 0 0"
                   <geometry>
                     <mesh
                       filename="package://smallrobot/meshes/robot.STL"/>
                   </geometry>
                 </collision>
                 <inertial>
                   <mass value="0.006"/>
                   <inertia ixx="0.0" ixy="0" ixz="0" iyy="0" iyz="0" izz="0"/>
                 </inertial>
               </link>
               <joint name="r_${number}" type="continuous">
                 <parent link = "robot"/>
                 <child link = "leg_${number}"/>
                 <origin xyz="0 0 0" rpy="0 0 0"/>
                 <axis xyz="0 1 0"/>
               </joint>          
    </xacro:macro>
    <link name="robot">
                 <visual>
                   <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
                   <geometry>
                     <mesh
                       filename="package://smallrobot/meshes/robot.STL"/>
                   </geometry>
                   <material name="gray">
                     <color rgba="0 0 0 1"/>
                   </material>
                 </visual>
                 <collision>
                   <origin xyz="0 0 0" rpy="0 0 0"
                   <geometry>
                     <mesh
                       filename="package://smallrobot/meshes/robot.STL"/>
                   </geometry>
                 </collision>
                 <inertial>
                   <mass value="0.12793"/>
                   <inertia ixx="0.0" ixy="0" ixz="0" iyy="0" iyz="0" izz="0"/>
                 </inertial>
               </link>
    <xacro:default_leg number="1"/>
    <xacro:default_leg number="2"/>
    <xacro:default_leg number="3"/>
    <xacro:default_leg number="4"/>
    <xacro:default_leg number="5"/>
    <xacro:default_leg number="6"/>  
</robot>

<!-- Drive controller -->
<gazebo>
  <plugin name="skid_steer_drive_controller" filename="libgazebo_ros_skid_steer_drive.so">
    <updateRate>100.0</updateRate>
    <robotNamespace></robotNamespace>
    <leftfrontjoint>r4</leftFrontJoint>
    <rightFrontJoint>r3</rightFrontJoint>
    <leftbackJoint>r6</leftbackJoint>
    <rightbackJoint>r1</rightbackJoint>
    <leftmiddleJoint>r5</leftmiddleJoint>
    <rightmiddleJoint>r2</rightmiddleJoint>
    <wheelSeparation>4</wheelSeparation>
    <wheelDiameter>0.1</wheelDiameter>
    <commandTopic>cmd_vel</commandTopic>
    <odometryTopic>odom</odometryTopic>
    <robotBaseFrame>base_footprint</robotBaseFrame>
    <odometryFrame>odom</odometryFrame>
    <torque>1</torque>
    <topicName>cmd_vel</topicName>
    <broadcastTF>1</broadcastTF>
  </plugin>
</gazebo>

<!-- ros_control plugin -->
  <gazebo>
    <plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so">
      <robotNamespace>/robot</robotNamespace>

    </plugin>
  </gazebo>

在别人基础上修改了一下,但是出现了问题。
基于ros的机器人运动控制相关学习(一)_第2张图片根据参考博客换风格修改之后,仍然不行,问题同上。

你可能感兴趣的:(基于ros的机器人运动控制相关学习(一))