文章目录

  • 简述
  • turtlebot3功能包下载
  • turtlebot3模型文件集成
  • 在Rviz中显示机器人模型
  • 在Gazebo中显示机器人模型
  • 在Gazebo中控制机器人模型运动
    • 使用键盘进行控制
    • 使用手柄进行控制
  • 使用Rviz+Gazebo进行仿真
    • Rviz和Gazebo的区别
    • 查看里程计、雷达、摄像头信息
    • 在Rviz+Gazebo中控制机器人模型运动

简述

机器人仿真环境与物理世界环境已高度相似,在没有真实的机器人和硬件时,这是一个很好的替代工具。另外,我们可以将算法应用到实际机器人之前在仿真环境中进行验证和测试。机器人建模可以使用urdf文件或者xacro文件,复杂的机器人对应的模型文件也比较复杂,实际项目中可以使用solidworks来自动生成。这里,我们使用turtlebot3元包中已经创建好的模型文件来进行仿真。

turtlebot3功能包下载

turtlebot3功能包中包含了TurtleBot3的机器人模型、SLAM和导航功能包、遥控功能包和bringup功能包等,另一个功能包turtlebot3_simulations中包含了更丰富的仿真文件。后面将从这两个包中复制出我们需要的文件来集成,并进行仿真。

turtlebot3包下载地址:https://github.com/ROBOTIS-GIT/turtlebot3

turtlebot3_simulations包下载地址:https://github.com/ROBOTIS-GIT/turtlebot3_simulations

PS:后面步骤是从turtlebot3包中只提取需要的文件来进行集成,如果不想麻烦,也可以直接安装完整的turtlebot3功能包来使用:

  1. 二进制文件方式安装

使用下面命令来安装:

$ sudo apt install ros-noetic-turtlebot3

使用下面的命令来运行:

$ roscore
$ export TURTLEBOT3_MODEL=waffle_pi
$ roslaunch turtlebot3_gazebo turtlebot3_world.launch

如果运行时出现下面的错误:

libcurl: (51) SSL: no alternative certificate subject name matches target host name 'api.ignitionfuel.org'

修改~/.ignition/fuel/config.yaml文件,将其中的 https://api.ignitionfuel.org 更改为 https://api.ignitionrobotics.org即可。

  1. 源代码方式安装

进入到自己工作空间的src目录下,然后下载源代码,进行编译:

$ cd ~/catkin_ws/src
$ git clone https://github.com/ROBOTIS-GIT/turtlebot3.git
$ git clone https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git
$ git clone https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git
$ cd ~/catkin_ws/
$ catkin_make

turtlebot3模型文件集成

turtlebot3有三个版本,burger、waffle和waffle_pi,其中waffle_pi版本中配备的传感器最全面,下面使用的模型文件均为此版本。

这里在项目中创建一个功能包turtlebot3_sim_test,创建时注意添加urdf、xacro、gazebo_ros依赖

PS:关于urdf的介绍,参考:http://wiki.ros.org/urdf
        关于xacro的介绍,参考:http://wiki.ros.org/xacro

在turtlebot3_sim_test功能包下创建几个目录:

  1. urdf:用来存储urdf 文件
    将下载的包中turtlebot3-master/turtlebot3_description/urdf目录下turtlebot3_waffle_pi.urdf.xacro文件拷贝到robot_test_ws/src/turtlebot3_sim_test/urdf目录下,这是waffle_pi机器人的模型文件

  2. meshes:用来存储机器人模型的渲染文件
    将下载的包中turtlebot3-master/turtlebot3_description/meshes目录下的全部文件拷贝到robot_test_ws/src/turtlebot3_sim_test/meshes目录下,这是waffle_pi机器人的模型渲染文件

  3. worlds:用来存储gazebo仿真环境文件
    将下载的包中turtlebot3_simulations-master/turtlebot3_gazebo/worlds目录下的turtlebot3_house.worldturtlebot3_world.world文件拷贝到robot_test_ws/src/turtlebot3_sim_test/worlds目录下,这是已经创建好的仿真环境,如果目前电脑的配置不高或者想快速体验的话可以集成turtlebot3_world.world文件,否则建议使用turtlebot3_house.world文件,这个文件与物理环境比较相似,不过在第一次加载时需要几分钟的时间

  4. models:用来存储gazebo仿真环境配置文件
    将下载的包中turtlebot3_simulations-master/turtlebot3_gazebo/models目录下的turtlebot3_houseturtlebot3_world两个文件夹拷贝到robot_test_ws/src/turtlebot3_sim_test/models目录下,这是已经创建好的仿真环境配置文件,其中包含了gazebo中的仿真道具

  5. rviz:用来存储rviz环境下机器人配置文件
    后面使用到时再进行记录

  6. launch:用来存储启动文件
    后面使用到时再进行记录

