ROS仿真机器人(安装、配置、测试、建图、定位、路径规划)(上)

作者 | 在梦里-119
编辑 | 3D视觉开发者社区

导读

本文利用ROS进行仿真机器人实验,从安装步骤开始讲解,一直到配置、测试、建图、定位与路径规划,每一步的操作过程都极尽详细,包括可能出现的问题以及对应的解决方案,可以称为保姆级别的教程了。由于文章篇幅过长,因此分为上下两篇,推荐开发者阅读。

01 ROS安装与配置

1.1 安装虚拟机软件

此前使用的虚拟机是 VMware Workstation 15 Pro,但是使用起来不是特别方便,比如基本操作主机复制的内容无法黏贴到客户机(ubuntu)中。于是本次实验使用了VirtualBox 6.1.18虚拟机。

1.2 虚拟一台主机

使用VirtualBox虚拟计算机的过程也不算复杂,只需要按照提示配置其相关参数即可,其各项参数设置如图1.2.1所示。

在图1.2.1:VirtualBox虚拟主机这图1.2.1:VirtualBox虚拟主机里插入图片描述
图1.2.1:VirtualBox虚拟主机

1.3 安装ubuntu

首先从官网下载 Ubuntu 的镜像文件,这里选择的版本是20.04.2.0,于是其对应安装的ros版本为Noetic Ninjemys(May 2020-May2025):然后,配置虚拟主机,关联下载好的Ubuntu 镜像文件。

接下来对ubuntu进行优化,按照网上操作(安装虚拟机工具、启动文件交换模式)方便虚拟机与宿主机的文件交换。

1.4 在ubuntu中安装ROS机器人操作系统

1.4.1 配置ubuntu的软件和更新

配置ubuntu的软件和更新,允许安装不经认证的软件。首先打开“软件和更新”对话框,具体可以在 Ubuntu 搜索按钮中搜索。

打开后按照图1.4.1进行配置(确保勾选了"restricted", “universe,” 和 “multiverse.”)

图1.4.1
图1.4.1

1.4.2 设置安装源

使用国内清华大学安装源,这样安装速度更快,Ctrl+Ail+T打开终端输入命令:


sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'

回车输入管理员密码,显示如图1.4.2下界面即成功发。

图片
图1.4.2

1.4.3 设置key

如图1.4.3所示,输入:


sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

图片
图1.4.3

1.4.4 安装

首先需要更新apt,apt 是用于从互联网仓库搜索、安装、升级、卸载软件或操作系统的工具。

在终端输入:sudo apt update,界面显示如图1.4.4所示:

图片
图1.4.4

然后,再安装所需类型的 ROS:ROS 多个类型:Desktop-Full、Desktop、ROS-Base。这里介绍较为常用的Desktop-Full(官方推荐)安装: ROS, rqt, rviz, robot-generic libraries, 2D/3D simulators, navigation and 2D/3D perception

在终端输入:sudo apt install ros-noetic-desktop-full

出现如图1.4.5界面,输入Y回车。

图片

图1.4.5

如图1.4.6所示的安装过程,经过漫长等待,直至安装成功。

图片
图1.4.6

吃了个饭回来,发现如图1.4.7错误提示:

图片

初步检测,应该是网络问题,于是直接重复调用更新与安装命令,最后成功。

1.4.5 安装构建依赖

在 noetic 最初发布时,和其他历史版本稍有差异的是:没有安装构建依赖这一步骤。随着 noetic 不断完善,官方补齐了这一操作。

首先安装构建依赖的相关工具,如图1.4.8所示,调用命令:


sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential

回车输入密码,直至安装成功。

图片
图1.4.8

ROS中使用许多工具前,要求需要初始化rosdep(可以安装系统依赖) – 上一步实现已经安装过了,如图1.4.9。

sudo apt install python3-rosdep

图片
图1.4.9

初始化rosdep,输入命令:sudo rosdep init,显示如图1.4.10所示。

图片
图1.4.10

rosdep update
出现图1.4.11所示的问题:网络超时

图片
图1.4.11

在网上查找了以下几种方法解决上述问题,发现都不行:

(1)更改镜像源

(2)更改域名服务器

执行:sudo gedit /etc/resolv.conf

将原有的nameserver这一行注释,并添加以下两行:

nameserver 8.8.8.8 #google域名服务器

nameserver 8.8.4.4 #google域名服务器

保存退出,执行

sudo apt-get update

再执行

rosdep update

(3)添加网站上解析出来的IP,进行操作

最后参考一篇博主的方法:将相关资源备份到gitee,修改 rosdep 源码,重新定位资源。

步骤一:切换路径cd /usr/lib/python3/dist-packages/

步骤二:

查找rosdep中和raw.githubusercontent.com相关的内容,

调用命令:

find . -type f | xargs grep “raw.githubusercontent”,显示如图1.4.12.

图片
图1.4.12

步骤三:找到如下四个文件:

./rosdistro/init.py、

./rosdep2/gbpdistro_support.py、

./rosdep2/sources_list.py 、

./rosdep2/rep3.py。、

可以使用sudo gedit命令修改文件中涉及的 URL 内容,如果是

