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

目录

1. 开发环境配置

2. 仿真环境配置

3. 添加自定义传感(摄像头添加)

总结

参考文献

1. 开发环境配置

这里使用的开发环境是 docker + VSCode

我们首先新建工作空间文件夹,并使用 catkin 初始化工作空间:

$ mkdir scout_ws && cd scout_ws
$ mkdir src .devcontainer
$ cd ../.devcontainer
 

.devcontainer 中新建 devcontainer.jsonDockerfile 两个文件:

$ gedit devcontainer.json # 也可以自行更换其他的编辑器
 

devcontainer.json 保存如下内容:

{
    "dockerFile": "Dockerfile",
    "build": {
        "args": {
            "WORKSPACE": "${containerWorkspaceFolder}"
        }
    },
    "remoteUser": "ros",
    "runArgs": [
        "--network=host",
        "--cap-add=SYS_PTRACE",
        "--security-opt=seccomp:unconfined",
        "--security-opt=apparmor:unconfined",
        "--volume=/tmp/.X11-unix:/tmp/.X11-unix"
    ],
    "containerEnv": { "DISPLAY": "${localEnv:DISPLAY}" },
    // Set *default* container specific settings.json values on container create.
    "settings": {
        "terminal.integrated.profiles.linux": {
            "bash": {
                "path": "bash"
            },
        },
        "terminal.integrated.defaultProfile.linux": "bash"
    },
    "extensions": [
        "dotjoshjohnson.xml",
        "zachflower.uncrustify",
        "ms-azuretools.vscode-docker",
        "ms-iot.vscode-ros",
        "ms-python.python",
        "ms-vscode.cpptools",
        "redhat.vscode-yaml",
        "smilerobotics.urdf",
        "streetsidesoftware.code-spell-checker",
        "twxs.cmake",
        "yzhang.markdown-all-in-one"
    ]
}
$ gedit Dockerfile

Dockerfile 中保存以下内容:

FROM althack/ros:melodic-gazebo
​
# Set up auto-source of workspace for ros user
ARG WORKSPACE
RUN echo "if [ -f ${WORKSPACE}/install/setup.bash ]; then source ${WORKSPACE}/install/setup.bash; fi" >> /home/ros/.bashrc
此时,目录结构如下
scout_ws
├── .devcontainer
│   ├── devcontainer.json
│   └── Dockerfile
└── src
 

使用 VSC 在 docker 中打开文件夹:

$ cd scout_ws
$ code .
 

最后,需要更新 aptrosdep database

$ sudo apt update
$ rosdep update

2. 仿真环境配置

https://github.com/agilexrobotics/ugv_gazebo_sim/tree/master/scout 中的 scout_controlscout_descriptionscout_gazebo_sim 三个文件放到 src目录之中。

安装如下 ROS 库:

$ sudo apt-get -y install --no-install-recommends \
ros-melodic-ros-control \
ros-melodic-ros-controllers \
ros-melodic-gazebo-ros \
ros-melodic-gazebo-ros-control \
ros-melodic-joint-state-publisher-gui \
ros-melodic-teleop-twist-keyboard

然后初始化工作空间并安装依赖

$ cd scout_ws/src
$ catkin_init_workspace
$ cd ..
$ rosdep install --from-paths src --ignore-src -r -y

即可正常编译与运行:

$ catkin_make
$ source devel/setup.bash

scout_description 包主要为 scout 系列车型仿真模型,display_xxx_.launch 为不同车型在 Rviz 中的展示:

$ roslaunch scout_description display_mini_models.launch # 在 Rviz 中查看 scout mini 车型

scout_gazebo_sim 包为 scout 系列车型在 gazebo 中的仿真,scout_xxx_.launch 为不同车型在 gazebo 中仿真展示

$ roslaunch scout_gazebo_sim scout_mini_empty_world.launch # 在 gazebo 中使用空地图仿真 scout mini

注意 使用 playpen 地图前需要补全 gazebo 的 models,不然会一直黑屏

3. 添加自定义传感(摄像头添加)

首先在我们的 scout_description/urdf 中添加一个名为 universal_sensor_adder.xacro 的文件,其中保存如下内容:

<?xml version="1.0"?>
<!-- 
Author: AnthonySuen
Date: 2020-4-8
-->
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="universal_sensor_adder">
    <!-- 用于生成一个新的传感器节点, 
    x_offset y_offset z_offset r p y对应于传感器和 base_link 的相对位置
    sensor_config 为传感器的配置信息
    sensor_plugin_config 为 gazebo 相关插件的配置内容 -->
    <xacro:macro name="add_sensor" params="sensor_name type x_offset y_offset z_offset r p y **sensor_config **sensor_plugin_config">
        <link name="sensor_${sensor_name}">
            <!-- 配置传感器视觉信息 -->
            <visual>
                <geometry>
                    <box size="0.03 0.05 0.05"/>
                </geometry>
                <material name="red">
                    <color rgba="1.0 0.0 0.0 1.0"/>
                </material>
            </visual>
            <!-- 配置碰撞体积, 为gazebo仿真使用 -->
            <collision>
                <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
                <geometry>
                    <box size="0.03 0.05 0.05"/>
                </geometry>
            </collision>
            <!-- 配置惯性矩阵, 用于 gazebo 仿真,这里我假设传感器很轻很小 -->
            <inertial>
                <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
                <mass value="1e-5"/>
                <inertia ixx="1e-6" ixy="1e-6" ixz="1e-6" iyy="1e-6" iyz="1e-6" izz="1e-6"/>
            </inertial>
        </link>
        <!-- 配置关节信息, 这里我默认传感器是固定在车上的 -->
        <joint name="sensor_${sensor_name}_joint" type="fixed">
            <parent link="base_link"/>
            <child link="sensor_${sensor_name}"/>
            <origin xyz="${x_offset} ${y_offset} ${z_offset}" rpy="${r} ${p} ${y}"/>
        </joint>
        <!-- gazebo 配置仿真配置部分 -->
        <gazebo reference="sensor_${sensor_name}">            <!-- 此部分要与 传感器 link 名称保持一致 -->
            <sensor name="${sensor_name}" type="${type}">
                <!-- 这里会插入传感器自身配置信息和相关插件的配置内容 -->
                <xacro:insert_block name="sensor_config"/>
                <xacro:insert_block name="sensor_plugin_config"/>
            </sensor>
        </gazebo>
    </xacro:macro>
