赞
踩
URDF全称为Unified Robot Description Format,中文可以翻译为“统一机器人描述格式”。与计算机文件中的.txt文本格式、.jpg图像格式等类似,URDF是一种基于XML规范、用于描述机器人结构的格式。根据该格式的设计者所言,设计这一格式的目的在于提供一种尽可能通用(as general as possible)的机器人描述规范。
URDF文件可用于GAZEBO仿真,网上关于URDF文件用于仿真环境中的例程较多,此处不再详述,重点关注于真实机器人的导航算法。
机器人描述格式将机器人用若干个link和jiont表示,并定义其相互关系。便于ROS系统获取机器人各个组件间的tf变换。
此部分工作是基于ROS导航算法的机器人模型建立,是重要的基础工作,便于代码的维护和算法的实现。
<?xml version="1.0"?> <robot name="robot" xmlns:xacro="http://wwww.ros.org/wiki/xacro"> <xacro:property name="Pi" value="3.1416"/> <xacro:property name="box_length" value="0.324"/> <xacro:property name="box_width" value="0.242"/> <xacro:property name="box_height" value="0.093"/> <xacro:property name="wheel_diameter" value="0.1524"/> <xacro:property name="wheel_length" value="0.060"/> <xacro:property name="wheel_distance" value="0.200"/> <xacro:property name="lidar_length" value="0.030"/> <xacro:property name="lidar_diameter" value="0.060"/> <link name="base_footprint"> <origin rpy="0 0 0" xyz="0 0 0"/> </link> <joint name="base_footprint_joint" type="fixed"> <origin xyz="0 0 0" rpy="0 0 0" /> <parent link="base_footprint"/> <child link="base_link" /> </joint> <link name="base_link"> <visual> <geometry> <box size="${box_length} ${box_width} ${box_height}"/> </geometry> <origin rpy="0 0 0" xyz="0 0 ${(wheel_diameter+box_height)/2}"/> <material name="blue"> <color rgba="0 .5 .8 1"/> </material> </visual> </link> <link name="right_front_wheel"> <visual> <geometry> <cylinder length="${wheel_length}" radius="${wheel_diameter/2}"/> </geometry> <origin rpy="0 0 0" xyz="0 0 0"/> <material name="black"> <color rgba="0 0 0 1"/> </material> </visual> </link> <joint name="right_front_wheel_joint" type="continuous"> <axis xyz="0 1 0"/> <parent link="base_link"/> <child link="right_front_wheel"/> <origin rpy="${Pi/2} 0 0" xyz="${wheel_distance/2} ${-(box_width+wheel_length)/2} ${wheel_diameter/2}"/> <limit effort="100" velocity="100"/> <joint_properties damping="0.0" friction="0.0"/> </joint> <link name="right_back_wheel"> <visual> <geometry> <cylinder length="${wheel_length}" radius="${wheel_diameter/2}"/> </geometry> <origin rpy="0 0 0" xyz="0 0 0"/> <material name="black"> <color rgba="0 0 0 1"/> </material> </visual> </link> <joint name="right_back_wheel_joint" type="continuous"> <axis xyz="0 1 0"/> <parent link="base_link"/> <child link="right_back_wheel"/> <origin rpy="${Pi/2} 0 0" xyz="${-wheel_distance/2} ${-(box_width+wheel_length)/2} ${wheel_diameter/2}"/> <limit effort="100" velocity="100"/> <joint_properties damping="0.0" friction="0.0"/> </joint> <link name="left_front_wheel"> <visual> <geometry> <cylinder length="${wheel_length}" radius="${wheel_diameter/2}"/> </geometry> <origin rpy="0 0 0" xyz="0 0 0"/> <material name="black"> <color rgba="0 0 0 1"/> </material> </visual> </link> <joint name="left_front_wheel_joint" type="continuous"> <axis xyz="0 1 0"/> <parent link="base_link"/> <child link="left_front_wheel"/> <origin rpy="${Pi/2} 0 0" xyz="${wheel_distance/2} ${(box_width+wheel_length)/2} ${wheel_diameter/2}"/> <limit effort="100" velocity="100"/> <joint_properties damping="0.0" friction="0.0"/> </joint> <link name="left_back_wheel"> <visual> <geometry> <cylinder length="${wheel_length}" radius="${wheel_diameter/2}"/> </geometry> <origin rpy="0 0 0" xyz="0 0 0"/> <material name="black"> <color rgba="0 0 0 1"/> </material> </visual> </link> <joint name="left_back_wheel_joint" type="continuous"> <axis xyz="0 1 0"/> <parent link="base_link"/> <child link="left_back_wheel"/> <origin rpy="${Pi/2} 0 0" xyz="${-wheel_distance/2} ${(box_width+wheel_length)/2} ${wheel_diameter/2}"/> <limit effort="100" velocity="100"/> <joint_properties damping="0.0" friction="0.0"/> </joint> <link name="laser"> <visual> <geometry> <cylinder length="${lidar_length}" radius="${lidar_diameter/2}"/> </geometry> <material name="white"> <color rgba="1 1 1 1"/> </material> </visual> </link> <joint name="laser_joint" type="fixed"> <parent link="base_link"/> <child link="laser"/> <origin xyz="0.05 0 ${(wheel_diameter+2*box_height+lidar_length)/2}" rpy="0 0 0"/> </joint> </robot>
上述为机器人xacro描述文件,具体功能包下载地址:https://download.csdn.net/download/ustcyr/24559934
编译完成后,启动launch文件,可在rviz中看到机器人模型
roslaunch description_function robot.launch
此机器人模型仅仅定义了各个link和joint间的关系,与我现在使用的实验平台相同,包含一个激光雷达和四轮小车。可根据需求更改调整参数,与自己的实验平台相一直。
另外此文件并未添加雷达插件,四轮差分平台插件,还不能实现与GAZEBO系统间的交互。ROS与GAZEBO实际上是独立的两个模块,初学者在使用ROS和GZAEBO序偶开发时,切莫混淆两者。为了将两者连起来,就是通过这些插件和ros_control模块。
此处另附激光雷达的GAZEBO插件,电机驱动插件和四轮差分驱动控制器插件。
激光雷达:
<gazebo reference="laser"> <sensor type="ray" name="rplidar"> <pose>0 0 0 0 0 0</pose> <visualize>false</visualize> <update_rate>5.5</update_rate> <ray> <scan> <horizontal> <samples>360</samples> <resolution>1</resolution> <min_angle>-3</min_angle> <max_angle>3</max_angle> </horizontal> </scan> <range> <min>0.10</min> <max>6.0</max> <resolution>0.01</resolution> </range> <noise> <type>gaussian</type> <mean>0.0</mean> <stddev>0.01</stddev> </noise> </ray> <plugin name="gazebo_rplidar" filename="libgazebo_ros_laser.so"> <topicName>/scan</topicName> <frameName>laser_link</frameName> </plugin> </sensor> </gazebo>
电机驱动,此处以左前轮为例,剩下的三个轮子可根据自己的joint名称定义,更改joint name
的参数即可。使用xacro文件的宏定义方法来简化代码,也是可以的。
<transmission name="wheel_left_front_joint_trans">
<type>transmission_interface/SimpleTransmission</type>
<joint name="left_front_wheel_joint" />
<actuator name="wheel_left_front_joint_motor">
<hardwareInterface>VelocityJointInterface</hardwareInterface>
<mechanicalReduction>1</mechanicalReduction>
</actuator>
</transmission>
四轮差分驱动:网络和论坛上有很多两轮差分驱动的模块,四轮差分驱动的插件本人未找到,寻至ros官网,寻到此插件。
四轮与两轮并无本质区别,只是真实机器人多为四轮驱动,为了和真实机器人一致,可以使用以下代码作为差分驱动插件
<gazebo> <plugin name="skid_steer_drive_controller" filename="libgazebo_ros_skid_steer_drive.so"> <updateRate>100.0</updateRate> <robotNamespace>/</robotNamespace> <leftFrontJoint>front_left_wheel_joint</leftFrontJoint> <rightFrontJoint>front_right_wheel_joint</rightFrontJoint> <leftRearJoint>back_left_wheel_joint</leftRearJoint> <rightRearJoint>back_right_wheel_joint</rightRearJoint> <wheelSeparation>0.4</wheelSeparation> <wheelDiameter>0.215</wheelDiameter> <robotBaseFrame>base_link</robotBaseFrame> <torque>20</torque> <topicName>cmd_vel</topicName> <broadcastTF>false</broadcastTF> </plugin> </gazebo> ———————————————— 版权声明:本文为CSDN博主「yrain·」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/ustcyr/article/details/118557140
写至此,用于真实机器人建图导航算法的四轮差分驱动模型的URDF已详述,若想用GAZEBO仿真环境来模拟开发,还需关注ros_control的内容,此处不再详述。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。