:raw.githubusercontent.com/ros/rosdistro/master

都替换成:gitee.com/zhao-xuzuo/rosdistro/raw/master即可,这样就改变了资源路径。

步骤四:重新运行:

sudo rosdep init rosdep update,如图1.4.13所示。

就可以正常实现 rosdep 的初始化与更新了。

图片
图1.4.13

1.5 配置环境变量

配置环境变量,方便在任意 终端中使用 ROS。
调用命令:echo “source /opt/ros/noetic/setup.bash” >> ~/.bashrc
source ~/.bashrc,如图1.5所示。

图片
图1.5

1.6 测试ROS

首先调用命令:roscore,显示如图1.6.1所示:

图片
图1.6.1

其次添加新窗口并调用命令:rosrun turtlesim turtlesim_node(此时会弹出图形化界面,如图1.6.2所示)

图片
图1.6.2

之后添加新窗口并调用命令:rosrun turtlesim turtle_teleop_key(在3中可以通过上下左右控制2中乌龟的运动)
最终结果如下所示,则测试成功

图片
图1.6.3

02 机器人仿真模型与环境配置

引言-ROS机器人仿真实验几点说明
本实验使用编程软件:VScode,及界面显示如图2所示:

图片
图2

2.1 构建差速移动机器人仿真模型

2.1.1 差速移动机器人(四轮圆柱状机器人)模型描述:

机器人参数如下,底盘为圆柱状,半径 10cm,高 8cm,四轮由两个驱动轮和两个万向支撑轮组成,两个驱动轮半径为 3.25cm,轮胎宽度1.5cm,两个万向轮为球状,半径 0.75cm,底盘离地间距为 1.5cm(与万向轮直径一致),并添加雷达传感器

2.1.2 实现流程

(1)创作ROS工作空间并初始化

使用命令:

mkdir -p demo_18/src

cd demo_18

catkin_make

(2) 启动VScode

在demo_18目录下使用命令:code .

便可以开启VScode,接下来所有操作都在可视化的VScode上进行。

(3)创建 ROS 功能包

选定 src 右击 —> create catkin package

创建urdf01_rviz功能包,导入依赖包:urdf与xacro

(4)在当前功能包下,添加如下目录

urdf: 存储 urdf 文件的目录

config: 配置文件

launch: 存储 launch 启动文件

(5)编写URDF文件

这里可以使用URDF文件编写也可以使用XACRO文件编写小车模型文件,本人在此两种实现方法都用了,分别在urdf文件夹下,新建urdf用于编写urdf小车模型;新建xacro文件夹编写xacro小车模型,但是这里只讲解xacro文件编写的小车模型,这是因为urdf编写小车模型存在如下问题:

问题1:在设计关节的位置时,需要按照一定的公式计算,公式是固定的,但是在 URDF 中依赖于人工计算,存在不便,容易计算失误,且当某些参数发生改变时,还需要重新计算。

问题2:URDF 中的部分内容是高度重复的,驱动轮与支撑轮的设计实现,不同轮子只是部分参数不同,形状、颜色、翻转量都是一致的,在实际应用中,构建复杂的机器人模型时,更是易于出现高度重复的设计,按照一般的编程涉及到重复代码应该考虑封装。

(6)编写xacro文件用于构建小车模型

编写car_base.xacro用于构建小车底盘;

编写laser.xacro文件用于构建雷达;

编写car.xacro文件用于组合地盘与雷达。

(7)编写launch文件

编写car.launch文件,这里在launch文件中使用命令:<paramname="robot_description"command="$(findxacro)/xacro$(findurdf01_rviz)/urdf/xacro/car.xacro" />

直接加载(6)中编写的小车模型xacro文件;

使用命令:<node pkg="rviz" type="rviz" name="rviz" />启动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" />

启动机器人状态和关节状态发布节点;

使用命令:<nodepkg="joint_state_publisher_gui"type="joint_state_publisher_gui" name="joint_state_publisher_gui" output="screen" />

启动图形化的控制关节运动节点;

(8) 检查urdf01_rviz功能包文件

按上述步骤完成后,urdf01_rviz功能包含文件夹及文件如图2.1.1所示。

图片
图2.1.1

(9) 运行编写好的car.launch文件
点击udf01_rviz功能包,右击–>点击在集成终端中打开,如图2.1.2所示。

图片
图2.1.2

在打开的第一个终端输入:roscore命令,运行ros。接着点击加号,新建终端,输入命令:

source ./devel/setup.bash

roslaunch urdf01_rviz car.launch

接下来便会打开rviz窗口。

(10)在RVIZ中显示机器人模型

viz 启动后,会发现并没有盒装的机器人模型,这是因为默认情况下没有添加机器人显示组件,需要手动添加,在添加组件前,先设置Fixed Frame为base_footprint,也就是更改参考坐标系,结果如图2.1.2.

图片
图2.1.2 bnm

添加机器人模型组件,如图2.1.3,点击Add,之后选择需要的组件,比如RobotModel,其余组件添加方式类似,之后类似操作不再赘述。之后便可以看到图2.1.的机器人模型。

