基于ros的机器人运动控制相关学习(一)
基础知识
机器人控制分层
底层包括三个级别:(1)发动机、编码器;(2)发动机控制器和驱动器;(3)驱动程序和pid控制器整合到一起的基控制器。
中间层:movebase级别,路径规划
高层:slam,语义,图像
参考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>
在别人基础上修改了一下,但是出现了问题。
根据参考博客换风格修改之后,仍然不行,问题同上。
