ROS URDF、rviz、gazebo(1)

2024-02-12 13:36
文章标签 ros gazebo rviz urdf

本文主要是介绍ROS URDF、rviz、gazebo(1),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1.URDF优化_xacro:
    • 1.1.xacro语法:
    • 1.2.xacro之launch集成:
  • 2.arbotix控制机器人运动:
    • 2.1.编写arbotix配置文件:
    • 2.2.配置launch文件:
    • 2.3.向话题发布信息:
  • 3.URDF集成gazebo:
    • 3.1.创建功能包并导入相关依赖:
    • 3.2.编写URDF文件:
      • 3.2.1.collision:
      • 3.2.2.inertial:
      • 3.2.3.颜色设置:
    • 3.3.集成到launch文件并打开gazebo:

1.URDF优化_xacro:

1.1.xacro语法:

1.解析声明:xmlns
robot标签后添加一个属性xmlns:xacro=http://www.ros.rog/wiki/xacro
2.属性定义:<xacro:property name="xxx" value="yyy" />
3.属性调用:${属性名称}
4.属性运算:${数学表达式}
5.宏定义:xacro:macro name="宏名称" params="参数列表(多参数之间使用空格分隔)"

<xacro:macro name ="宏名称" params="参数列表(多参数之间使用空格分隔)">...调用参数格式:${参数名}
</xacro:macro >

6.宏调用:<xacro:宏名称 参数1=xxx 参数2=xxx/>
7.文件包含:<xacro:include filename="文件名.xacro"/>

1.2.xacro之launch集成:

在launch文件中添加:

<param name="robot_description" command="$(find xacro)/xacro $(find 功能包名)/urdf/xacro/文件名加后缀"/>

2.arbotix控制机器人运动:

2.1.编写arbotix配置文件:

# 该文件是控制器配置,一个机器人模型可能有多个控制器,比如: 底盘、机械臂、夹持器(机械手)....
# 因此,根 name 是 controller
controllers: {# 单控制器设置base_controller: {#类型: 差速控制器type: diff_controller,#参考坐标base_frame_id: base_footprint, #两个轮子之间的间距base_width: 0.2,#控制频率ticks_meter: 2000, #PID控制参数,使机器人车轮快速达到预期速度Kp: 12, Kd: 12, Ki: 0, Ko: 50, #加速限制accel_limit: 1.0 }
}

文件配置错误可能会导致节点发布话题异常(无odom话题)的问题。

2.2.配置launch文件:

添加:

<node pkg="arbotix_python" type="arbotix_driver" name="driver" output="screen"><rosparam file="$(find prac_urdf)/config/control.yaml" command="load"/><param name="sim" value="true"/></node>

2.3.向话题发布信息:

使用命令rostopic pub -r 10 /cmd_vel geometry_msgs/Twist ...(Tab)
请添加图片描述

3.URDF集成gazebo:

3.1.创建功能包并导入相关依赖:

请添加图片描述
urdf xacro gazebo_ros gazebo_ros_control gazebo_plugins五个依赖。

3.2.编写URDF文件:

<robot name="mycar"><link name="base_link"><visual><geometry><box size="0.5 0.3 0.1"/></geometry><material name="yellow"><color rgba="0.5 0.3 0.0 0.5"/></material><origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/></visual><collision><geometry><box size="0.5 0.3 0.1"/></geometry><origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/></collision><inertial><origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/><mass value="2"/><inertia ixx="1" ixy="0" ixz="0" iyy="0" iyz="1" izz="1"/></inertial></link><gazebo reference="base_link"><material>Gazebo/Red</material></gazebo></robot>

这里要注意gazebo中颜色的设置需要使用gazebo标签,reference属性,前面的颜色设置在gazebo中不会生效。碰撞参数和惯性矩阵后续需要加深学习。

3.2.1.collision:

如果机器人link是标准的几何体形状,和link的 visual 属性设置一致即可。

3.2.2.inertial:

惯性矩阵的设置需要结合link的质量与外形参数动态生成,标准的球体、圆柱与立方体的惯性矩阵公式如下(已经封装为 xacro 实现):
球体惯性矩阵:

<!-- Macro for inertia matrix --><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>

圆柱惯性矩阵:

<xacro:macro name="cylinder_inertial_matrix" params="m r h"><inertial><mass value="${m}" /><inertia ixx="${m*(3*r*r+h*h)/12}" ixy = "0" ixz = "0"iyy="${m*(3*r*r+h*h)/12}" iyz = "0"izz="${m*r*r/2}" /> </inertial></xacro:macro>

立方体惯性矩阵:

 <xacro:macro name="Box_inertial_matrix" params="m l w h"><inertial><mass value="${m}" /><inertia ixx="${m*(h*h + l*l)/12}" ixy = "0" ixz = "0"iyy="${m*(w*w + l*l)/12}" iyz= "0"izz="${m*(w*w + h*h)/12}" /></inertial></xacro:macro>

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

3.2.3.颜色设置:

在 gazebo 中显示 link 的颜色,必须要使用指定的标签(在link外设置):

