松灵机器人scout mini小车 自主导航(2)——仿真指南
松灵机器人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)——仿真指南的更多相关文章
- QT--图灵机器人
QT--图灵机器人 1.登陆图灵机器人官网注册一个图灵机器人 2.获取apikey 3.pro文件添加 QT += core gui network 4.头文件 #include < ...
- weiphp---------图灵机器人存在的bug。
1.很多人下载下来weiphp源码以后,配置好了图灵机器人却不能使用.原因是因为他源码里面存在一个小bug 上图红色框框内是他的源码,问题就出在这里. 修改方法: if($result ['code' ...
- ROS::message_filters中的一个报错(mt::TimeStamp……)
『方便检索』 ros::Time msg_time = mt::TimeStamp<typename mpl::at_c<Messages, i>::type>::value( ...
- 机器人与机器人仿真技术(zz)
http://www.viblue.com/archives/5587.htm 一.机器人简介: 机器人(Robot)是自动执行工作的机器装置.它既可以接受人类指挥,又可以运行预先编排的程序,也可以根 ...
- Android智能聊天机器人
http://www.tuling123.com/ 注册一个账号,申请一个KEY值.此网站也有文档,可以查看. package com.tulingdemo; import java.te ...
- ROS机器人程序设计(原书第2版)补充资料 (玖) 第九章 导航功能包集进阶 navigation
ROS机器人程序设计(原书第2版)补充资料 (玖) 第九章 导航功能包集进阶 navigation 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中 ...
- ROS探索总结(十七)——构建完整的机器人应用系统
上一篇博客介绍了HRMRP机器人平台的设计,基于该平台,可以完成丰富的机器人应用,以较为典型的机器人导航为例,如何使用HRMRP来完成相应的功能?本篇博客将详细介绍如何将HRMRP应用到 ...
- Adobe Scout 使用参考说明
Adobe Scout 用于优化 Flash 内容,是一款极为强大的工具,因为它能让您看到 Flash Player 幕后正在发生的事情.但是若明白 Flash Player 为什么做这些事情,您看到 ...
- 机器人操作系统(ROS)在线实训平台学习实验指南
机器人操作系统(ROS)在线学习指南 在高校开设ROS相关课程已经积累了一年多的经验,由于自动化类专业在课程安排中不同于计算机相关专业,通常没有Linux相关的课程基础,直接上手ROS较为 ...
- java最简单的方式实现httpget和httppost请求
java实现httpget和httppost请求的方式多种多样,个人总结了一种最简单的方式,仅仅需几行代码,就能够完美的实现. 此处须要用到两个jar包,httpclient-4.3.1.jar.ht ...
随机推荐
- 4G EPS 中的小区选择
目录 文章目录 目录 前文列表 小区选择 RSRP(参考信号接收功率) RSRQ(参考信号接收质量) RSSI(接收信号强度指示) SINR(信号与干扰加噪声比) 前文列表 <4G EPS 中的 ...
- Java生成微信小程序码
官网文档地址:获取小程序码 package test; import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.cor ...
- P1036 [NOIP2002 普及组] 选数
传送锚点:https://www.luogu.com.cn/problem/P1036 题目描述 已知 \(n\) 个整数 \(x_1,x_2,\cdots,x_n\),以及 \(1\) 个整数 \( ...
- 一个与 WSL2 建立远程的简单方法
前言 众所周知,windows 会通过虚拟交换机给本机和 wsl2(Linux 子系统)分别分配 ip.于是本机重启或重启 wsl 服务的时候会重新分配 ip.之前所作的端口转发,监听之类的都会失效. ...
- WPF多显示器问题 - WindowState
标签 wpf multiple-monitors 一段时间以来,我一直试图让我的 WPF 应用程序跨越多个监视器,并且几乎可以正常工作.当我设置以下行时,问题似乎出现了: win1.WindowSta ...
- 一个 .NET 开源的地图组件库 - Mapsui
前言 今天大姚给大家分享一个.NET开源(MIT License).免费.同时支持多平台框架(MAUI.WPF.Avalonia.Uno.Blazor.WinUI.Eto..NET Android 和 ...
- openCV编译安装-MSCV-Windows10-Qt
openCV编译安装-MSCV-Windows10-Qt 1.准备工作 CMake:下载最新版本即可 openCV:下载任意版本,可以下载源码或者官方编译好的VS版(其中也带有源码),我下载的是ope ...
- IDEA顺序启动多个Spring Boot微服务
上个月公司新开发的一个项目,需要使用微服务,将单体服务拆分成多个微服务.但是每次修改代码之后都需要启动多个微服务,改个代码,都要修改五分钟,启动半小时,但是idea可以设置将多个服务依次启动,减少操作 ...
- 详解在Linux中同时安装配置并使用 MySQL5.7 和 MySQL8.0
最近需要使用mysql8.0版本,但是原本的mysql5.7版本已经被多个服务依赖,于是想想能不能同一台服务器装多个版本的mysql,一查确实可行,这里做一个记录方便自己后期回忆 阅读本文前请注意!! ...
- css制作骰子
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...