创建完之后的完整目录如下图所示,后面仿真时会用到这些目录下的文件:


在Rviz中显示机器人模型

下面在turtlebot3_sim_test包中添加turtlebot3_sim_rviz.launch文件来在rviz中显示机器人模型

<launch><arg name="model" default="waffle_pi" /><!-- 在参数服务器载入xacro文件 --><param name="robot_description" command="$(find xacro)/xacro $(find turtlebot3_sim_test)/urdf/turtlebot3_$(arg model).urdf.xacro" /><!-- 启动rviz --><node name="rviz" pkg="rviz" type="rviz" /><!-- 启动机器人状态和关节状态发布节点 --><node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher" /><node pkg="joint_state_publisher" type="joint_state_publisher" name="joint_state_publisher" /></launch>

这里加载的机器人模型文件为turtlebot3_waffle_pi.urdf.xacro,在这个xacro文件中多处引用下载的turtlebot3功能包中的turtlebot3_description目录下的文件,这里要修改成我们自己的文件路径(turtlebot3_sim_test),否则会找不到依赖文件。如果感觉麻烦的话,也可以直接将下载的turtlebot3包下的turtlebot3_description包整个复制到我们的项目中

启动launch文件

$ roslaunch turtlebot3_sim_test turtlebot3_sim_rviz.launch

启动之后rviz并没有显示机器人模型

将左上角的map更改为base_link,点击左下角的Add按钮,添加RobotModel选项后即会显示机器人模型,还可以添加TF坐标关系等

可以将已设置好的配置保存为文件,下次启动launch文件时即可自动加载配置信息,在turtlebot3_sim_test包中添加rviz文件夹,点击左上角的File->Save Config As,然后选择保存的目录,输入文件名称后,点右上角的Save按钮即可保存配置文件。上面下载的功能包turtlebot3-master/turtlebot3_description/rviz目录下有一个model.rviz的配置文件,也可以直接复制到我们的robot_test_ws/src/turtlebot3_sim_test/rviz目录下来使用

再来修改下launch文件,将启动rviz的代码修改为下面的代码,修改完之后,再次启动launch文件即可自动加载配置信息

<node name="rviz" pkg="rviz" type="rviz" args="-d $(find turtlebot3_sim_test)/rviz/model.rviz" />

在Gazebo中显示机器人模型

