机器人系统认知

机器人的定义与组成

机器人是什么?

  • 1920年捷克斯洛伐克作家卡雷尔·查佩克在他的科幻小说《罗萨姆的机器人万能公司》中,根据Robota(捷克文,原意为“劳役”、苦工)和Robotnik(波兰文,愿意为“工人”),创造出“机器人”这个词
  • 机器人(Robot)是自动执行工作的机器人装置。它既可以接受人类指挥,又可以运行预先编排的程序,也可以根据以人工智能技术制定的原则纲领行动。它的任务是协助或取代人类工作,例如生产业,建筑业,或是危险的生产(来自百度百科)
  • 机器人是用以搬运材料、零件、工具的可编程的多功能操作器或是通过可改变程序动作来完成各种作业的特殊机械装置(来自美国机器人协会)
  • 国际化标准(ISO)
    • 机器人的动作机构具有类似于人类或其它生物体的某些器官(肢体、感受等)的功能
    • 机器人具有通用性,工作种类多样,动作程序灵活易变
    • 机器人具有不同程度的智能性,如记忆、感知、推理、决策、学习等
    • 机器人具有独立性,完整的机器人系统在工作中可以不依赖于人的干预

机器人是如何组成的?

机器人的组成(控制角度)

机器人系统认知_第1张图片

  • 执行机构:人体的手和脚,直接面向工作对象的机械装置
  • 驱动系统:人体的肌肉和筋络,负责驱动执行机构,将控制系统下达的命令转换成执行机构需要的信号
  • 传感系统:人体的感官和神经,主要完成信号的输入和反馈,包括内部传感系统和外部传感系统
  • 控制系统:人体的大脑,实现任务及信息的处理,输出控制命令信号
机器人的控制回路

机器人系统认知_第2张图片

机器人系统构建

  • 执行机构实现
  • 驱动系统实现
  • 内部传感系统实现
  • 控制系统实现
  • 外部传感系统实现

一个简单的服务机器人架构

机器人系统认知_第3张图片

执行机构实现

机器人系统认知_第4张图片

驱动系统实现

机器人系统认知_第5张图片

  • 电源管理
    • 5V供电;12V供电
  • 电机驱动
    • 电机控制接口
    • 电机反馈接口
  • 传感器采集
    • 红外传感器
    • 超声波传感器
    • 防撞传感器
内部传感系统实现

机器人系统认知_第6张图片

  • 根据单位时间内产生的脉冲数计算电机/轮子的旋转圈数
  • 根据轮子的周长计算机器人的运动速度
  • 根据运动速度积分计算里程

机器人系统认知_第7张图片

  • 左图是惯性测量单元(IMU),右图是IMU实现原理
  • 测量物体姿态和速度:包括
    • 陀螺仪(测量角速度)加速度计(测量加速度)
    • 地磁计(测量方向)
控制系统实现

机器人系统认知_第8张图片
常见控制器
机器人系统认知_第9张图片

外部传感系统构建

机器人系统认知_第10张图片
ROS规定了一系列常用传感器的消息格式。这些传感器发布的数据,都必须按照这样的消息格式进行发布

  • RGB相机
    查看消息类型具体包含的内容:rosmsg show sensor_msgs/Image
    机器人系统认知_第11张图片

  • RGBD相机

    • 既能够提供rgb信息也能够提供点云深度信息
    • ROS用 sensor_msgs/PointCloud2来描述N维点云信息
    • 查看消息类型具体包含的内容:rosmsg show sensor_msgs/PointCloud2
      机器人系统认知_第12张图片
  • IMU

    • ROS用 sensor_msgs/Imu 来描述imu传感器的信息
    • 查看消息类型具体包含的内容:rosmsg show sensor_msgs/Imu
      机器人系统认知_第13张图片
  • GPS

    • ROS用 sensor_msgs/NavSatFix 来描述gps的定位信息
    • 查看消息类型具体包含的内容:rosmsg show sensor_msgs/NavSatFix
      机器人系统认知_第14张图片
  • 雷达

    • ROS用 sensor_msgs/LaserScan 来描述二维激光雷达信息
    • 查看消息类型具体包含的内容:rosmsg show sensor_msgs/LaserScan
      机器人系统认知_第15张图片
  • 测距传感器

    • ROS用 sensor_msgs/Range 测距传感器的信息包括(超声波,红外)
    • 查看消息类型具体包含的内容:rosmsg show sensor_msgs/Range
      机器人系统认知_第16张图片
