第四章、手撸阿克曼小车URDF代码
01前言
上节说到通过twist消息控制从solidworks导出的阿克曼小⻋,但后续的开发⼯作中发现了从SW导出的模型做仿真有⼀些弊端,导致仿真的效果并不理想,所以博主准备⼿写⼀个urdf代码,并通过模型替代法来实现tianracer的仿真,本次写的urdf⽂件是基于tianracer小⻋1:1⽐例来编写的,⽅便后续的模型替换⼯作。
02创建小车功能包
在⼯作空间内创建racebot_description功能包:
catkin_create_pkg racebot_description roscpp rospy std_msgs
在该⼯作空间下创建config、launch、rviz_config、scripts、urdf等⽂件夹,此时准备⼯作已经做完。
03配置创建环境
我们需要创建⼀个URDF⽂件与能让模型在rviz中显⽰的launch⽂件,⽅便我们创造模型。以创建小⻋base_link模型为例:
在urdf⽂件夹中创建racebot.urdf⽂件,⾸先创建base_link,由于根link不能包含碰撞属性,否则gazebo仿真中会报错,所以我们将base_footprint作为根link,并且将base_footprint设置为小⻋贴到地⾯的位置,由于该小⻋是1:1仿真tianracer的,所以base_link在base_footprint正上⽅32mm处,如下代码所⽰:
<?xml version="1.0" encoding="utf-8"?>
<robot name="racebot">
<link name="base_footprint">
</link>
<link name="base_link">
<visual>
<geometry>
<box size="0.28 0.1 0.03"/>
</geometry>
<origin xyz="0 0 0" rpy="0 0 0" />
<material name="yellow">
<color rgba="0.8 0.3 0.1 0.5" />
</material>
</visual>
<collision>
<geometry>
<box size="0.28 0.1 0.03" />
</geometry>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
</collision>
</link>
<joint name="base_link_joint" type="fixed">
<parent link="base_footprint" />
<child link="base_link"/>
<origin xyz="0 0 0.032" rpy="0 0 0" />
</joint>
</robot>
接着在launch⽂件夹中创建⼀个可以将小⻋模型在rviz中显⽰的launch⽂件racebot_rviz.launch,并且能够加载上述urdf⽂件:
<?xml version="1.0" encoding="UTF-8"?>
<launch>
<!-- 将 urdf 文件内容设置进参数服务器 -->
<param name="robot_description" textfile="$(find racebot_description)/urdf/racebot.urdf" />
<!-- 启动 rivz -->
<!-- <node pkg="rviz" type="rviz" name="rviz_test" args="-d $(find racebot_description)/config/racebot.rviz" /> -->
<node pkg="rviz" type="rviz" name="rviz" args="" />
<!-- 启动机器人状态和关节状态发布节点 -->
<node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher" />
<node pkg="joint_state_publisher" type="joint_state_publisher" name="joint_state_publisher" />
<!-- 启动图形化的控制关节运动节