注意:在执行后面的操作之前先来修改下package.xml文件,否则会出现:waitForService: Service [/gazebo_gui/set_physics_properties] has not been advertised, waiting... Error Code 12 Msg: Unable to find uri[model://turtlebot3_house]错误

在package.xml文件中添加下面这行代码,添加的原因:打开turtlebot3_house.world文件后可以看到,其中加载仿真环境配置文件的地址默认为gazebo下的地址(/usr/share/gazebo-11/models),而并非我们项目中存放仿真环境配置文件的models目录,所以会找不到文件,报上面的错误。另外一种解决办法是,将turtlebot3_sim_test包中models下的turtlebot3_house文件夹复制到/usr/share/gazebo-11/models下

<gazebo_ros gazebo_model_path="${prefix}/models"/>

下面在turtlebot3_sim_test包中添加turtlebot3_sim_gazebo.launch文件来在gazebo中显示机器人模型

<launch><arg name="model" default="waffle_pi"/><arg name="x_pos" default="-2.0"/><arg name="y_pos" default="-0.5"/><arg name="z_pos" default="0.0"/><include file="$(find gazebo_ros)/launch/empty_world.launch"><arg name="world_name" value="$(find turtlebot3_sim_test)/worlds/turtlebot3_house.world"/><arg name="paused" value="false"/><arg name="use_sim_time" value="true"/><arg name="gui" value="true"/><arg name="headless" value="false"/><arg name="debug" value="false"/></include><param name="robot_description" command="$(find xacro)/xacro $(find turtlebot3_sim_test)/urdf/turtlebot3_$(arg model).urdf.xacro" /><node pkg="gazebo_ros" type="spawn_model" name="spawn_urdf"  args="-urdf -model turtlebot3_$(arg model) -x $(arg x_pos) -y $(arg y_pos) -z $(arg z_pos) -param robot_description" />
</launch>

启动launch文件

$ roslaunch turtlebot3_sim_test turtlebot3_sim_gazebo.launch

这里使用的gazebo仿真文件为turtlebot3_house.world,在第一次加载时非常慢,需要几分钟的时间,此时并不是gazebo软件卡死了,后面再加载时就可以秒开了,打开后如下图所示,这里模拟的是室内环境,其中有门、桌子等仿真物


在Gazebo中控制机器人模型运动


使用roslaunch命令启动turtlebot3_sim_gazebo.launch文件之后,使用rostopic list命令来看下当前发布的话题,可以看到有一个/cmd_vel的话题,这个话题已经比较熟悉了,之前再小乌龟的示例中用到过

再来使用rostopic info /cmd_vel命令来看下话题的详细信息,可以看到gazebo订阅了这个话题,下面我们在这个话题上发布速度指令即可操作机器人模型运动

使用键盘进行控制

这里使用ROS提供的通用键盘控制包来操作机器人模型,如果之前没有下载的话使用下面的命令先下载安装

$ sudo apt-get install ros-noetic-teleop-twist-keyboard

参考:http://wiki.ros.org/teleop_twist_keyboard

安装完成后,使用下面的命令启动键盘控制节点,然后按照按键说明就可以控制机器人模型运动了,这个节点会在/cmd_vel话题上发布速度指令

$ roslaunch turtlebot3_sim_test turtlebot3_sim_gazebo.launch
$ rosrun teleop_twist_keyboard teleop_twist_keyboard.py

还可以通过修改配置参数来调整运动速度或停止方式,详细内容参考:https://github.com/ros-teleop/teleop_twist_keyboard

使用手柄进行控制

这里通过简单的修改《ROS之手柄控制》中手柄控制小乌龟运动的示例代码,来实现手柄控制机器人模型在gazebo中运动

这里手柄控制机器人模型运动和之前手柄控制小乌龟运动只有一个简单的区别,这里发布的话题名称为/cmd_vel,小乌龟示例中发布的话题为/turtle1/cmd_vel,把小乌龟示例中发布的话题名称改为/cmd_vel,其它代码无需修改,再来分别启动下turtlebot3_sim_gazebo.launch文件和teleop_turtle.launch文件即可使用手柄控制机器人模型运动了

$ roslaunch turtlebot3_sim_test turtlebot3_sim_gazebo.launch
$ roslaunch teleop teleop_turtle.launch


使用Rviz+Gazebo进行仿真

Rviz和Gazebo的区别

Rviz是ROS的三维可视化工具,它的主要目的是以三维方式显示ROS消息,可以将数据进行可视化表达。例如,可以无需编程就能表达激光测距仪(LRF)传感器中的传感器到障碍物的距离,RealSense、Kinect或Xtion等三维距离传感器的点云数据(PCD,Point Cloud Data),从相机获取的图像值等。

Gazebo是一个仿真系统,可以模拟真实的物理环境,快速测试机器人设计、执行回归测试以及训练AI系统等相关算法的可用性。Gazebo提供了在复杂的室内和室外环境中,准确地模拟多个数量机器人的功能。Gazebo支持 ODE、Bullet、Simbody等强大的物理引擎,具备高质量的图形以及便捷的图形编程界面。

总结来说,Rviz主要用来显示数据,Gazebo用来仿真,使用实际机器人的话,Gazebo就可以不使用了,但还是需要Rviz来进行调试。

查看里程计、雷达、摄像头信息

先启动下gazebo仿真环境

$ roslaunch turtlebot3_sim_test turtlebot3_sim_gazebo.launch

接着启动下rviz

$ roslaunch turtlebot3_sim_test turtlebot3_sim_rviz.launch

rviz启动后,依次加入RobotModel(机器人模型)、Odometry(里程计)、LaserScan(激光雷达)、Image(摄像头),并选择对应的话题,可以通过更改子选项来调整显示效果,这里Odometry中的Covariance选项不要勾选,否则画面会很模糊

再来运行下键盘控制节点,此时,使用键盘控制机器人模型运动即可看到里程计、雷达、摄像头数据的变化

$ rosrun teleop_twist_keyboard teleop_twist_keyboard.py _key_timeout:=0.2

在Rviz+Gazebo中控制机器人模型运动

依次启动gazebo和rviz,再来启动上面记录的键盘或手柄节点即可操作机器人模型在gazebo和rviz环境下的运动

再来进一步分析下,gazebo和rviz下的运动是不同的,单独启动rviz然后运行键盘控制节点,是无法控制机器人模型运动的。gazebo仿真环境下,机器人有驱动器,其依赖/cmd_vel上的速度信息。rviz环境下,机器人运动实际上是坐标变换,依赖的是/joint_states。单独启动gazebo和rviz来看下两者发布的话题

再来看下计算图,会更清晰,单独启动gazebo

单独启动rviz

rviz中机器人模型的运动依赖turtlebot3_sim_rviz.launch文件中的一行代码,robot_state_publisher节点将机器人的状态发布到tf2

<node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher" />

参考:http://wiki.ros.org/robot_state_publisher、http://wiki.ros.org/joint_state_publisher?distro=noetic

分别启动gazebo和rviz

☝ ★★★ — 返回 《ROS机器人开发笔记汇总》总目录 — ★★★ ☝

机器人模型仿真(turtlebot3)相关推荐

  1. ROS探索总结(四)(五)(六)——简单的机器人仿真 创建简单的机器人模型smartcar 使用smartcar进行仿真

    ROS探索总结(四)--简单的机器人仿真 前边我们已经介绍了ROS的基本情况,以及新手入门ROS的初级教程,现在就要真正的使用ROS进入机器人世界了.接下来我们涉及到的很多例程都是<ROS by ...

  2. 焊接机器人——6自由度焊接机器人solidworks设计、D-H模型参数及matlab robotics toolbox模型仿真与验证

    1 设计思路 焊接机器人在点与点之间移位时速度要快捷,动作要平稳,定位要准确,以减少移位的时间,提高工作效率. 考虑到各种被焊接工件的外型特点,首先我们必须保证机械臂能在达到空间中的所有位置(能够有较 ...

  3. 【ROS仿真实战】机器人模型描述文件介绍(二)

    文章目录 前言 一.URDF与XACRO简介 1.1 URDF 1.2 XACRO 二.三维模型的选择DAE还是STL? 三. 总结 前言 URDF和XACRO是ROS机器人领域中用于描述机器人模型的 ...

  4. 在Jetson Nano上学习ROS的记录(版本Ubuntu18.04,课程来源赵虚左老师的《ROS理论与实践》)第十二章 机器人导航(仿真)

    系列文章目录 第一章 ROS空间创建.helloworld的实现.开启多个节点 第二章 话题通信 第三章 服务通信 第四章 参数服务器 第五章 常用指令 第六章 通信机制实操 第七章 ROS通信机制进 ...

  5. V-rep学习笔记:机器人模型创建4—定义模型

    完成之前的操作后终于来到最后一步--定义模型,即将之前创建的几何体.关节等元素按层级关系组织成为一个整体. 将最后一个连杆robot_link_dyn6拖放到相应的关节(robot_joint6)下, ...

  6. ROS探索总结(五)——创建简单的机器人模型smartcar

    前面我们使用的是已有的机器人模型进行仿真,这一节我们将建立一个简单的智能车机器人smartcar,为后面建立复杂机器人打下基础. 一.创建硬件描述包 roscreat-pkg smartcar_des ...

  7. python仿真智能驾驶_基于Python的3R机器人运动仿真

    一.问题描述 如右图所示的三自由度机械臂,关节1和关节2相互垂直,关节2和关节3相互平行.如图所示,所有关节均处于初始状态. 要求: (1) 定义并标注出各关节的正方向: (2) 定义机器人基坐标系{ ...

  8. python机械臂仿真_基于Python的3R机器人运动仿真

    一.问题描述 如右图所示的三自由度机械臂,关节1和关节2相互垂直,关节2和关节3相互平行.如图所示,所有关节均处于初始状态. 要求: (1) 定义并标注出各关节的正方向: (2) 定义机器人基坐标系{ ...

  9. ubuntu18.04 ROS melodic—创建简单的机器人模型smartcar

    因为古月原来链接内容和新版本有些差异问题,现在最新版基础上整理下记录供参考 ROS探索总结(五)-创建简单的机器人模型smartcar 前面我们使用的是已有的机器人模型进行仿真,这一节我们将建立一个简 ...

  10. urdf与xacro的使用方法 机械臂模型仿真示例

    为什么要创建机器人的三维模型,原因在于机器人机器人仿真工具可以帮助我们体现发现设计中的一些关键错误. 而模型仿真的含义,在于我们创建的是机器人模型,因此不一定和实际机器人长得一模一样.但因为是仿真,所 ...

最新文章

  1. python文件排序
  2. 利用银行家算法避免死锁(C++实现)
  3. 8.Spring Cloud Alibaba教程:整合Seata分布式事务
  4. IOS使用MessageUI Framework 发送短信息
  5. mysql %和正则_mysql 正则模式和like模糊查询
  6. oracle 备份教研归档失败,归档日志丢失造成Rman备份失败解决办法
  7. 通过mod_limitipconn模块来限制apache的并发连接数
  8. 七、配置ssh keys连通github跟ssh-agent
  9. 计算机系统-电路设计04-全加器的内部电路实现
  10. Matlab实用代码——直方图的绘制并在单个直方图上标注对应数字
  11. 有什么python在线编辑器-Python常用的编辑器有哪些?老男孩Python
  12. 《机械原理》上 学后感
  13. 微信小程序 # 仿写微信通讯录页面(字母侧栏效果)
  14. Nginx配置443端口
  15. 青春散场,初心不忘【致毕业季理想主义的你】
  16. 软件工程生命周期模型对比分析
  17. Linux下SVN服务器迁移(详细版)
  18. gis与计算机科学之间的联系,GIS地理信息系统课程论文 地理信息系统与其他学科的关系及应用前景...
  19. GreenDao笔记
  20. web网站总是出现404 bug?照着以下几个原因排查,不怕修复不了啦

热门文章

  1. 助力运动:实时乒乓球视频分析
  2. Linux wine系列——Ubuntu20.04安装wine教程 [2021.3]
  3. 地图上如何量方位角_利用GPS测量方位角的方法
  4. Altera FPGA 差分信号初识(3)
  5. 思科交换机与路由器常用基础配置
  6. 金额中文大写c语言,C语言编程:数字金额转换为中文大写金额?
  7. Linux命令行删除文件恢复
  8. 谈谈自由之刃游戏代理推广感受
  9. word多级目录设置和自动生成目录
  10. 【GT】Assembler 源码解读及使用 !Cocos Creator!