首页 > 其他分享 >松灵机器人scout mini小车 自主导航(2)——仿真指南

松灵机器人scout mini小车 自主导航(2)——仿真指南

时间:2024-07-09 15:21:58浏览次数:16  
标签:仿真 mini xacro urdf 松灵 scout ros gazebo

松灵机器人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 

img

source devel/setup.bash
roslaunch scout_gazebo_sim scout_empty_world.launch

img
如果想使用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

img

标签:仿真,mini,xacro,urdf,松灵,scout,ros,gazebo
From: https://www.cnblogs.com/binbin2002/p/18291751

相关文章

  • 关于python Miniconda的脚本安装及 环境控制
    1.下载Miniconda安装脚本使用curl或wget命令下载Miniconda安装脚本。使用curl:curl-Ohttps://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh 使用wget:wgethttps://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.......
  • 打造企业级文件服务:Spring Boot结合MinIO的绝佳实践
    MinIO是一个高性能的分布式对象存储服务,可以存储大量非结构化数据,例如图片、视频、日志文件、备份和容器/虚拟机镜像。它兼容AmazonS3云存储服务的API,因此被广泛使用于私有云或者混合云环境下。由于它是用Go语言编写的,因此运行效率极高,可以部署在从IoT设备到大规模数据中心的各种......
  • 松灵机器人scout mini小车 自主导航(1)
    松灵机器人scoutmini小车自主导航最近实验室来了个松灵机器人scoutmini的底座。本着学习的目的对其进行了研究,从最基础的连接开始。1.硬件连接准备松灵scoutmini提供了航空插头用于can串口转USB的操作。将通讯航空插头连接到小车对应插口。然后将CAN线引出,将CAN线中的C......
  • MinIO
    MinIO基于ApacheLicensev2.0开源协议的对象存储服务,可以做为云存储的解决方案用来保存海量的图片,视频,文档。由于采用Golang实现,服务端可以工作在Windows,Linux,OSX和FreeBSD上。配置简单,基本是复制可执行程序,单行命令可以运行起来。MinIO兼容亚马逊S3云存储服务接口,非常适合......
  • mini-lsm通关笔记-字符相关操作
    本文捋一下mini-lsm中的字符相关操作[u8]Vec<u8>BytesBufKeySliceKeyBytes[u8]和Vec<u8>这两个是rust内置的数据类型。[u8]:切片本身并不拥有数据,而是引用了数据。它由一个指向数组开始处的指针和一个表示数组长度的计数器组成。[u8]类型通常写作&[u8],这是因为切片通......
  • 题解:CF1256D Binary String Minimizing
    贪心。数据范围\(n\le10^{6}\),因此我们要用时间复杂度为\(\mathcal{O}\left(n\right)\)的算法来解决这个问题。思路从左至右扫一遍序列,如果遇到\(10\),则要将这个\(0\)交换到前面的位置。由于是字典序最小,\(0\)应该尽量在最高位。现在需要知道这个\(0\)被交换到哪......
  • 如何通过minIO在后端实现断点续传
     首先是黑马的媒资管理模块流程图:前端负责计算媒资文件的MD5值,同时对媒资文件进行分块。后端需要以下几个接口:1.检查分块是否存在(传入参数为视频唯一标识信息与块信息):检查当前分块是否已经上传至minIO。即通过前端传来的MD5值与chunk的具体值,进入minIO进行核对,如何有那么就是......
  • MinIO使用记录
    探索MinIO:高性能、分布式对象存储解决方案注:本文除代码外多数为AI生成最近因为有项目需要换成AmazonS3的云存储,所以把之前做过的minio部分做一个记录,后面也会把基于这版改造的S3方法发出来记录。MinIO简介MinIO是一款高性能、分布式对象存储服务器,设计用于在大规模环境中......
  • Minimum_jerk参考代码
    1.参考代码importnumpyasnpimportmatplotlib.pyplotaspltfromcvxoptimportmatrix,solversdefgenQk(T_down,T_up):Q=np.zeros((6,6))Q[3][4]=72*(T_up**2-T_down**2)Q[3][5]=120*(T_up**3-T_down**3)Q[4][5]=360*(T_up*......
  • windows terminal 中运行 miniconda 和 pip 的虚拟环境
    pip创建的虚拟环境使用命令python-mvenvhf创建虚拟环境后,在激活时,会遇到一个错误,原因是powershell启动了严格的审查脚本策略。这个错误信息表明你尝试在PowerShell中运行一个脚本(具体是激活一个虚拟环境),但是你的系统设置阻止了未经签名的脚本的执行。PowerShell有一个叫......