【ROS】ROS入门笔记-Gazebo仿真与实物测试篇
前面我们学习了ROS的一些基础知识,现在我们来学习ROS环境下的Gazebo仿真。
本文所需的源码下载地址为
https://github.com/guyuehome/guyueclass
文章目录
- 〇、写在前面
- 1.rosdep问题
- 2.Gazebo闪退问题
- 一、优化物理仿真模型
- 1.使用xacro文件优化URDF模型
- 1.1 xacro简介
- 1.2 xacro的使用
- 常量定义
- 常量使用与计算
- 宏定义
- 宏调用
- 文件包含
- 1.3 ros_control功能包
- 1.3.1 ros_control是什么
- 2.完善机器人模型的物理仿真
- 2.1 为link添加惯性参数和碰撞属性
- 2.2 为link添加gazebo标签
- 2.3 为joint添加传动装置
- 2.4 添加gazebo控制器插件
- 2.5 在gazebo中加载机器人模型
- 二.Gazebo仿真
- 1.下载模型
- 2 .初次运行Gazebo
- 准备工作
- 打开Gazebo
- 控制小车
- 3.在Gazebo中创建模型
- Insert 直接添加
- Building Editor 绘制
- 4.物理环境运动仿真
- 打开环境
- 键盘控制
- 5.摄像头仿真
- 6.深度相机仿真
- 7.激光雷达仿真
- 8.SLAM仿真
- 8.1 准备工作
- 8.2 Gmapping SLAM
- 激光雷达
- 深度相机
- 8.3 Hector SLAM
- 8.4 Cartographer SLAM
- 8.5 RTAB SLAM
- 9.自主导航仿真
〇、写在前面
在第一篇笔记中我使用的是Ubuntu 20和ROS noetic,但为了方便学习和适应网上资料,我们在这里更改为Ubuntu 18和ROS melodic。在切换的过程中请注意以下几点:
1.rosdep问题
ROS melodic的安装有这么一步,会经常报错。
sudo rosdep init
rosdep update
主要原因是ROS服务器在国外,访问经常掉线。在这里我们参考了以下两个解决方案。
https://blog.csdn.net/Kenny_GuanHua/article/details/116845781
http://www.autolabor.com.cn/book/ROSTutorials/chapter1/12-roskai-fa-gong-ju-an-zhuang/124-an-zhuang-ros.html
具体方法如下(不保证长期有效)
网站https://ghproxy.com/
支持Github的资源代理,非常好用,我们将用此代理加速rosdep对Github的访问,进而解决rosdep update
失败问题。
我们要做的,是在rosdep的若干个脚本文件中,把https://ghproxy.com/
添加到相应URL前面即可。
- 首先修改rosdep下载资源的脚本文件:
/usr/lib/python2.7/dist-packages/rosdep2/sources_list.py
,把以下行添加到脚本中的download_rosdep_data()函数中,以应用代理服务:
# 打开sources_list.py
sudo gedit /usr/lib/python2.7/dist-packages/rosdep2/sources_list.py
# 在download_rosdep_data()函数中添加这一句
url="https://ghproxy.com/"+url
- 然后,用同样的方法修改
/usr/lib/python2.7/dist-packages/rosdistro/__init__.py
里面的DEFAULT_INDEX_URL
参数,如下:
# 打开__init__.py
sudo gedit /usr/lib/python2.7/dist-packages/rosdistro/__init__.py
# 将DEFAULT_INDEX_URL的网址前加上https://ghproxy.com/
DEFAULT_INDEX_URL = 'https://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml'
- 接着,以下4个文件中也使用了
raw.githubusercontent.com
网址,同样的方法把https://ghproxy.com/
添加到网址前:
# 第36行
sudo gedit /usr/lib/python2.7/dist-packages/rosdep2/gbpdistro_support.py# 第72行
sudo gedit /usr/lib/python2.7/dist-packages/rosdep2/sources_list.py# 第39行
sudo gedit /usr/lib/python2.7/dist-packages/rosdep2/rep3.py# 第68行 和 第119行
sudo gedit /usr/lib/python2.7/dist-packages/rosdistro/manifest_provider/github.py
- 最后,在
/usr/lib/python2.7/dist-packages/rosdep2/gbpdistro_support.py
的第204行添加如下代码:
# 打开gbpdistro_support.py
sudo gedit /usr/lib/python2.7/dist-packages/rosdep2/gbpdistro_support.py
# 在第204行添加如下代码
gbpdistro_url = "https://ghproxy.com/" + gbpdistro_url
之后可正常执行
sudo rosdep init
rosdep update
2.Gazebo闪退问题
请输入如下进行测试
# 这将会打开Gazebo并显示三个简单的形状
roslaunch gazebo_ros shapes_world.launch
如果失败请运行如下,并重启终端。
echo "export SVGA_VGPU10=0" >> ~/.bashrc
一、优化物理仿真模型
1.使用xacro文件优化URDF模型
1.1 xacro简介
URDF模型是一种经典的物理模型,但其存在一些问题使其不适合在Gazebo中直接使用。这些问题包括:
- 模型冗长,重复较多
- 参数修改麻烦
- 没有参数计算功能
- …
xacro模型是适合在Gazebo中使用的模型,其特点包括:
- 精简模型代码
- 创建宏定义
- 文件包含
- 提供可编程接口
- 常量
- 变量
- 数学计算
- 条件语句
1.2 xacro的使用
常量定义
<xacro:property name="M_PI" value="3.1415926"/>
<xacro:property name="base_mass" value="1" />
<xacro:property name="base_radius" value="0.20"/>
<xacro:property name="base_length" value="0.16"/>
常量使用与计算
<xacro:macro name="sphere_inertial_matrix" params="m r"><inertial><mass value="${m}" /><inertia ixx="${2*m*r*r/5}" ixy="0" ixz="0"iyy="${2*m*r*r/5}" iyz="0" izz="${2*m*r*r/5}" /></inertial>
</xacro:macro>
注意:所有数学运算都会被转换为浮点数计算以保证精度。
宏定义
<!-- Macro for robot caster -->
<xacro:macro name="caster" params="prefix reflect"><joint name="${prefix}_caster_joint" type="continuous"><origin xyz="${reflect*caster_joint_x} 0 ${-(base_length/2 + caster_radius)}" rpy="0 0 0"/><parent link="base_link"/><child link="${prefix}_caster_link"/><axis xyz="0 1 0"/></joint><link name="${prefix}_caster_link"><visual><origin xyz="0 0 0" rpy="0 0 0"/><geometry><sphere radius="${caster_radius}" /></geometry><material name="black" /></visual><collision><origin xyz="0 0 0" rpy="0 0 0"/><geometry><sphere radius="${caster_radius}" /></geometry></collision> <sphere_inertial_matrix m="${caster_mass}" r="${caster_radius}" /></link><gazebo reference="${prefix}_caster_link"><material>Gazebo/Black</material></gazebo>
</xacro:macro>
宏调用
<caster prefix="front" reflect="-1"/>
<caster prefix="back" reflect="1"/>
文件包含
<xacro:include filename="$(find mbot_description)/urdf/mbot_base_gazebo.xacro" />
1.3 ros_control功能包
1.3.1 ros_control是什么
- ROS为开发者提供的机器人控制中间件
- 包含一些列控制器接口、传动接口、硬件接口等
ros_contral主要提供了四种控制器(Controllers)
- joint_state_controller 状态控制器
- joint_effort_controller 力控制器
- joint_position_controller 位置控制器
- joint_velocity_controller 速度控制器
2.完善机器人模型的物理仿真
2.1 为link添加惯性参数和碰撞属性
link标签一般包含三部分内容
- visual,可视化
- collision,碰撞检测
- cylinder_inertial_matrix,惯性矩阵
我们看一个例程
<link name="${prefix}_caster_link"><visual><origin xyz="0 0 0" rpy="0 0 0"/><geometry><sphere radius="${caster_radius}" /></geometry><material name="black" /></visual><collision><origin xyz="0 0 0" rpy="0 0 0"/><geometry><sphere radius="${caster_radius}" /></geometry></collision> <sphere_inertial_matrix m="${caster_mass}" r="${caster_radius}" />
</link>
2.2 为link添加gazebo标签
主要是为了显示颜色。
<gazebo reference="${prefix}_wheel_link"><material>Gazebo/Gray</material>
</gazebo>
2.3 为joint添加传动装置
<transmission name="${prefix}_wheel_joint_trans"><type>transmission_interface/SimpleTransmission</type><joint name="${prefix}_wheel_joint" ><hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface></joint><actuator name="${prefix}_wheel_joint_motor"><hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface><mechanicalReduction>1</mechanicalReduction></actuator>
</transmission>
2.4 添加gazebo控制器插件
<!-- controller -->
<gazebo><plugin name="differential_drive_controller" filename="libgazebo_ros_diff_drive.so"><rosDebugLevel>Debug</rosDebugLevel><publishWheelTF>true</publishWheelTF># 机器人命名空间<robotNamespace>/</robotNamespace><publishTf>1</publishTf><publishWheelJointState>true</publishWheelJointState><alwaysOn>true</alwaysOn><updateRate>100.0</updateRate><legacyMode>true</legacyMode># 左右轮转动关节<leftJoint>left_wheel_joint</leftJoint><rightJoint>right_wheel_joint</rightJoint># 机器人模型的相关尺寸<wheelSeparation>${wheel_joint_y*2}</wheelSeparation><wheelDiameter>${2*wheel_radius}</wheelDiameter><broadcastTF>1</broadcastTF><wheelTorque>30</wheelTorque><wheelAcceleration>1.8</wheelAcceleration># 控制器订阅的速度指令<commandTopic>cmd_vel</commandTopic># 里程计参考坐标<odometryFrame>odom</odometryFrame> <odometryTopic>odom</odometryTopic> <robotBaseFrame>base_footprint</robotBaseFrame></plugin>
</gazebo>
2.5 在gazebo中加载机器人模型
使用launch文件加载模型
<launch><arg name="model" default="$(find xacro)/xacro --inorder '$(find mbot_description)/urdf/mbot_gazebo.xacro'" /><arg name="gui" default="true" /><param name="robot_description" command="$(arg model)" /><!-- 设置GUI参数,显示关节控制插件 --><param name="use_gui" value="$(arg gui)"/><!-- 运行joint_state_publisher节点,发布机器人的关节状态 --><node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" /><!-- 运行robot_state_publisher节点,发布tf --><node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" /><!-- 运行rviz可视化界面 --><node name="rviz" pkg="rviz" type="rviz" args="-d $(find mbot_description)/config/mbot.rviz" required="true" /></launch>
二.Gazebo仿真
1.下载模型
下载下列模型,并放置到~/.gazebo/models
https://github.com/osrf/gazebo_models
.gazebo目录需要在home
目录下按Ctrl+h显示隐藏目录。
如果没有该目录请自行创建。
2 .初次运行Gazebo
准备工作
运行之前请将本章源码,即guyueclass-main/ros_basic/mbot_gazebo
内的三个文件夹拷贝到我们的工作空间~/catkin_ws/src
中。
工作空间的创建方法请参考本系列上一篇教程。
随后进入工作空间目录~/catkin_ws
进行编译。
# 进入工作空间根目录
cd ~/catkin_ws# 编译工作空间
catkin_make
打开Gazebo
打开一个新的终端
# 打开Gazebo运行空间
roslaunch mbot_gazebo view_mbot_gazebo_empty_world.launch
此时可看到Gazebo环境中出现一辆圆形小车。
控制小车
查看话题列表
rostopic list
可见/cmd_vel
速度指令接口。
# 发布速度消息
rostopic pub /cmd_vel geometry_msgs/Twist "linear:x: 0.5y: 0.0z: 0.0
angular:x: 0.5y: 0.0z: 0.0"
可见小车移动。
# 查看位置信息
rostopic echo /odom
此时可见终端打印小车位置信息。
3.在Gazebo中创建模型
Insert 直接添加
在Gazebo左侧栏中找到Insert,可直接添加已有的模型。
在File中的Save world as可以将当前环境保存下来。
Building Editor 绘制
点击Edit中的Building Editor,可自行绘制环境。
4.物理环境运动仿真
打开环境
# 打开Gazebo运行空间
roslaunch mbot_gazebo view_mbot_gazebo_play_ground.launch
此时可见有障碍物的环境。
键盘控制
# 启动键盘控制脚本
roslaunch mbot_teleop mbot_teleop.launch
此时可用键盘控制移动。
5.摄像头仿真
打开环境
# 打开Gazebo运行空间
roslaunch mbot_gazebo view_mbot_with_camera_gazebo.launch
查看话题列表
rostopic list
可见/camera
摄像头接口。
使用rqt_image
查看画面,选择自己想看的topic
rqt_image
6.深度相机仿真
打开环境
# 打开Gazebo运行空间
roslaunch mbot_gazebo view_mbot_with_kinect_gazebo.launch
查看话题列表
rostopic list
可见/kinect
摄像头接口。
使用RVIZ查看画面
rosrun rviz rviz
坐标系选择odom
添加Pointcloud2和Robotmodel
7.激光雷达仿真
打开环境
# 打开Gazebo运行空间
roslaunch mbot_gazebo view_mbot_with_laser_gazebo.launch
查看话题列表
rostopic list
可见/scan
激光雷达接口。
使用RVIZ查看画面
rosrun rviz rviz
坐标系选择odom
添加laderscan和Robotmodel
8.SLAM仿真
8.1 准备工作
- 将源码拷贝到工作空间
- 安装必要功能包
SLAM部分可能需要安装的功能包
# 点云转雷达
sudo apt-get install ros-melodic-depthimage-to-laserscan
cd ~/catkin_ws/src# 编译所需
git clone https://github.com/ros-planning/navigation_msgs.git
# gmapping
sudo apt-get install ros-melodic-gmapping
cd ~/catkin_ws/src# hector_slam
git clone https://github.com/tu-darmstadt-ros-pkg/hector_slam.git
# cartographer
sudo apt-get install ros-melodic-cartographer-*
# 保存图片所需
sudo apt-get install ros-melodic-map-server
# rtabmap
sudo apt-get install ros-melodic-rtabmap-ros
- 编译
cd ~/catkin_wscatkin_make
- 打开环境
# 打开Gazebo运行空间
roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch
8.2 Gmapping SLAM
- 二维SLAM
- 常用、稳定
- 深度、IMU(可选)、里程计
激光雷达
# 激光雷达仿真环境
roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch# Gmapping Demo
roslaunch mbot_navigation gmapping_demo.launch# 键盘控制脚本
roslaunch mbot_teleop mbot_teleop.launch
使用键盘控制小车,完成建图。
# 保存地图
rosrun map_server map_saver -f cloister_gmapping
生成.pgm和.yaml文件,默认保存位置为home目录。
深度相机
# 激光雷达仿真环境
roslaunch mbot_gazebo mbot_kinect_nav_gazebo.launch# Gmapping Demo
roslaunch mbot_navigation gmapping_demo.launch# 键盘控制脚本
roslaunch mbot_teleop mbot_teleop.launch
使用键盘控制小车,完成建图。
深度相机效果不好
- 需要较多的特征点
- 容易错位
8.3 Hector SLAM
- 激光雷达
- 不需要里程计
- 激光雷达刷新率要高
- 移动要慢
# 激光雷达仿真环境
roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch# Hector Demo
roslaunch mbot_navigation hector_demo.launch# 键盘控制脚本
roslaunch mbot_teleop mbot_teleop.launch
要慢慢移动,不然极易漂移
# 保存地图
rosrun map_server map_saver -f hector
8.4 Cartographer SLAM
- 基于图网络
- 可选里程计
# 激光雷达仿真环境
roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch# Cartographer Demo
roslaunch mbot_navigation cartographer_demo.launch# 键盘控制脚本
roslaunch mbot_teleop mbot_teleop.launch
运行失败
错误信息:
[cartographer_node-1] process has died [pid 2992, exit code -6, cmd /opt/ros/melodic/lib/cartographer_ros/cartographer_node -configuration_directory /home/work/catkin_ws/src/mbot_navigation/config -configuration_basename lidar.lua scan:=scan __name:=cartographer_node __log:=/home/work/.ros/log/8fcd0372-f5b3-11eb-b110-000c295e8fa7/cartographer_node-1.log].
log file: /home/work/.ros/log/8fcd0372-f5b3-11eb-b110-000c295e8fa7/cartographer_node-1*.log
8.5 RTAB SLAM
- 三维SLAM
# 深度相机仿真环境
roslaunch mbot_gazebo mbot_kinect_nav_gazebo.launch# Rtabmap Demo
roslaunch mbot_navigation rtabmap_demo.launch# 键盘控制脚本
roslaunch mbot_teleop mbot_teleop.launch
使用键盘控制小车,完成建图。
查看建图结果。
rtabmap-databaseViewer ~/.ros/rtabmap.db
9.自主导航仿真
本部分代码在/guyueclass-main/planning&perception/mbot_navigation
,请复制到工作空间中。
安装move_base导航框架
sudo apt-get install ros-melodic-navigation
配置move_base节点mbot_navigation/launch/move_base.launch
Gmapping建图仿真
# 打开激光雷达仿真环境
roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch# 打开Gmapping仿真环境
roslaunch mbot_navigation nav_cloister_demo.launch# 运行定点移动程序
rosrun mbot_navigation move_test.py# 运行随机移动程序
rosrun mbot_navigation exploring_random.py
Gmapping自主建图仿真
# 打开激光雷达仿真环境
roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch# 运行自主建图仿真环境
roslaunch mbot_navigation exploring_slam_demo.launch# 运行随机移动程序
rosrun mbot_navigation exploring_random.py
【ROS】ROS入门笔记-Gazebo仿真与实物测试篇相关推荐
- ROS Noetic入门笔记(二)ROS Noetic创建工作空间和功能包
ROS Noetic入门笔记(一)在ubuntu20.04中安装ROS Noetic并简单测试 ROS Noetic入门笔记(二)ROS Noetic创建工作空间和功能包 ROS Noetic入门笔记 ...
- PHP代码审计入门笔记合集(共20篇)
早安,我的朋友们. 今天是11月20号,离2021年只41天了,今年你的小目标完成了吗? 跟大家分享件事情,其实这几个月来,我一直在准备一场考试,值得高兴的是,就在前两天终于顺利通过CISSP考试,完 ...
- dobot moveit 包_越疆科技dobot(magician)机械臂在ROS moveit下gazebo仿真控制和真实控制功能包 有兴趣的可以下载来玩...
功能包下载链接:https://download.csdn.net/download/qq_42145185/11256475 Magician Robotarm ====== 本文件夹中包含了多个为 ...
- Ubuntu 20.04配置ORB-SLAM2和ORB-SLAM3运行环境+ROS实时运行ORB-SLAM+Gazebo仿真运行ORB-SLAM2+各种相关库的安装
文章目录 一.换源 1.1 通过软件更新 1.2 通过修改源文件 二.安装三方库 2.1 安装必要的依赖项 2.2 安装Pangolin 2.3 安装OpenCV3 2.4 安装Eigen3 三.安装 ...
- 越疆科技dobot(magician)机械臂在ROS moveit下gazebo仿真控制和真实控制功能包 有兴趣的可以下载来玩
功能包下载链接:https://download.csdn.net/download/qq_42145185/11256475 Magician Robotarm ====== 本文件夹中包含了多个为 ...
- 从零开始的机械臂yolov5抓取gazebo仿真(环境搭建篇下)
sunday功能包使用介绍以及开源 sunday我给自己机械臂的命名,原型是innfos的gluon机械臂.通过sw模型文件转urdf.Sunday项目主要由六个功能包sunday_descripti ...
- Linux入门笔记-尚硅谷韩顺平-基础篇实操篇
文章目录 课程导论 基础篇 Linux入门 Linux介绍 Linux和Unix的关系 Linux和Windows比较 基础篇 Linux的目录结构 基本介绍 具体的目录结构 实操篇 vi和vim的使 ...
- ROS(indigo)机器人操作系统学习有趣丰富的Gazebo仿真示例evarobot
通过网页快速了解Linux(Ubuntu)和ROS机器人操作系统,请参考实验楼在线系统如下: 初级教程可参考:https://www.shiyanlou.com/courses/854 邀请码:U23 ...
- 宇树机器狗gazebo仿真
宇树机器狗gazebo仿真 一, 安装ROS Noetic 1, 环境 虚拟机下安装好了ubuntu20.04,配置ubuntu软件仓库 允许使用restricted,universe,multive ...
最新文章
- 使用Chrome扩展金山词霸取词划意
- 方程组求解matlab实现(朴素高斯求解、LU分解、雅可比迭代方法、高斯-塞德尔方法、连续过松弛(SOR))
- 2022,普平数据中心招聘来啦!
- setNeedsDisplay看我就懂!
- Syslink Control使用技巧
- idea可以使用flash框架吗_可以使用 C# 的 Web 前端框架 Blazor
- 【SpringMVC】返回视图中包含数据(ModelAndView)
- css base64 图片背景
- Javascript 笔记与总结(2-8)对象2
- 【结课报告】游戏中的知识产权
- git push时,发生missing tree 或者 missing blob问题
- 百度小程序如何搭建对搜索更友好?
- 【游戏教程】《星界边境》游戏2D角色分析(一)跳跃、移动、站立动作拆分
- linux安全配置技术论文,基于linux平台的web安全技术研究apache安全大学论文.doc
- xp计算机连接不上网络打印机驱动,解决win10无法连接到XP计算机共享打印机
- 如何批量修改图片名称?
- 厦门大学计算机网络实验四
- 一文读懂机智云物联网APP开发
- 重温离散数学系列①之什么是证明
- kafka的Rebalance问题分析(续)
热门文章
- ThinkInJava 中文版-下载
- android 9.0 GMS 修改google 语音助手需求-- EEA版本需求
- linux+find参数详解,Linux下find命令详解
- GPS追踪工具Traccar体验
- Unable to read file for extraction: gdx64.dll
- 快来看这份 Matplotlib 使用小抄,不全找我
- 苹果公司雇佣前ATI图形芯片设计师
- 从输入URL到页面成功展示到浏览器的过程?
- Godot教程中文版-脚本2(Scripting2)
- 启动计算机引导windows10,win10电脑启动界面提示windows boot manager怎么解决