</robot>

注意 请在使用时删除中文注释,xacro 无法解析非 ascii 字符!

编辑 empty.urdf 文件,修改其中内容如下:

<?xml version="1.0"?>
<!-- 
Author: AnthonySuen
Date: 2020-4-8
-->
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="sensors">

  <!-- 加载我们之前编写的文件,之后可以使用其中相关内容 -->
  <xacro:include filename="$(find scout_description)/urdf/universal_sensor_adder.xacro" />
  <!-- 使用我们编写的函数,填入相关参数 -->
  <xacro:add_sensor sensor_name="camera" type="camera" x_offset="0.1" y_offset="0.0" z_offset="0.085" r="0.0" p="0.0" y="0.0">
  <!-- 这部分会替换 <xacro:insert_block name="sensor_config"/> 中的内容 -->
    <sensor_config>
      <update_rate>30</update_rate>
      <camera name="general_camera">
        <image width="640" height="480" hfov="1.5708" format="RGB8" near="0.01" far="50.0"/>
      </camera>
    </sensor_config>
    <!-- 这部分会替换 <xacro:insert_block name="sensor_plugin_config"/> 中的内容 -->
    <sensor_plugin_config>
      <plugin name="general_camera_controller" filename="libgazebo_ros_camera.so">
        <alwaysOn>true</alwaysOn>
        <updateRate>36.0</updateRate>
        <cameraName>sensor_camera</cameraName>
        <imageTopicName>image_raw</imageTopicName>
        <cameraInfoTopicName>camera_info</cameraInfoTopicName>
        <frameName>sensor_camera</frameName> <!-- 需要与 传感器 link 名称保持一致 -->
        <hackBaseline>0.1</hackBaseline>
        <distortionK1>0.0</distortionK1>
        <distortionK2>0.0</distortionK2>
        <distortionK3>0.0</distortionK3>
        <distortionT1>0.0</distortionT1>
        <distortionT2>0.0</distortionT2>
      </plugin>
    </sensor_plugin_config>
  </xacro:add_sensor>
</robot>

注意 请在使用时删除中文注释,xacro 无法解析非 ascii 字符

之后运行一下 Rivz 查看我们修改后的模型:

$ roslaunch scout_description display_mini_models.launch

也可以在 gazebo 中仿真并用 Rviz 接收图像:

$ roslaunch scout_gazebo_sim  scout_mini_playpen.launch

4.总结

本次学习完成了在ROS中一个机器小车的模型创建,传感器配置,仿真环境的设置,并控制机器小车进行运动。

5.参考文献

松灵学院 | Scout mini 仿真指南_松灵开发社区-CSDN博客

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ROS(Robot Operating System)是一个开源的机器人操作系统,它提供了一系列的软件库和工具,可以帮助开发者轻松地构建机器人应用程序。在ROS,可以使用各种传感器和执行器来感知和操纵机器人,同时还有众多功能强大的软件包可供使用。 对于ROS机器人小车建模,首先需要定义其物理模型和运动模型。物理模型涉及到小车的尺寸、质量分布以及各个部件之间的连接关系等,可以使用三维建模软件(如SolidWorks、Blender等)进行建模。在模型,可以添加传感器和执行器的模型,以便在软件层面对其进行控制和感知。 接下来,需要在ROS创建一个软件包,该软件包将包含小车的相关源代码和配置文件。在软件包,可以编写小车的控制算法、传感器数据处理和与外部环境的通信接口等。根据小车的物理模型和运动模型,可以在软件包定义小车的运动规划和控制算法,使其能够实现自主导航、避障等功能。 在ROS的开发过程,可以使用ROS提供的各种工具和软件包快速构建和测试小车的功能。例如,可以使用Gazebo仿真平台对小车进行虚拟环境下的仿真测试,通过仿真可以更快速地验证和优化算法;同时,可以使用Rviz可视化工具对小车的运动、传感器数据等进行可视化展示和调试。 总之,ROS提供了丰富的功能和工具,可用于对机器人小车进行建模和开发。通过合理的物理模型设计和运动算法编写,可以实现小车的各种功能,从而实现自主导航、运动规划、避障等应用。在开发过程,可以利用ROS的丰富生态系统和强大的社区支持,使机器人小车建模更加高效和便捷。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值