<gazebo reference="link节点名称"><material>Gazebo/Blue</material>
</gazebo>

PS:material 标签中,设置的值区分大小写,颜色可以设置为 Red Blue Green Black …

3.3.集成到launch文件并打开gazebo:

需要在launch文件中添加:

<launch><param name="robot_description" textfile="$(find urdf02_gazebo)/urdf/demo01_helloworld.urdf"/><include file="$(find gazebo_ros)/launch/empty_world.launch"/><node pkg="gazebo_ros" type="spawn_model" name="sp" args="-urdf -model car -param robot_description"/><!--显示机器人模型 -->
</launch>

分别在参数服务器中加载机器人模型、打开gazebo、将参数服务器中的模型载入gazebo。

未完待续…

这篇关于ROS URDF、rviz、gazebo(1)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/702682

相关文章

ROS - C++实现RosBag包回放/提取

文章目录 1. 回放原理2. 回放/提取 多个话题3. 回放/提取数据包,并实时发布 1. 回放原理 #include <ros/ros.h>#include <rosbag/bag.h>#include <std_msgs/String.h>int main(int argc, char** argv){// 初始化ROS节点ros::init(argc, argv,

ROS - C++实现RosBag包录制

文章目录 1. 录制原理2. 录制多个话题3. 订阅ROS消息,实时录制 1. 录制原理 #include <ros/ros.h>#include <rosbag/bag.h>#include <std_msgs/String.h>int main(int argc, char** argv){// 初始化ROS节点ros::init(argc, argv, "reco

hector_quadrotor编译总结 | ubuntu 16.04 ros-kinetic版本

hector_quadrotor编译总结 | ubuntu 16.04 ros-kinetic版本 基于Ubuntu 16.04 LTS系统所用ROS版本为 Kinetic hector_quadrotor ROS包主要用于四旋翼无人机的建模、控制和仿真。 1.安装依赖库 所需系统及依赖库 Ubuntu 16.04|ros-kinetic|Gazebo|gazebo_ros_pkgs|ge

hector_quadrotor编译总结 | ubuntu 14.04 ros-indigo版本

hector_quadrotor编译总结 | ubuntu 14.04 ros-indigo版本 基于Ubuntu 14.04 LTS系统所用ROS版本为 Indigo hector_quadrotor ROS包主要用于四旋翼无人机的建模、控制和仿真。 备注:两种安装方式可选:install the binary packages | install the source files

gazebo 已加载模型但无法显示

目录 写在前面的话问题一:robot_state_publisher 发布机器人信息失败报错一 Error: Error document empty.报错二 .xcaro 文件中有多行注释成功启动 问题二:通过 ros2 启动 gazebo 失败成功启动 问题三:gazebo 崩溃和无法显示模型问题四: 缺少 robot_description 等话题正确的输出 写在前面的话

Ubuntu20.04+ros-noetic配置Cartographer

一、概述         因为要配置激光SLAM,Cartographer属于激光雷达SLAM 中比较经典的一款,在学习之前先将其在Ubuntu20.04首先配置出来并成功运行demo。 二、具体操作 (一)概述         使用平台是Windows的wsl2上的Ubuntu20.04子系统,双系统与虚拟机的安装原理与这个相同。主要依照的安装操作是官方文档,链接如下所示。 Runni

urdf ( xacro ) 的 collision碰撞参数设置

目录 写在前面的话整体流程1 URDF 文件结构2 查看原始碰撞形状描述3 加入简单碰撞形状描述方法一 Meshlab 自动测量方法二 人为测量 4 加入XACRO函数简化描述 最终结果展示侧视图正视图碰撞几何体中心点设置不对出现的结果 写在前面的话 本文使用的 URDF 文件是由 solidworks 的 URDF export 插件生成,详情请看上一篇文章:solidwor

ROS学习记录-ubuntu系统和ROS的安装

一、ubuntu安装 使用的是ubuntu14.04.4系统,从官网下载,也可以从国内镜像下载。 官网:http://cdimage.ubuntu.com/netboot/14.04/?_ga=1.178505383.2009389272.1483453317 国内镜像 网易:http://mirrors.163.com/ubuntu-releases/14.04/ 厦大:http://

linux(ubuntu)安装QT-ros插件

Linux下的qt安装ros插件 查看qt版本和对应的ros插件版本查看qt版本查看 qt creator 版本 qt creator进行更新升级下载版本对应的ros_qtc_plugin 插件插件安装安装成功 查看qt版本和对应的ros插件版本 想要qt与ros联合开发,我门需要在qt creator中添加ros的插件,之前查资料有哦 一个方法是直接下载安装带有ros插件版本的

roscore等ros命令执行后终端无输出,无反应

现象 在终端中输入 roscore 等 ros 命令,终端无输出,无反应。但是,Ctrl+C后终端还是有输出的。 解决措施 打开.barshrc文件 gedit ~/.bashrc 修改ROS_HOSTNAME和ROS_MASTER_URI变量的赋值语句,如果有ROS_IP变量也需要修改。用 localhost 替代具体的 IP地址。 修改前。 export ROS_HOSTNAM