松灵机器人Scout mini小车仿真指南

之前介绍了如何通过CAN TO USB串口实现用键盘控制小车移动。但是一直用小车测试缺乏安全性。而松灵官方贴心的为我们准备了gazebo仿真环境,提供了完整的仿真支持库,本文将介绍如何上手使用仿真。

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

1.仿真环境准备

整个功能包介绍

├── scout_control :该文件夹是小车仿真控制器功能包
├── scout_description :该文件夹是模型文件功能包
└── scout_gazebo_sim :该文件夹是gazebo模拟功能包

安装相关功能包依赖

所采用的开发环境是Ubuntu18.04+ROS Melodic

下载所需要的功能包

sudo apt-get install ros-melodic-ros-control
sudo apt-get install ros-melodic-ros-controllers
sudo apt-get install ros-melodic-gazebo-ros
sudo apt-get install ros-melodic-gazebo-ros-control
sudo apt-get install ros-melodic-joint-state-publisher-gui
sudo apt-get install ros-melodic-teleop-twist-keyboard

新建工作空间并初始化

打开一个新终端,创建一个名为scout_ws的工作区,并初始化:

mkdir -p scout_ws/src
cd scout_ws/src
catkin_init_workspace

下载对应的仿真模型功能包。本文采用的是scout mini。需要将https://github.com/agilexrobotics/ugv_gazebo_sim/tree/master/scout下的三个文件复制到src目录中

git clone https://github.com/agilexrobotics/ugv_gazebo_sim/tree/master/scout

正常编译

cd ..
rosdep install --from-paths src --ignore-src -r -y
caktin_make

2.仿真小车验证

进入scout_ws工作空间,运行系列车仿真模型,display_xxxx.launch 为不同车型在rviz仿真展示。scout_xxxx.launch为不同车型在gazebo模拟环境中展示。

source devel/setup.bash
roslaunch scout_description display_scout_mini.launch

source devel/setup.bash
roslaunch scout_gazebo_sim scout_empty_world.launch



如果想使用playgen地图,需要提取补全gazebo里面的models文件,不然会一直黑屏

3.添加自定义传感器

官方给定的只有小车底座,没有现成的传感器。在实际使用过程中,可以自定义一系列传感器。

scout系列车型的urdf描述文件位于scout_description/urdf中,在使用过程中,并未直接使用urdf进行描述,而是从xacro(xml xacro)描述文件中生成urdf信息。便于我们像编程一样复用urdf节点以及相关拆分组件等功能。

如果不了解xacro 可以参考xacro语法说明: http://wiki.ros.org/xarc

自定义简易摄像头

首先在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