完整示例

机器人系统认知_第17张图片
机器人系统认知_第18张图片

urdf机器人建模

urdf是什么?

  • Unified Robot Description Format,统一机器人描述格式,简称为URDF
  • URDF是ROS中一个非常重要的机器人模型描述格式,它使用XML格式描述机器人模型
  • URDF中定义机器人各个部件的几何形状物理特性以及部件之间的连接关系
  • ROS同时也提供URDF文件的C++解析器
  • 如下所示:
    机器人系统认知_第19张图片
    URDF描述文件通常由以下几个描述标签组成
    机器人系统认知_第20张图片
  • 用于描述机器人某个刚体部分外观和物理属性,包括
    • 尺寸(size)
    • 颜色(color)
    • 形状(shap)
    • 惯性矩阵(inertial matrix)
    • 碰撞参数(collision properties)

机器人系统认知_第21张图片

  • 标签用于描述机器人link部分的外观参数
  • 标签用于描述link的惯性参数,
  • 标签用于描述link的碰撞属性
  • 由图中可以看出collision的区域要大于visual的区域,这就意味着只要有其它物体与collision区域相交,就认为link发生碰撞
  • (关节)
    • 描述机器人关节的运动学与动力学属性
    • 包括关节运动的位置和速度限制
    • 根据关节运动形式,可以将其分为六种类型
      机器人系统认知_第22张图片

机器人系统认知_第23张图片

  • :关节的参考位置,用来校准关节的绝对位置
  • :描述关节的物理属性,例如阻尼值、物理静摩擦力等,经常在动力学仿真中用到
  • :描述运动的一些极限值,包括关节运动的上下限位置、速度限制、力矩限制等
  • :描述该关节与已有关节的关系
  • :描述安全控制器参数
    • 完整机器人模型的最顶层标签
    • 标签都必须包含在标签内
    • 一个完整的机器人模型由一系列的linkjoint组成
      机器人系统认知_第24张图片

操作小记

进入工作空间的src目录下,然后创建功能包mbot_description
cd ~/ros_workspace/src
catkin_create_pkg mbot_description urdf xacro
在功能包中创建几个文件夹
  • urdf:存放机器人模型的URDF或xacro文件
  • meshes:放置URDF中引用的模型渲染文件
  • launch:保存相关启动文件
  • config:保存rviz的配置文件

机器人系统认知_第25张图片

在launch文件夹下创建文件display_mbot_base_urdf.launch,并写入代码
<launch>
	<param name="robot_description" textfile="$(find mbot_description)/urdf/mbot_base.urdf" />

	
	<param name="use_gui" value="true"/>
	
	
	<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
	
	
	<node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
	
	
	<node name="rviz" pkg="rviz" type="rviz" args="-d $(find mbot_description)/config/mbot_urdf.rviz" required="true" />
launch>
  • joint_state_publisher:发布每个joint(除fixed类型)的状态,而且可以通过UI界面对joint进行控制
  • robot_state_publisher:将机器人各个linksjoints之间的关系,通过TF的形式,整理成三维姿态信息发布
在urdf文件夹下创建mbot文件夹,并在mbot文件夹下创建文件mbot_base.urdf,并写入代码,创建一个圆柱体

<robot name="mbot">

    <link name="base_link">
        <visual>
            <origin xyz="0 0 0" rpy="0 0 0"/>
            <geometry>
                <cylinder length="0.16" radius="0.20"/>
            geometry>
            <material name="yellow">
                <color rgba="1 0.4 0 1"/>
            material>
        visual>
    link>
    
robot>

输入roslaunch mbot_description display_mbot_base_urdf.launch,查看效果
机器人系统认知_第26张图片

修改mbot_base.urdf文件,使用圆柱体创建左侧车轮

<robot name="mbot">

    <link name="base_link">
        <visual>
            <origin xyz="0 0 0" rpy="0 0 0"/>
            <geometry>
                <cylinder length="0.16" radius="0.20"/>
            geometry>
            <material name="yellow">
                <color rgba="1 0.4 0 1"/>
            material>
        visual>
    link>

    <joint name="left_wheel_joint" type="continuous">
        <origin xyz="0 0.19 -0.05" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="left_wheel_link"/>
        <axis xyz="0 1 0"/>
    joint>

    <link name="left_wheel_link">
        <visual>
            <origin xyz="0 0 0" rpy="1.5707 0 0" />
            <geometry>
                
            geometry>
            <material name="white">
                <color rgba="1 1 1 0.9"/>
            material>
        visual>
    link>

