本文适合有 ROS1 基础与了解 urdf语法 和 gazebo 的朋友

SCOUT MINI 是一款全地形高速Mini UGV,具有四轮差速驱动、独立悬挂、原地差速自转等特点,得益于自主研发的轻量级动力系统解决方案,SCOUT MINI最大速度高达10KM/H,专为前沿科学实验设计的全能型移动研究平台。

此外,松灵为用户提供了 SCOUT MINI 的完整 gazebo 仿真支持库,本文将带您逐步上手使用:

仓库地址:https://github.com/agilexrobotics/ugv_gazebo_sim

1. 开发环境配置

目前官方提供的仿真环境是 ROS-melodic + gazebo9如果您已配置好相关环境请跳过本节

编者这里使用的开发环境是 docker + VSCode ,这个组合的好处可以参考我的博客文章:Docker 配合 VSC 开发最佳实践

我们首先新建工作空间文件夹,并使用 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"]
}

其中各个字段的具体含义可以参考我的博文 Docker 配合 VSC 开发最佳实践

$ 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

其中各个字段的具体含义可以参考我的博文Docker 配合 VSC 开发最佳实践

此时,目录结构如下:

scout_ws
├── .devcontainer
│   ├── devcontainer.json
│   └── Dockerfile
└── src

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

$ cd scout_ws
$ code .

后续具体操作请见:Docker 配合 VSC 开发最佳实践

最后,需要更新 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 系列车型的 urdf 描述文件位于 scout_description/urdf 中,在这里我们并未直接使用 urdf 文件进行描述,而是从 xacro (xml macro) 描述文件中生成 urdf 信息。使用 xacro 的好处在于我们可以像编程一样实现复用一些 urdf 节点以及将不同的组件拆分等功能。

如果您不了解 xacro,可以先阅读 xacro 语法说明:http://wiki.ros.org/xacr

其相当于扩展了 urdf 的语法,可以以更便捷的方式描述我们的机器人。

下面我将带大家使用 xacro 为小车加上一个简易摄像头:

首先在我们的 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>

empty.urdf 会在我们模型生成的时候被 mini.xacro 等车辆描述文件加载,所以我们不用去更改其他模型文件,这样保持了开发的整洁性

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

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

$ roslaunch scout_description display_mini_models.launch

可以看到车辆头顶出了一个红色小方块,这就是我们的简易摄像头模型

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

$ roslaunch scout_gazebo_sim  scout_mini_playpen.launch

至此,便完成了添加传感器并进行仿真的全部流程,对于其他类型传感器,诸如 深度相机 激光雷达 imu 等,其添加方法一样方便,唯一不同点在我们编写的函数中 sensor_configsensor_plugin_config 块中对于不同传感器的配置,简单修改即可适配不同传感器。

