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

news/2024/11/19 1:31:25/文章来源:https://www.cnblogs.com/binbin2002/p/18291751

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/741168.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

zabbix“专家坐诊”第245期问答

问题一 Q:vfs.dev.discovery拿的是哪里的文件,我看源码里面获取的是/proc/parttions里面的信息,但是我没有这个device,是怎么获取出来的?A:检查下系统内核版本或者agent程序版本,如果未定义KERNEL_2_4的情况下,读的是后面这个文件。 Q:这两个文件我都看过,也没有cdro…

【Python】Word文档操作

一、全文替换 不是创建word文档写入内容,而是基于现有的Word文档进行替换处理 使用run.text直接赋值修改发现样式会丢失,而网上大部分办法都是这么写的... 直到我看到这篇文章的评论:https://blog.csdn.net/qq_40222956/article/details/106098464 除了段落替换后,Word文档…

【ubuntu】安装go

一、官网 https://golang.google.cn/dl/ 选择稳定版本,点击下载二、安装步骤 1、解压2、移动目录sudo mv go /usr/local3、配置环境变量 vim ~/.bashrcexport PATH=$PATH:/usr/local/go/bin export GOPATH=$HOME/gocode创建gocode目录 vim ~/.profile 添加同样配置三、验证$ g…

2024迎新马拉松——字典

思路 这道题可以把每个单词正过来放在一个字典树里。 把每个单词反过来,给每个单词单独建立一个字典树。 而询问要求的就是前缀在正串的字典树上的那个节点为根的子树中,所有串的反串字典树合并之后的那个字典树上,后缀的那个节点所对应的子树当中有多少个串就是答案。 举个…

win11系统 连接共享打印机提示 0x0000709

windows11 用户在添加共享打印机的时候,遇到了系统错误提示:操作无法完成(错误0x0000709) 其他查考文章: https://baijiahao.baidu.com/s?id=1788757659395932042&wfr=spider&for=pc

24迎新马拉松——字典

思路 这道题我们可以把每个单词正过来放在一个字典树里。 而我们把每个单词反过来,给每个单词单独建立一个字典树。 而询问要求的就是前缀在正串的字典树上的那个节点为根的子树中,所有串的反串字典树合并之后的那个字典树上,后缀的那个节点所对应的子树当中有多少个串就是答…

香橙派5plus上跑云手机方案二 waydroid

前言 上篇文章香橙派5plus上跑云手机方案一 redroid(带硬件加速)说了怎么跑带GPU加速的redroid方案,这篇说下怎么在香橙派下使用Waydroid。 温馨提示 虽然能运行,但是体验下来只能用软件加速,无法使用GPU加速,所有会很卡。而且Waydroid还依赖于桌面环境wayland,要么插上显…

弹性伸缩落地实践

1. 什么是 HPA ? HPA(Horizontal Pod Autoscaler)是 Kubernetes 中的一种资源自动伸缩机制,用于根据某些指标动态调整 Pod 的副本数量。 2. 什么时候需要 HPA ?负载波动:当您的应用程序的负载经常发生波动时,HPA 可以自动调整 Pod 的副本数量,以适应负载的变化。例如,…

三星 NAND FLASH命名规范 Samsung NAND Flash Code Information

一共有三页,介绍了前面主要的编号和横杠后面的编号,当前文档只关注前面的编号。 从前面的命名规范中可以得知当前芯片的容量、技术等概要信息,对芯片有一个整体了解。 详细解释 Small Classification 表示存储单元的类型和应用,比如 SLC 1 Chip XD Card 表示是SLC的,包含1…

[转]ZeroMQ用法说明及C++示例

原文链接:https://blog.csdn.net/qq_40344790/article/details/130865273ZMQ介绍 官网:https://zeromq.org/ Github:https://github.com/zeromq/libzmq ZMQ(ZeroMQ)是一种高性能的异步消息传递库,它可以在不同的进程和机器之间进行消息传递。它提供了多种传输协议、通信模…

Solidity:assembly

在Solidity中,assembly是一个内嵌的低级语言,它允许开发者直接编写EVM(以太坊虚拟机)字节码。这种能力使得开发者可以更精细地控制智能合约的行为,并且在某些情况下可以提高性能和减少gas费用。然而,使用assembly也增加了代码的复杂性和出错的可能性,因此应谨慎使用。 为…

K8s 驱逐场景以及规避方案

Pod 驱逐场景总结从一个 SRE 角度看, Pod 驱逐分为两种情况:较安全驱逐 & 提高稳定性的良性驱逐API 发起驱逐,典型案例:kubectl drain Node Not Ready 时,Controller Manager 发起的驱逐有风险的驱逐节点压力驱逐节点磁盘空间不足、内存不足 或 Pid 不足, kubelet 发…