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
感谢博主!

浙公网安备 33010602011771号