ROS仿真机器人学习笔记二:创建4轮小车模型及相关xraco文件修改

这篇具有很好参考价值的文章主要介绍了ROS仿真机器人学习笔记二:创建4轮小车模型及相关xraco文件修改。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

跟着上一节博主的教程,可以把ROS内的机器人仿真大概走一遍。不过大家最好还是在一个性能比较好的机器上运行,后来我把虚拟机拷贝到了台式机,运行起来顺畅多了。
下面就准备根据自己的模型在走一遍。
我自己的模型是一个四轮小车的模型,四个驱动轮。原来的模式是双驱动轮圆形的差速底盘。所以第一步就是来制作描述机器人模型的XACRO文件。


提示:以下是本篇文章正文内容,下面案例可供参考

一、构建新的XACRO文件

XACRO文件是URDF文件的一个优化版本,可以根据URDF文件修改而来,而URDF文件也可以从SOLIDWORKS来导入,那么感觉起来这样的通路很顺畅,但是还是低估了过程。
一个是主要是solidworks本身上手操作需要学习一段时间,而且从solidworks导成URDF有很多细节。后续过程也会相对麻烦。

一个是solidworks的工程实体,不是简单的方块和轮子,存在很多不规则结构,连接件等。这些在导出URDF文件的时候需要进行处理,通常将固定的结构和运动的结构体分开,单独合并。再导出。
第二个在Gazebo的仿真环境中,每个节点都要配置惯性矩阵,如果太复杂那么配置起来就太复杂了。
目前是这么理解的,因此还是简单一点,用矩形和圆形来简单的实现吧。

在原来的工程上修改吧:

1.变圆形底盘为方形底盘

    <xacro:property name="base_width" value="0.46"/>  
    <xacro:property name="base_length" value="0.66"/> 
    <xacro:property name="base_height" value="0.2"/>
 
    <link name="base_link">
      <visual>
        <geometry>
           <box size="${base_length} ${base_width} ${base_height}"/>
        </geometry>
        <origin xyz="0 0 ${base_height/2 + earth_space}" rpy="0 0 0" />
        <material name="yellow">
          <color rgba="0.5 0.3 0.0 0.5" />
        </material>
      </visual>

    </link>

定义BOX类型的长宽高三个变量,然后复制模板过来就可以了。主要的是origin的z坐标,如果是0的话,RVIZ里面就会看到机器人在地平线以下了。

2.设置左右4个轮子

<!-- 驱动轮 -->
    <!-- 驱动轮属性 -->
    <xacro:property name="wheel_radius" value="0.084" /><!-- 半径 -->
    <xacro:property name="wheel_length" value="0.05" /><!-- 宽度 -->
    <xacro:property name="wheel_x" value="0.18"/>  
    <xacro:property name="wheel_y" value="0.18"/> 
    <!-- 驱动轮宏实现 -->
    <xacro:macro name="add_wheels" params="name flag flag1" >
      <link name="${name}_wheel">
        <visual>
          <geometry>
            <cylinder radius="${wheel_radius}" length="${wheel_length}" />
          </geometry>
          <origin xyz="0.0 0.0 0.0" rpy="${PI / 2} 0.0 0.0" />
          <material name="black" />
        </visual>
      </link>

      <joint name="${name}_wheel2base_link" type="continuous">
        <parent link="base_link" />
        <child link="${name}_wheel" />
        <origin xyz="${flag1 * wheel_x} ${flag * wheel_y} ${-(earth_space + base_link_length / 2 - wheel_radius) }" />
        <axis xyz="0 1 0" />
      </joint>
    </xacro:macro>

    <xacro:add_wheels name="fleft" flag="1" flag1="1"/>
    <xacro:add_wheels name="fright" flag="-1" flag1="1"/>
    <xacro:add_wheels name="rleft" flag="1" flag1="-1"/>
    <xacro:add_wheels name="rright" flag="-1" flag1="-1"/>

原来的轮子宏定义只有1个flag参数来设置左右,这里增加了一个来设置前后。wheel_x wheel_y 是指轮子与中心点的距离,这里四个轮子是居中对称的。

