gazebo是一种适用于复杂室内多机器人和室外环境的仿真环境。它能够在三维环境中对多个机器人、传感器及物体进行仿真,产生实际传感器反馈和物体之间的物理响应。
更新gazable
sudo apt-get install ros-melodic-simulators
Launching Gazebo
设置环境变量
source /opt/ros/melodic/setup.bash
报错
RLException: [ros] is neither a launch file in package [gazebo_] nor
is [gazebo_] a launch file name
这是因为setup.bash文件没有进一步说明包的来源,解决方法是:
source catkin_ws/devel/setup.bash
Gazebo [Err] [REST.cc:205] Error in REST request
1.解决办法(无效)
#使用文本编辑器编辑以下文件
$ sudo gedit ~/.ignition/fuel/config.yaml
# url: https://api.ignitionfuel.org # 注释掉此行
url: https://api.ignitionrobotics.org # 新增此行
2重新编译,启动即可
二、构建仿真环境
1、直接插入型:
在Gazebo左侧列表中,有一个insert选项罗列了所有可以使用的模型,选择需要使用的模型放在主显示区即可在仿真环境中添加机器人和外部物体等仿真实例!
模型的加载需要连接外国的网站建议直接将模型文件下载并放置到本地路径~/.gazebo/models下:模型文件下载地址:
http://pan.baidu.com/s/1pKaeg0F 密码:cmxc 来自rosclub.cn
或是下载https://bitbucket.org/osrf/gazebo_models/downloads/
2、Building Editor
第二种方法是使用Gazebo提供的Building Editor工具手动绘制地图!在Gazebo菜单栏中选择Edit–Build Editor,可以打开如下图所示的绘制界面选择左侧的绘制选项即可!具体绘制方式自己琢磨琢磨就会很容易上手!
在 gazebo 工作前,我们需要安装ROS功能包与 gazebo 交互:
sudo apt-get install ros-melodic-gazebo-ros-pkgs ros-melodic-ros-control
启动ROS节点
启动ROS节点、bring up 机器人的标准工具是roslaunch。打开一个空的Gazebo世界命令如下:
roslaunch gazebo_ros empty_world.launch
gazebo打不开world的解决方法
$cd /usr/share/gazebo-7/worlds
$gazebo willowgarage.world
打开gazebo的时候会发现一直处于这种状态,这是因为model库加载不正确导致的。
解决办法:
sudo apt install mercurial
hg clone https://bitbucket.org/osrf/gazebo_models
下载完成后进gazebo_models复制到~/.gazebo文件夹中,重命名为models
导入模型
大概步骤应该是先把stl文件转换为x_t文件,然后把三维模型导入adams里面,计算出各个link的惯性参数和碰撞参数,然后把计算结果填写到URDF文件中,再用launch文件把模型加载到gazebo中。
ROS中控制机器人运动主要流程如下
新建模型—>加载驱动插件—>启动模型和节点->显示
有了机器人模型还不行,在Gazebo中仿真需要控制模型。模型中有轮子,需要控制轮子转动,控制轮子转动就需要加载驱动。
步骤:
(1)编辑机器人模型
(2)编辑gazebo属性,加载连接器控制驱动插件
(3)编辑gazebo属性,加载ros控制插件
(4)编辑.launch文件
(5)安装键盘控制器包
(6)运行.launch和键盘控制器程序,让小车动起来。
注意:xacro文件可以包含机器人模型的描述如标签,同样可以包含物理属性的描述如标签,可以将机器人模型标签项放在.xacro文件中,标签单独放在.gazebo文件中,然后在.xacro文件中使用#include命令将.gazebo文件加载进来。为了方便起见,本文将属性都放在一个.xacro文件中。
首先是要创建包,配置环境变量等操作,就不详述了。
然后的(1)(2)(3)步骤都是通过编辑.xacro文件实现。
在工程目录下的urdf文件夹下新建my_move_robot.xacro文件。
原文链接:https://blog.csdn.net/ktigerhero3/article/details/65443920
catkin_create_pkg mbot_description urdf xacro
launch文件配置
在做自己模型的时候基本是只需要修改第一行。
urdf
学习写urdf有几个地方需要注意
- 一定要记住它使用的是右手坐标系。
x正方向朝左, y 正方向向内, z轴正方向朝上
-
构建树结构, 即写link和joint
-
每个link的参考坐标系都在它的底部,并与关节的参考坐标系正交,为了添加尺寸,需要指定偏移从一个link到它的关节的子link, 这通过添加origin到每个节点解决。
这么说origin表示的是关节相对于父关节的距离和旋转, xyz和rpy
URDF的XML格式描述学习笔记
一.link
标签用于描述机器人某个刚体部分的外观和物理属性,包括尺寸(size)、颜色(color)、形状(shape)、惯性矩阵(inertial matrix)、碰撞参数(collision properties)等。
link结构一般如下所示:
<link name="link_name">
<inertial> ...... </inertial>
<visual> ...... </visual>
<collision> ...... </collision>
</link>
To get RRBot, clone the gazebo_ros_demos Github repo into the /src folder of your catkin workspace and rebuild your workspace:
cd ~/catkin_ws/src/
git clone https://github.com/ros-simulation/gazebo_ros_demos.git
cd ..
catkin_make
View in Rviz
To check if everything is working, launch RRBot in Rviz:
查看rviz
roslaunch rrbot_description rrbot_rviz.launch
Examine the RRBot URDF
sudo apt install vim #安装vim
rosed rrbot_description rrbot.xacro
View in Gazebo
roslaunch rrbot_gazebo rrbot_world.launch
gazeble launch文件启动错误
[gazebo-2] process has died [pid 5577, exit code 255, cmd
/opt/ros/melodic/lib/gazebo_ros/gzserver -e ode
/home/hyd/catkin_ws/src/gazebo_ros_demos/rrbot_gazebo/worlds/rrbot.world
__name:=gazebo __log:=/home/hyd/.ros/log/35c2caea-674f-11ea-8824-f764a03b8731/gazebo-2.log].
log file:
/home/hyd/.ros/log/35c2caea-674f-11ea-8824-f764a03b8731/gazebo-2*.log
解决方法:
killall gzserver
killall gzclient
运行rviz时出现异常
roslaunch rrbot_description rrbot_rviz.launch
http://www.manongjc.com/detail/15-evpwhxfdlzudgjd.html
主要解决办法如下:
1、joint_state_publisher_gui是刚更新出来的包,需要把之前的joint_state_publisher换成joint_state_publisher_gui
sudo apt-get install ros-melodic-joint-state-publisher-gui
如果是kinetic版本的
sudo apt-get install ros-kinetic-joint-state-publisher-gui
2、URDF文件中不能有中文注释,删除掉中文注释;
关闭后台ros
killall roscore
检查urdf模型整体结构
sudo apt install liburdfdom-tools
路径问题
tf工具的使用
查看tf结构:运行rqt,查看里面的tf viewer ,也可以rosrun rqt_tf_tree rqt_tf_tree
查看任意两个坐标系之间的transform:
rosrun tf tf_echo [reference_frame] [target_frame]
rosrun tf tf_echo turtle1 turtle2
检查urdf文件是否正确
check_urdf *.urdf
可视化urdf架构
urdf_to_graphiz rrbot.urdf
查看生成的pdf文件
evince rrbot.pdf
查看当前tf树
rosrun tf view_frames
**view_frames: rosrun tf view_frames生成一个pdf查看当前tf,**查看方式:
evince frames.pdf
运行rrbot时报错
Could not load controller ‘joint1_position_controller’ because
controller type ‘effort_controllers/JointPositionController’ does not
exist.
主要原因是没有安装相应的ros控制软件包。
解决方法:
$> sudo apt-get update
$> sudo apt-get install ros-kinetic-joint-state-controller
$> rospack profile
总之.最好在安装ros的时候一起安装控制器插件,通过如下命令:
$ sudo apt-get install ros-melodic-joint-state-controller : This will install joint_state_controller package
$ sudo apt-get install ros-melodic-effort-controllers : This will install Effort controller
$ sudo apt-get install ros-melodic-position-controllers : This will install position controllers
sudo apt-get install ros-melodic-joint-trajectory-controller
git clone https://github.com/ros/joint_state_publisher.git
yaml文件中名称错误导致下面的问题
运行文件过程
1启动仿真
roslaunch dog_gazebo dog_world.launch
2启动控制器
roslaunch dog_control dog_control.launch
3启动rqt
4手动发送命令
rostopic pub -1 /rrbot/joint1_position_controller/command std_msgs/Float64 "data: 1.5"
rostopic pub -1 /rrbot/joint2_position_controller/command std_msgs/Float64 "data: 1.0"
5已经配置好的一个RQT
roslaunch rrbot_control rrbot_rqt.launch
6与RVIZ建立连接
rosrun rviz rviz
[ WARN] [1584409536.720475370]: The root link body has an inertia specified in the URDF, but KDL does not support a root link with an inertia. As a workaround, you can add an extra dummy link to your URDF.
【分析】:
大致意思是根关节的base_link在urdf中具有惯性参数,但是KDL不支持,建议的解决办法是,增加一个额外的dummy link。
解决方法:
创建一个’odom’和一个’base_link’。 然后用固定的关节将它们连接起来。注意: 惯性必须放在child link上,在这种情况下为“base_link”,否则会出现错误。
找到link name=“base_link”的部分,将其中的inertial部分,注释掉,就可以了。
3、关节属性:
类型:
revolute:与continuous的运动方式是一样的,但有严格的最大最小值限制。
continuous:绕axis轴旋转,没有最大最小值限制
prismatic:表示沿着轴运动(滑动)而非旋转,只可以一维运动。
fixed:不能运动
floating:表示可以任意6自由度运动
planar:表示可以在与轴垂直的平面上运动(二维)。
参数:
axis: 对continuous类型的joint表示旋转轴,以xyz的归一化向量表示,比如绕Z轴旋转就是(0 0 1),逆时针旋转为1,顺时针则为-1。
limit:为revolute和prismatic类型的joint指定限制参数。
lower——指定最小限制(revolute以弧度表示,prismatic以米表示)。与lower对应的参数是upper
effort——表示安全范围内的对joint的最大作用力(http://wiki.ros.org/pr2_controller_manager/safety_limits)
velocity——与effort类似,是一个速度限制。
.urdf中添加’world’后,rviz报错
global status:Error Fixed Frame
在使用rviz之前先安装arbotix,在catkin_ws/src下
$ git clone https://github.com/vanadiumlabs/arbotix_ros.git
回到catkin_ws目录,用catkin_make,这样就安装好了arbotix,然后安装rbx_vol_1,在catkin_ws/src中
$ git clone https://github.com/pirobot/rbx1
回到catkin_ws目录,用catkin_make编译结束用
$ source /path/to/your/catkin_ws/devel/setup.bash
topic报frame 、transform之类错误
有两个办法:
1.把global fixed frame设成topic自己所在的坐标系,按照上图的显示,应该改为tramcar;
2.用tf包工具发布global fixed frame到topic所在坐标系的tf关系,例如:
$ rosrun tf static_transform_publisher 0.0 0.0 0.0 0.0 0.0 0.0 map my_frame 100
修改root link后运行gezable 不能运行模型
Error: Failed to find root link: Two root links found: [body] and [world] at line 237 in /build/urdfdom-YMMa9X/urdfdom-1.0.0/urdf_parser/src/model.cpp
Error [parser_urdf.cc:3166] Unable to call parse URDF on robot model
Error [parser.cc:406] parse as old deprecated model file failed.
分析:
当urdf文件中定义了joint但是没有定义对应的link时会出现故障,在下面接着定义一个joint就可以解决这个问题
运行成功!
运行rviz时报错
No transform from [LBHIP] to [map]
解决办法:
sudo apt-get install unicode //不管乎
URDF文件转Xacro文件、在rviz和gazebo中同时启动
https://blog.csdn.net/answermack/article/details/89791263
Transmissions\Joint Limits\controller manager介绍
ROS探索总结(三十一)——ros_control
https://www.cnblogs.com/lizhensheng/p/11253331.html
查看GPU型号
$ lspci | grep -i nvidia
查看驱动:
$ glxinfo | grep rendering
如果结果是“yes”,证明显卡驱动已经成功安装。如果提示有问题,可能是系统里面没有安装mesa-utils
安装过程:在终端输入命令:$ sudo apt-get install mesa-utils然后再运行命令:$ glxinfo | grep rendering