松灵机器人scout mini小车 自主导航(2)——仿真指南的更多相关文章

  1. QT--图灵机器人

    QT--图灵机器人 1.登陆图灵机器人官网注册一个图灵机器人 2.获取apikey 3.pro文件添加 QT       += core gui network 4.头文件 #include < ...

  2. weiphp---------图灵机器人存在的bug。

    1.很多人下载下来weiphp源码以后,配置好了图灵机器人却不能使用.原因是因为他源码里面存在一个小bug 上图红色框框内是他的源码,问题就出在这里. 修改方法: if($result ['code' ...

  3. ROS::message_filters中的一个报错(mt::TimeStamp……)

    『方便检索』 ros::Time msg_time = mt::TimeStamp<typename mpl::at_c<Messages, i>::type>::value( ...

  4. 机器人与机器人仿真技术(zz)

    http://www.viblue.com/archives/5587.htm 一.机器人简介: 机器人(Robot)是自动执行工作的机器装置.它既可以接受人类指挥,又可以运行预先编排的程序,也可以根 ...

  5. Android智能聊天机器人

    http://www.tuling123.com/       注册一个账号,申请一个KEY值.此网站也有文档,可以查看. package com.tulingdemo; import java.te ...

  6. ROS机器人程序设计(原书第2版)补充资料 (玖) 第九章 导航功能包集进阶 navigation

    ROS机器人程序设计(原书第2版)补充资料 (玖) 第九章 导航功能包集进阶 navigation 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中 ...

  7. ROS探索总结(十七)——构建完整的机器人应用系统

           上一篇博客介绍了HRMRP机器人平台的设计,基于该平台,可以完成丰富的机器人应用,以较为典型的机器人导航为例,如何使用HRMRP来完成相应的功能?本篇博客将详细介绍如何将HRMRP应用到 ...

  8. Adobe Scout 使用参考说明

    Adobe Scout 用于优化 Flash 内容,是一款极为强大的工具,因为它能让您看到 Flash Player 幕后正在发生的事情.但是若明白 Flash Player 为什么做这些事情,您看到 ...

  9. 机器人操作系统(ROS)在线实训平台学习实验指南

    机器人操作系统(ROS)在线学习指南       在高校开设ROS相关课程已经积累了一年多的经验,由于自动化类专业在课程安排中不同于计算机相关专业,通常没有Linux相关的课程基础,直接上手ROS较为 ...

  10. java最简单的方式实现httpget和httppost请求

    java实现httpget和httppost请求的方式多种多样,个人总结了一种最简单的方式,仅仅需几行代码,就能够完美的实现. 此处须要用到两个jar包,httpclient-4.3.1.jar.ht ...

随机推荐

  1. 传统css布局方案(position,float,line-height等配合)

    一.display display 是 css 布局中很重要的一个属性,它定义了元素生成的显示框类型,常见的几个属性值有:block.inline.inline-block.inherit.none. ...

  2. iceoryx源码阅读(三)——共享内存通信(一)

    目录 0 导引 1 整体通信结构 2 RelativePointer 2.1 原理 2.2 PointerRepository 2.3 构造函数 2.4 get函数 3 ShmSafeUnmanage ...

  3. UploadLabs靶场

    目录 Pass-01 Pass-02 Pass-03 Pass-04 Pass-05 Pass-06 Pass-07 Pass-08 Pass-09 Pass-10 Pass-11 Pass-12 P ...

  4. 稳定、省钱的 ClickHouse 读写分离方案:基于 JuiceFS 的主从架构实践

    Jerry 是一家位于北美的科技公司,利用人工智能和机器学习技术,简化汽车保险和贷款的比价和购买流程.在美国,Jerry 的应用在其所属领域排名第一. 随着数据规模的增长,Jerry 在使用 AWS ...

  5. 【漏洞复现】Apache RocketMQ 代码注入漏洞(CVE-2023-37582)

    产品介绍 Apache RocketMQ是美国阿帕奇(Apache)基金会的一款轻量级的数据处理平台和消息传递引擎. 漏洞概述 Apache RocketMQ 存在代码注入漏洞,该漏洞源于当 Name ...

  6. JVM Sandbox入门详解

    一. 概述 在日常开发中,经常会接触到面向AOP编程的思想,我们通常会使用Spring AOP来做统一的权限认证.异常捕获返回.日志记录等工作.之所以使用Spring AOP来实现上述功能,是因为这些 ...

  7. Java中可以用的大数据推荐算法

    在Java中实现大数据推荐算法时,通常会使用一些开源的机器学习库,如Apache Mahout.Weka.DL4J(DeepLearning4j,用于深度学习)或者Spark MLlib(用于在Spa ...

  8. 剑指Offer-64.滑动窗口的最大值(C++/Java)

    题目: 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值.例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6, ...

  9. [TinyRenderer] Chapter1 p3 Line

    (注:本小节不是对划线算法事无巨细的证明,如果你需要更加系统的学习,请跳转至文末的参考部分) 如果你是一名曾经学习过图形学基础的学生,那么你一定对画线算法稔熟于心,中点划线算法,Bresenham算法 ...

  10. springboot增加@EnableAsync注解,否则方法中的@Async注解没有生效

    springboot增加@EnableAsync注解,否则方法中的@Async注解没有生效. @EnableFeignClients(basePackages = {"com.test&qu ...