robot>

输入roslaunch mbot_description display_mbot_base_urdf.launch,查看效果
机器人系统认知_第27张图片

修改mbot_base.urdf文件,使用圆柱体创建右侧车轮

<robot name="mbot">

    <link name="base_link">
        <visual>
            <origin xyz="0 0 0" rpy="0 0 0"/>
            <geometry>
                <cylinder length="0.16" radius="0.20"/>
            geometry>
            <material name="yellow">
                <color rgba="1 0.4 0 1"/>
            material>
        visual>
    link>

    <joint name="left_wheel_joint" type="continuous">
        <origin xyz="0 0.19 -0.05" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="left_wheel_link"/>
        <axis xyz="0 1 0"/>
    joint>

    <link name="left_wheel_link">
        <visual>
            <origin xyz="0 0 0" rpy="1.5707 0 0" />
            <geometry>
                
            geometry>
            <material name="white">
                <color rgba="1 1 1 0.9"/>
            material>
        visual>
    link>

    <joint name="right_wheel_joint" type="continuous">
        <origin xyz="0 -0.19 -0.05" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="right_wheel_link"/>
        <axis xyz="0 1 0"/>
    joint>

    <link name="right_wheel_link">
        <visual>
            <origin xyz="0 0 0" rpy="1.5707 0 0" />
            <geometry>
                
            geometry>
            <material name="white">
                <color rgba="1 1 1 0.9"/>
            material>
        visual>
    link>

robot>

输入roslaunch mbot_description display_mbot_base_urdf.launch,查看效果
机器人系统认知_第28张图片

修改mbot_base.urdf文件,使用球体创建前后支撑轮

<robot name="mbot">

    <link name="base_link">
        <visual>
            <origin xyz="0 0 0" rpy="0 0 0"/>
            <geometry>
                <cylinder length="0.16" radius="0.20"/>
            geometry>
            <material name="yellow">
                <color rgba="1 0.4 0 1"/>
            material>
        visual>
    link>

    <joint name="left_wheel_joint" type="continuous">
        <origin xyz="0 0.19 -0.05" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="left_wheel_link"/>
        <axis xyz="0 1 0"/>
    joint>

    <link name="left_wheel_link">
        <visual>
            <origin xyz="0 0 0" rpy="1.5707 0 0" />
            <geometry>
                
            geometry>
            <material name="white">
                <color rgba="1 1 1 0.9"/>
            material>
        visual>
    link>

    <joint name="right_wheel_joint" type="continuous">
        <origin xyz="0 -0.19 -0.05" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="right_wheel_link"/>
        <axis xyz="0 1 0"/>
    joint>

    <link name="right_wheel_link">
        <visual>
            <origin xyz="0 0 0" rpy="1.5707 0 0" />
            <geometry>
                
            geometry>
            <material name="white">
                <color rgba="1 1 1 0.9"/>
            material>
        visual>
    link>

    <joint name="front_caster_joint" type="continuous">
        <origin xyz="0.18 0 -0.095" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="front_caster_link"/>
        <axis xyz="0 1 0"/>
    joint>

    <link name="front_caster_link">
        <visual>
            <origin xyz="0 0 0" rpy="0 0 0"/>
            <geometry>
                <sphere radius="0.015" />
            geometry>
            <material name="black">
                <color rgba="0 0 0 0.95"/>
            material>
        visual>
    link>

    <joint name="back_caster_joint" type="continuous">
        <origin xyz="-0.18 0 -0.095" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="back_caster_link"/>
        <axis xyz="0 1 0"/>
    joint>

    <link name="back_caster_link">
        <visual>
            <origin xyz="0 0 0" rpy="0 0 0"/>
            <geometry>
                <sphere radius="0.015" />
            geometry>
            <material name="black">
                <color rgba="0 0 0 0.95"/>
            material>
        visual>
    link>

robot>

输入roslaunch mbot_description display_mbot_base_urdf.launch,查看效果
机器人系统认知_第29张图片

你可能感兴趣的:(ROS,ros,机器人操作系统,笔记整理,机器人系统认知,操作小记)