在这里插入图片描述
图2.1.3

图片
图2.1.4

(11)在RVIZ配置操作并调用

为了避免每一次啊都要进行更改坐标系与组件添加操作,可以在步骤(10)中,点击file–>save config as ,并将其保存到demo_18/src/urdf01_rviz/config下,命名为car.rviz。

之后修改car.launch下rviz启动命令为:
<node pkg="rviz" type="rviz" name="rviz" args="-d $(find urdf01_rviz)/config/car.rviz"/>

这样,下次打开rviz显示模型便不需要配置操作。

2.2 仿真环境搭建

2.2.1 仿真环境描述

仿真环境搭建比较简单,直接放置了给定圆柱体与正方体,因为自身电脑的原因,带动ros非常卡顿,所以对于仿真环境搭建比较简单。本人也尝试构建参考实例中的环境发现Gazebo无响应。

2.2.2 机器人模型显示在gazebo的实现流程

(1)在demo_18工作空间下,创建 ROS 功能包

创建urdf02_gazebo功能包,导入依赖包: urdf、xacro、gazebo_ros、gazebo_ros_control、gazebo_plugins

(2)在当前功能包下,添加如下目录

urdf: 存储 urdf 文件的目录

config: 存储rviz配置文件

launch: 存储 launch 启动文件

worlds: 保存地图文件

(3)编写封装惯性矩阵算法的 xacro 文件

在urdf下新建head.xacro文件,存放惯性矩阵算法。惯性矩阵的设置需要结合link的质量与外形参数动态生成,标准的球体、圆柱与立方体的惯性矩阵公式如下(已经封装为 xacro 实现):

球体惯性矩阵

圆柱惯性矩阵

立方体惯性矩阵

这里直接复制并保存。需要注意的是,原则上,除了base_footprint 外,机器人的每个刚体部分都需要设置惯性矩阵,且惯性矩阵必须经计算得出,如果随意定义刚体部分的惯性矩阵,那么可能会导致机器人在 Gazebo 中出现抖动,移动等现象。

(4)编写小车模型的xavro文件

直接从2.1下拷贝car.xacro、car_base.xacro、laser.xacro文件到urdf目录下,并且需要并设置 collision inertial 以及 color 等参数。具提程序参照附件,这里不对程序做详细介绍,附录程序有详细注释。

(5)编写launch文件

在launch文件夹下编写env.launch文件,这里在launch文件中使用命令:

使用命令:
<param name="robot_description" command="$(find xacro)/xacro $(find urdf02_gazebo)/urdf/car.xacro" />

将 Urdf 文件的内容加载到参数服务器;

使用命令:
<include file="$(find gazebo_ros)/launch/empty_world.launch" />

启动 gazebo;

使用命令:
<node pkg="gazebo_ros" type="spawn_model" name="model" args="-urdf -model car -param robot_description" />
在 gazebo 中显示机器人模型;

(6)运行程序并在gazebo中查看

在终端下输入:roslaunch urdf02_gazebo env.launch命令,便可以启动gazebo,界面显示如图2.2.1。

图片
图2.2.1

2.2.3 Gazebo仿真环境搭建

到目前为止,我们已经可以将机器人模型显示在 Gazebo 之中了,但是当前默认情况下,在 Gazebo 中机器人模型是在 empty world 中,并没有类似于房间、家具、道路、树木… 之类的仿真物。在Gazebo 中创建仿真实现方式有两种:

方式1: 直接添加内置组件创建仿真环境

方式2: 手动绘制仿真环境(更为灵活)

也还可以直接下载使用官方或第三方提高的仿真环境插件。

本实验采用方式1添加内置组件创建仿真环境,大家可能更倾向于方式2,这里因为本人电脑的原因,采用方式1,其具体步骤如下:

步骤一:启动 Gazebo 并添加组件

如图2.2.2红色框所示:

图片
图2.2.2

步骤二:保存仿真环境
添加完毕后,选择 file —> Save World as 选择保存路径(功能包下: worlds 目录),文件名自定义,后缀名设置为 .world

步骤三:启动仿真环境
这里只需要将上述的env.launch文件中的gazebo启动命令更改为:


<include file="$(find gazebo_ros)/launch/empty_world.launch" >
<arg name="world_name" value="$(find urdf02_gazebo)/worlds/box_house.world" />
</include>

这里我保存仿真环境文件为:box_house.world。

按照上述(6)步骤重新打开gazebo,便可得到如下图2.2.3所示的仿真环境。

图片
图2.2.3

版权声明:本文为奥比中光3D视觉开发者社区授权转载发布,仅做学术分享,版权归原作者所有,若涉及侵权内容请联系删文。

3D视觉开发者社区是由奥比中光给所有开发者打造的分享与交流平台,旨在将3D视觉技术开放给开发者。平台为开发者提供3D视觉领域免费课程、奥比中光独家资源与专业技术支持。

点击加入3D视觉开发者社区,和开发者们一起讨论分享吧~
也可以移步微信关注官方公众号 3D视觉开发者社区 ,获取更多干货知识哦~

猜你喜欢

转载自blog.csdn.net/limingmin2020/article/details/125219024