资讯详情

ROS仿真环境搭建

是通过计算机对实体机器人系统进行模拟的技术,在 ROS 模拟实现涉及的内容主要有三个:对 机器人建模(URDF)、创造模拟环境(Gazebo)以及感知环境(Rviz)等系统实现。

________

搭建环境介绍:

是 Unified Robot Description Format 首字母缩写直译为,可以以一种 XML 描述机器人的部分结构,如底盘、摄像头、激光雷达、机械臂和不同关节的自由度...,本文件可被接受 C 内置解释器转换为可视化机器人模型 ROS 机器人仿真的重要组件

是 ROS Visualization Tool 首字母缩写直译为。其主要目的是三维显示ROS新闻,可以 可视化表达数据。例如,激光测距仪可以在不编程的情况下显示机器人模型和表达(LRF)传感器中的传感 从障碍物到障碍物的距离

下载RViz :

sudo apt install ros-noetic-rviz 

是一款3D动态模拟器用于显示机器人模型,创建模拟环境,能够在复杂的室内外环境中准确有效地模拟机器人。类似于游戏引擎提供高保真度的视觉模拟,Gazebo为用户和程序提供高保真度的物理模拟,提供一套完整的传感器模型和非常友好的交互方式。

下载 Gazebo:

sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main"  >  /etc/apt/sources.list.d/gazebo-stable.list' 
sudo apt install gazebo11  sudo apt install libgazebo11-dev 

——————

使用 优化 urdf 实现驱动轮,需要使用变量包装底盘的半径和高度,并使用数学公式动态计算底盘的关节点坐标

使用 宏封装轮重复代码,并调用宏创建两个轮子

——————

1. 建立URDF文件(Xacro)

2.launch文件

文件建立后,必须与他对应launch节点

然后对应launch要找到这些文件,

<launch>     <param name="robot_description" command="$(find xacro)/xacro $(find urdf01_rviz)/urdf/xacro/car.urdf.xacro" />      <node pkg="rviz" type="rviz" name="rviz" args="-d $(find urdf01_rviz)/config/show_mycar.rviz" />     <node pkg="joint_state_publisher" type="joint_state_publisher" name="joint_state_publisher" output="screen" />     <node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher" output="screen" />     <node pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" name="joint_state_publisher_gui" output="screen" />  </launch> 

而car.xacro包括需要的原因xacro文件变成了嵌套

当我们开始的时候,我们只需要这样做launch启动文件就好 ,以上面为例

初始化:source ./devel/setup.bash

roslaunch urdf01_rviz demo03...

_________________________

2. URDF集成Gazebo

我们想把以前的 urdf 汽车模型的形成在gazebo要实现它,我们需要加入它改进后的xacro文件

开启 launch启动文件节点gazebo

创造模拟环境:

与以前相比,差别更大world文件可以构建环境,当然也可以自己构建,然后保存,当然,很可能会卡住

拓展:

雷达信息模拟和显示

1新建 Xacro 配置雷达传感器信息

2 xacro 文件集成

3 启动模拟环境

4 Rviz 显示雷达数据

具体如下:

1. 在新的 gazebo环境下 建立新的xacro:

注: demo05/6/7环境雷达 底盘 相机的形状,新建的gazebo文件中添加了需要使用的内容。有了这些配置,功能就可以使用了

然后使用这些 xacro文件 集合到 car.xacro中

机器人运动控制和里程计信息显示

1 为 joint 添加传动装置和控制器(move)

2 xacro文件集成(car.xacro)

3 启动 gazebo并控制机器人运动(启动) car.xacro)

启动 launch 文件,使用 topic list 查看主题列表,你会发现更多 /cmd_vel 然后发布 vmd_vel 可以控制消息

使用命令控制(或编写单独的节点控制)(telekey 键盘控制节点)

————————————————————————————————————

导航

导航实现01_SLAM建图

gmapping 是ROS开源社区更常用、更成熟SLAM算法之一,gmapping二维格栅地图可根据移动机器人里程计数据和激光雷达数据绘制

下载:

sudo apt install ros-noetic-gmapping

gmapping 功能包的核心节点是:slam_gmapping。为便于调用,首先要了解节点订阅的话题、发布的话题、服务及相关参数。

————————

2.1订阅的Topic

tf (tf/tfMessage)

  • 用于雷达、底盘和里程计之间的坐标变换。

scan(sensor_msgs/LaserScan)

  • SLAM所需的雷达信息。

————————————————

2.2发布的Topic

map_metadata(nav_msgs/MapMetaData)

  • 地图元数据,包括,包括地图的宽度、高度、分辨率等。

map(nav_msgs/OccupancyGrid)

  • 地图网格数据一般在rviz以图形化的方式显示。

~entropy(std_msgs/Float64)

  • 估计机器人姿态分布熵(值越大,不确定性越大)。

————————————

2.3服务