3.设置激光雷达

    <!-- 雷达属性 -->
    <xacro:property name="laser_length" value="0.05" /> <!-- 雷达长度 -->
    <xacro:property name="laser_radius" value="0.03" /> <!-- 雷达半径 -->
    <xacro:property name="laser_x" value="0.2" /> <!-- 雷达安装的x坐标 -->
    <xacro:property name="laser_y" value="0.0" /> <!-- 雷达安装的y坐标 -->
    <xacro:property name="laser_z" value="0.24" /> <!-- 雷达安装的z坐标:支架高度 / 2 + 雷达高度 / 2  -->

    <!-- 雷达关节以及link -->
    <link name="laser">
        <visual>
            <geometry>
                <cylinder radius="${laser_radius}" length="${laser_length}" />
            </geometry>
            <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
            <material name="black" />
        </visual>
    </link>

    <joint name="laser2support" type="fixed">
        <parent link="base_link" />
        <child link="laser" />
        <origin xyz="${laser_x} ${laser_y} ${laser_z}" />
    </joint>

激光雷达这里删除了原来的支撑杆,直接固定到了底盘的上方,这里parent link要记得改为 base_link。不然找不到参考平面了。

二、惯性矩阵设置

1.head.xacro

    <xacro:macro name="box_inertia" params="m w h d">
        <inertial>
        <origin xyz="0 0 0" rpy="${pi/2} 0 ${pi/2}"/>
        <mass value="${m}"/>
        <inertia ixx="${(m/12) * (h*h + d*d)}" ixy="0.0" ixz="0.0" iyy="${(m/12) * (w*w + d*d)}" iyz="0.0" izz="${(m/12) * (w*w + h*h)}"/>
        </inertial>
    </xacro:macro>

    <xacro:macro name="cylinder_inertia" params="m r h">
        <inertial>
        <origin xyz="0 0 0" rpy="${pi/2} 0 0" />
        <mass value="${m}"/>
        <inertia ixx="${(m/12) * (3*r*r + h*h)}" ixy = "0" ixz = "0" iyy="${(m/12) * (3*r*r + h*h)}" iyz = "0" izz="${(m/2) * (r*r)}"/>
        </inertial>
    </xacro:macro>

这里在head.xacro增加了两种惯性矩阵宏定义,其实跟上面的一样,也是从别的参考那里复制过来的。分别是计算长方体和圆环的惯性矩阵。

2.修改car_base.xacro

      <collision>
        <geometry>
          <box size="${base_length} ${base_width} ${base_height}"/>
        </geometry>
      </collision>
      <xacro:box_inertia m="15" w="${base_width}" d="${base_length}" h="${base_height}"/>

这里跟着操作步骤,在里面增加相应代码就行。

        <collision>
          <origin xyz="0 0 0" rpy="${pi/2} 0 0"/>
          <geometry>
            <cylinder radius="${wheel_radius}" length="${wheel_length}"/>
          </geometry>
        </collision>

        <xacro:cylinder_inertia m="0.5" r="${wheel_radius}" h="${wheel_length}"/> 

做完这些以后,在Gazebo里看到对应的模型了。

三、运动控制设置

运动控制是在示例的move.xacro问价里面描述。
由于我们的模型是4个轮子,所以首先在原来的基础上增加两个运动轮,并修改名称。

    <xacro:joint_trans joint_name="fleft_wheel2base_link" />
    <xacro:joint_trans joint_name="fright_wheel2base_link" />
    <xacro:joint_trans joint_name="rleft_wheel2base_link" />
    <xacro:joint_trans joint_name="rright_wheel2base_link" />

1.修改运动模型

原来的文件引用的运动模式插件是
libgazebo_ros_diff_drive.so
这个插件适合于双轮差速底盘。这里应该改为:
libgazebo_ros_planar_move.so
四轮差速的模型。
这些插件应该还有很多,这里还没有深入去研究,至少还要包含像是四轮差速带转向的模型。
只有模型匹配了,后面再做导航之类的,效果才最好。
然后按照给的参考修改即可。

    <gazebo>
    <plugin name="object_controller" filename="libgazebo_ros_planar_move.so">

    <updateRate>100.0</updateRate>
    <robotNamespace>/</robotNamespace>
    <leftFrontJoint>fleft_wheel2base_link</leftFrontJoint>
    <rightFrontJoint>fright_wheel2base_link</rightFrontJoint>
    <leftRearJoint>rleft_wheel2base_link</leftRearJoint>
    <rightRearJoint>rright_wheel2base_link</rightRearJoint>
    <wheelSeparation>4</wheelSeparation>
    <wheelDiameter>0.1</wheelDiameter>
    <robotBaseFrame>base_link</robotBaseFrame>
    <torque>1</torque>
    <topicName>cmd_vel</topicName>
    <broadcastTF>0</broadcastTF>

    <odometryTopic>odom</odometryTopic>
    <odometryFrame>odom</odometryFrame>

    </plugin>
  </gazebo>

这样我们的底盘就可以在Gazebo 通过运动指令控制起来了。