松灵学院 | Scout mini 仿真指南相关推荐

  1. 三、松灵课堂 | SCOUT的仿真使用

    仿真环境的介绍 Gazebo Gazebo是一款3D动态模拟器,能够在复杂的室内和室外环境中准确有效地模拟机器人群.与游戏引擎提供高保真度的视觉模拟类似,Gazebo提供高保真度的物理模拟,其提供一整 ...

  2. 【工程记录】基于松灵Scout mini底盘实现小车自主探索建图

    一.硬件配置 松灵scout mini底盘 速腾robense 16线激光雷达 瑞芬imu 因特尔nuc 二.工程技术栈 IMU驱动包(原创) 松灵底盘包(改写,里程计融合IMU角度信息) ROS N ...

  3. 松灵机器人二次开发之一

    松灵机器人二次开发--第一天 缘由: 最近学院有一个机器人二次开发的项目.我和朋友被导师推荐了过去,结果去了一头雾水:松灵机器人,linux,导航探测~~对于两个纯软件方面的菜鸟来说毫无头绪.但是没办 ...

  4. 土木工程计算机仿真学科未来前景,同济大学土木工程学院土木工程计算机仿真2010级学历教育硕士--培养方案...

    一.简介 土木工程计算机仿真学科是土木工程属下的二级学科,在国民经济建设中有着重要的地位,在促进城市建设.社会发展过程中做出了重大贡献.土木工程计算机仿真是同济大学于2005年自主设立的二级学科,虽然 ...

  5. 西安工业大学计算机学院团委,西安工业大学计算机学院人工智能与仿真研究所...

    西安工业大学计算机学院人工智能与仿真研究所 语音 编辑 锁定 讨论 上传视频 西安工业大学计算机学院人工智能与仿真研究所成立于1994年,前身是计算机系测试与通信技术研究所.研究所主要从事人工智能仿真 ...

  6. 广州大学松田学院 嵌入式linux,试析广州大学松田学院校园网综合布线工程

    松田学院是一座大学,随着网络技术的发展,建立一套适合计算机网络和现代化通讯要求,具有扩展性且又经济实用的结构化布线系统是必须的.综合布线系统本身有很高的兼容性,这次松田学院的布线系统主要针对网络数据传 ...

  7. 松灵机器人二次开发总结

    松灵机器人二次开发最终总结 前言: 因为最近写完了系统的专利,因此想在这里给故事划上一个句号.前面说到自动检测和报表形成是比较难的操作,其中一个是本系统的核心操作功能,一个是系统的难实现功能.都是本系 ...

  8. SCOUT MINI Pro松灵机器人j建图定点步骤

    一.slam建图实践: (1)启动激光雷达,发布base_link-><laser_link>的坐标变换 source devel/setup.bash roslaunch scou ...

  9. 基于禾赛32线雷达和Xsens MTi-G-710 组合导航模块,松灵Scout mini 底盘实现 Cartographer 3D 建图过程

    序言:由于Cartographer 有很多的安装教程,所以这里就不再赘述.本人申明,本文中所用图片均为自己实验所得,仅供大家科研交流所用,不得用于其他任何商业用途! 首先展示一下在地下车库的建图效果. ...

最新文章

  1. Qute模板与Quarkus
  2. Python脚本程序实现搜索文本文件内容
  3. 设计模式(一)————策略模式(张三的故事??)
  4. 如何设计复用性较好的类?
  5. Java如何查看死锁?
  6. CRM BP attachment read debug
  7. 华为荣耀9x怎么解账户锁_荣耀X10顶配与30S最低配形成200元的价差,我觉得这样是最好的...
  8. Python 3.6新特性(部分)
  9. 计算机语言系统不支持,win7电脑安装IE8出现“此安装不支持您的操作系统的当前语言”怎么办...
  10. markdown中快速插入Emoji表情包语法速查表!!!
  11. 浏览器显示html过程,浏览器显示页面的流程
  12. Windows系统更新后,VS2012不能使用的问题
  13. windows上java调用gdal.jar报错
  14. matlab恒压频比,基于matlab的三相异步电机恒压频比调速仿真.doc
  15. 点进来看看,这篇文章告诉你什么软件可以识别PDF中的文字!
  16. IE主页被https://hao.360.cn/?a1004劫持,如何解决
  17. mysql特性—自适应哈希索引AHI
  18. Ubuntu常用软件下载以及视频流裁剪转码获取教程(可直接下载油管、B站、优酷等视频资源!)
  19. 攀登数据基础设施高峰,这是一场勇敢者的游戏
  20. 用Javascript实现Blogger/Blogspot的传统模板翻页功能

热门文章

  1. 智能家居,在互联中看见全屋智能
  2. NotePad++ HexEditor.dll下载地址,32位,64位
  3. 微信小程序电子优惠券领取,淘宝客,微信小程序商城
  4. 个人微信号二次开发sdk协议,微信个人号开发API接口
  5. 【转】电脑电源如何安装 (清晰大图详解电脑组装时各接口线缆细节)
  6. 四种最常见路由协议 RIP、IGRP、OSPF和EIGRP。
  7. HTTP Error 503错误
  8. 老鱼Python数据分析——篇十四:读取“选股宝”的热点板块信息并存为excel文件
  9. 纽约州推出“被遗忘权”提案 用户或能要求将个人隐私信息从搜索结果中移
  10. HDFS集群管理与运维+distcp工具的使用