ROS机器人小车建模仿真与SLAM

ROS机器人小车建模仿真与SLAM

一、在 Rviz 中显示一个盒状机器人

1.1 创建ROS功能包

找一个空闲地方,新建文件夹catkin_ws01,输入以下命令

mkdir catkin_ws01
cd catkin_ws01/
mkdir src
cd src/
catkin_init_workspace

导入依赖,在src目录下输入以下命令:

catkin_create_pkg jubot_demo urdf xacro #创建功能包、添加依赖
cd jubot_demo/
mkdir urdf
mkdir launch
mkdir meshes #存放渲染机器人模型的文件
mkdir config #存放rviz配置的文件

urdf文件夹中添加一个box_urdf.urdf文件,输入代码如下

1.2 在 launch 文件中集成 URDF 与 Rviz 在launch目录下,新建一个 box_launch.launch 文件,该 launch 文件需要启动 Rviz,并导入 urdf 文件,Rviz 启动后可以自动载入解析urdf文件,并显示机器人模型,核心问题:如何导入 urdf 文件? 在 ROS 中,可以将 urdf 文件的路径设置到参数服务器,使用的参数名是:robot_description,代码如下:

<!-- 设置参数 -->
<param name="robot_description" textfile="$(find jubot_demo)/urdf/box_urdf.urdf" />

<!-- 启动 rviz -->
<node pkg="rviz" type="rviz" name="rviz" />

1.3 在 Rviz 中显示机器人模型

先进行编译,再配置环境变量,然后启动rviz

catkin_make
catkin_make install
source devel/setup.bash
echo $ROS_PACKAGE_PATH

启动launch文件

roslaunch src/jubot_demo/launch/box_launch.launch

rviz 启动后,会发现并没有盒装的机器人模型,这是因为默认情况下没有添加机器人显示组件,需要手动添加,添加方式如下:


二、创建一个四轮圆柱状机器人模型

2.1 配置urdf和launch文件

在一的urdf和launch文件基础上进行修改

box_urdf.urdf文件

box_launch.launch文件

然后启动roslaunch,在rviz中显示机器人模型:

catkin_make
catkin_make install
source devel/setup.bash
echo $ROS_PACKAGE_PATH
roslaunch src/jubot_demo/launch/box_launch.launch

2.2 URDF优化_xacro

2.2.1 配置xacro文件

在urdf文件夹下新建一个xacro文件夹,在文件夹中新建my_base.urdf.xacro文件

2.2.2 编写 Xacro 文件
<!-- 底盘 -->
<link name="base_footprint">
  <visual>
    <geometry>
      <sphere radius="${base_footprint_radius}" />
    </geometry>
  </visual>
</link>

<link name="base_link">
  <visual>
    <geometry>
      <cylinder radius="${base_link_radius}" length="${base_link_length}" />
    </geometry>
    <origin xyz="0 0 0" rpy="0 0 0" />
    <material name="yellow">
      <color rgba="0.5 0.3 0.0 0.5" />
    </material>
  </visual>
</link>

<joint name="base_link2base_footprint" type="fixed">
  <parent link="base_footprint" />
  <child link="base_link" />
  <origin xyz="0 0 ${earth_space + base_link_length / 2 }" />
</joint>

<!-- 驱动轮 -->
<!-- 驱动轮属性 -->
<xacro:property name="wheel_radius" value="0.0325" /><!-- 半径 -->
<xacro:property name="wheel_length" value="0.015" /><!-- 宽度 -->
<!-- 驱动轮宏实现 -->
<xacro:macro name="add_wheels" params="name flag">
  <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="0 ${flag * base_link_radius} ${-(earth_space + base_link_length / 2 - wheel_radius) }" />
    <axis xyz="0 1 0" />
  </joint>
</xacro:macro>
<xacro:add_wheels name="left" flag="1" />
<xacro:add_wheels name="right" flag="-1" />
<!-- 支撑轮 -->
<!-- 支撑轮属性 -->
<xacro:property name="support_wheel_radius" value="0.0075" /> <!-- 支撑轮半径 -->

<!-- 支撑轮宏 -->
<xacro:macro name="add_support_wheel" params="name flag" >
  <link name="${name}_wheel">
    <visual>
        <geometry>
            <sphere radius="${support_wheel_radius}" />
        </geometry>
        <origin xyz="0 0 0" rpy="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="${flag * (base_link_radius - support_wheel_radius)} 0 ${-(base_link_length / 2 + earth_space / 2)}" />
      <axis xyz="1 1 1" />
  </joint>
</xacro:macro>

<xacro:add_support_wheel name="front" flag="1" />
<xacro:add_support_wheel name="back" flag="-1" />
2.2.3 集成launch文件

在 launch 文件中直接加载 xacro

box_launch.launch 内容示例:

加载robot_description时使用command属性,属性值就是调用 xacro 功能包的 xacro 程序直接解析 xacro 文件。

重新启动launch,正常显示小车,说明配置成功

2.3 添加摄像头和雷达传感器

2.3.1 摄像头和雷达 Xacro 文件实现

创建

my_camera.urdf.xacro

my_laser.urdf.xacro

my_car_camera.urdf.xacro

在rviz中显示机器人

到此完成。

本文基本大致于参考CSDN博主薄荷糖849---https://blog.csdn.net/qq_64235654/article/details/138244281?spm=1001.2014.3001.5501

以及https://www.bilibili.com/video/BV1Ci4y1L7ZZ/、https://blog.csdn.net/karry_0605/article/details/125040588

感谢博主!

posted @ 2024-05-07 15:55  verthy  阅读(814)  评论(0)    收藏  举报