总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。文章来源地址https://www.toymoban.com/news/detail-468250.html

到了这里,关于ROS仿真机器人学习笔记二:创建4轮小车模型及相关xraco文件修改的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【现代机器人学】学习笔记七:开链动力学(前向动力学Forward dynamics 与逆动力学Inverse dynamics)

    这节的内容主要讲述机器人动力学的内容。相对于本书其他部分运动学内容相比,把动力学一下子合成了一章。看完以后有三个感受: 1.本章难度相对其他章节较大,因此需要反复去看,以求对重要内容的眼熟,不求全部记住,但只求说起某块内容时,心中有数。2.阅读时一

    2024年02月14日
    浏览(47)
  • 机器人学:(1)机器人基础

    机器人的机械机构由一系列刚性构件(连杆)通过链接(关节)联结起来,机械臂的特征在于具有用于保证可移动性的臂(arm),提供灵活性的腕(wrist)和执行机器人所需完成任务的末端执行器(end - effector)。 机器人分为串联机器人与并联机器人。 运动链 是由两个或两个以

    2024年02月07日
    浏览(44)
  • 机器人学:(3)机器人运动学

    机器人运动学(Kinematics)是从几何角度描述和研究机器人的位置、速度和加速度随时间的变化规律的科学,它不涉及机器人本体的物理性质和加在其上的力。这里主要介绍机器人运动学的建模方法及逆运动学的求解方法。 机器人运动学问题主要在机器人的工作空间与关节空

    2024年02月07日
    浏览(51)
  • 机器人学基础(三):机器人运动学

    运动学问题是在不考虑引起运动的力和力矩的情况下,描述机械臂的运动。上一篇我们已经讨论了机器人运动方程的表示方法,这一篇将会讨论机器人的DH建模方法。 Denavit-Hartenberg(D-H)模型于1955年首次提出,用于描述机器人连杆和节点之间相互关系。后来逐步完善推导出了

    2024年02月09日
    浏览(52)
  • 【机器人学】逆运动学

    逆运动学 是一个非线性的求解问题,相对于正运动学较为复杂,主要是因为可解性探究、多重解以及多重解的选择等问题。例如,形如【机器人学】正运动学详解-6.4 一个简单例子中所用的六自由度机器人,其 逆运动学 可以描述为:假设我们已经知道其次变换矩阵 R T H ^RT

    2023年04月08日
    浏览(53)
  • 机器人学-正运动学

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 DH约定 正运动学 总结 本文介绍串联机械臂基础算法,并使用python和matlab进行算法设计、建模仿真。 标准DH配置  坐标系示意图  DH参数 代码如下(python):

    2024年02月15日
    浏览(42)
  • 【机器人学】一、从线性变换的角度理解机器人坐标变换

    实际应用: 为什么要标定旋转中心 在机器视觉实际应用过程中,有这样的案例:机械手要抓取物料,物料每次的角度不一样,机械手的末端工具中心与其自身的旋转中心不重合,如果想完成这个抓取的工作,有两种解决方案: 方案一:TCP标定(Tool Center Point) 一般机械手都

    2024年04月29日
    浏览(40)
  • 机器人学基础--运动学--2.3 变换矩阵

    2.3 变换矩阵 (1)齐次坐标系变换 2.1,2.1中讨论了坐标系及其平移,旋转两种变换。在实际应用中两个坐标系之间的关系往往既有平移又有旋转,因此这篇文章我们将讨论一下如何以一种更为紧凑的方式来表达两个坐标系之间的位置及姿态关系。 可以把这个问题分解开来看

    2024年02月11日
    浏览(44)
  • 【机器人学导论】惯性张量旋转和平移变换的推导

    最近遇到了一些涉及惯性张量的实际问题,比如: 对两个通过铰链连接在一起的杆,如何计算整体的惯性张量? 对于一个由多个简单部件组合成的系统,如何计算整体的惯性张量? 在网上查找计算方法的过程中,难以通过正确的找到简明的数学方法。因此我在多番查

    2024年02月08日
    浏览(42)
  • 机器人学DH参数及利用matlab符号运算推导

    重新复习了一下机器人学DH参数,并且利用matlab符号运算进行了推导,验证了公式。 图中的 坐标系定义 : 坐标系 i {i} i 的 z z z 轴 z i z_i z i ​ 和关节轴线 i i i 共线,指向任意规定。 坐标系 i {i} i 的 x x x 轴 x i x_i x i ​ 和 a i a_i a i ​ 重合,由关节 i i i 指向关节 i + 1 i+1 i

    2024年02月02日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包