dynamic_map(nav_msgs/GetMap)

  • 用于获取地图数据。

————————————

2.4参数

~base_frame(string, default:"base_link")

  • 机器人基坐标系。

~map_frame(string, default:"map")

  • 地图坐标系。

~odom_frame(string, deault:"odom")

  • 里程计坐标系。

~map_update_interval(float, default: 5.0)

  • 地图更新频率,根据指定的值设计更新间隔。

~maxUrange(float, default: 80.0)

  • 激光探测的最大可用范围(超出此阈值,被截断)。

~maxRange(float)

  • 激光探测的最大范围。

.... 参数较多,上述是几个较为常用的参数,其他参数介绍可参考官网。

————————————

2.5所需的坐标变换

雷达坐标系→基坐标系

  • 一般由 robot_state_publisher 或 static_transform_publisher 发布。

基坐标系→里程计坐标系

  • 一般由里程计节点发布。

————————————

2.6发布的坐标变换

地图坐标系→里程计坐标系

  • 地图到里程计坐标系之间的变换

 

1.先启动 Gazebo 仿真环境(此过程略)

2.然后再启动地图绘制的 launch 文件:

roslaunch 包名(nav_...) launch文件名(nav01_...)

3.启动键盘键盘控制节点,用于控制机器人运动建图

rosrun teleop_twist_keyboard teleop_twist_keyboard.py

4.在 rviz 中添加组件,显示栅格地图

 

导航实现02_地图服务

1.map_server简介

map_server功能包中提供了两个节点: map_saver 和 map_server,前者用于将栅格地图保存到磁盘,后者读取磁盘的栅格地图并以服务的方式提供出去

sudo apt install ros-noetic-map-server

2.1map_saver节点说明

2.2地图保存launch文件

首先,参考上一节,依次启动仿真环境,键盘控制节点与SLAM节点;

然后,通过键盘控制机器人运动并绘图;

最后,通过上述地图保存方式保存地图。

结果:在指定路径下会生成两个文件,xxx.pgm 与 xxx.yaml

其中 mymap 是指地图的保存路径以及保存的文件名称。

<launch>
    <arg name="filename" value="$(find mycar_nav)/map/nav" />
    <node name="map_save" pkg="map_server" type="map_saver" args="-f $(arg filename)" />
</launch>

 

xxx.pgm 本质是一张图片,直接使用图片查看程序即可打开。

xxx.yaml 保存的是地图的元数据信息,用于描述图片

通过 map_server 的 map_server 节点可以读取栅格地图数据,编写 launch 文件如下:

<launch>
    <!-- 设置地图的配置文件 -->
    <arg name="map" default="nav.yaml" />
    <!-- 运行地图服务器,并且加载设置的地图-->
    <node name="map_server" pkg="map_server" type="map_server" args="$(find mycar_nav)/map/$(arg map)"/>
</launch>

具体如下:

source  roslaunch 运行没有报错就算成功

接着在我们map文件里面就会多两个文件,这就是保存成功了

而地图服务,想要显示,就要打开一个rviz

source roslaunch 打开nav03

然后在终端打开一个rviz ,add添加地图(map),选取话题即可

——————————————————————————

AMCL(adaptive Monte Carlo Localization) 是用于2D移动机器人的概率定位系统,它实现了自适应(或KLD采样)蒙特卡洛定位方法,可以根据已有地图使用粒子滤波器推算机器人位置。

sudo apt install ros-noetic-navigation

3.2编写测试launch文件

test.launch

 

3.3执行

1.先启动 Gazebo 仿真环境(此过程略);

2.启动键盘控制节点:

rosrun teleop_twist_keyboard teleop_twist_keyboard.py

3.启动上一步中集成地图服务、amcl 与 rviz 的 launch 文件;

4.在启动的 rviz 中,添加RobotModel、Map组件,分别显示机器人模型与地图,添加 posearray 插件,设置topic为particlecloud来显示 amcl 预估的当前机器人的位姿,箭头越是密集,说明当前机器人处于此位置的概率越高;

5.通过键盘控制机器人运动,会发现 posearray 也随之而改变。

 ——————————————

4.1launch文件

关于move_base节点的调用,模板如下:

4.3launch文件集成

如果要实现导航,需要集成地图服务、amcl 、move_base 与 Rviz 等,集成示例如下:

 

4.4测试

1.先启动 Gazebo 仿真环境(此过程略);

2.启动导航相关的 launch 文件;

3.添加Rviz组件(参考演示结果),可以将配置数据保存,后期直接调用;

 4.通过Rviz工具栏的 2D Nav Goal设置目的地实现导航

即 右上角粉红色箭头

——————————

导航与SLAM建图

1.首先运行gazebo仿真环境;

2.然后执行launch文件;

3.在rviz中通过2D Nav Goal设置目标点,机器人开始自主移动并建图了;

4.最后可以使用 map_server 保存地图。

 

 

标签: 三极管lrf2807

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台