ROS入门学习之三 机器人系统设计

1.机器人的定义与构成

国际化标准组织(ISO)的定义如下:

  • (1).机器人的动作机构具有类似于人或其他生物体的某些器官(肢体、感受等)的功能。
  • (2).机器人具有通用性,工作种类多样,动作程序灵活易变
  • (3).机器人具有不同程度的智能性,如记忆、感知、推理、决策、学习等
  • (4).机器人具有独立性,完整的机器人系统在工作中可以不依赖于人的干预。

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

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

2.机器人系统构建

执行机构的实现

机器人底盘、电机、舵机

驱动系统的实现

  • 1.电源子系统 a.12V/5V/3V b.电源保护、滤波
  • 2.电机驱动子系统 a.电机驱动:控制信号->电信号 b.电机控制:闭环控制
  • 3.传感器接口 a.超声波 b.里程计 ...

内部传感系统的实现

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

惯性测量单元(IMU):测量物体速度姿态,主要包括三轴陀螺、三轴加速度计、磁力计等

控制系统的实现

常用控制系统实现框架

Raspberry Pi、Odroid-XU4、Nvidia Jetson TK1、Mini PC、Intel NUC

连接摄像头

	sudo apt-get install ros-kinetic-usb-cam
	roslaunch usb_cam usb-cam-test.launch
	rqt_image_view 

连接Kinect

	sudo apt-get install ros-kinectic-freenect-*
	git clone https://github.com/avin2/SensorKinect.git
	cd SensorKinect/Bin
	tar xvf SensorKinect093-Bin-Linux-x86-v5.1.2.1.tar.bz2
	sudo ./install.sh 

连接激光雷达

	sudo apt-get install ros-kinectic-rplidar-ros
	rosrun rplidar_ros rplidarNode

启动rplidar激光雷达

串口权限问题

	sudo gpasswd --add USER_NAME dialout

3.URDF机器人建模

什么是URDF?

  • 1.Unified Robot Description Format,统一机器人描述格式
  • 2.ROS中一个非常重要的机器人模型描述格式
  • 3.可以解析URDF文件中使用XML格式描述的机器人模型
  • 4.ROS同时也提供UTDF文件的C++解析器

<link>

  • 1.描述机器人某个刚体部分的外观和物理属性
  • 2.尺寸(size)、颜色(color)、形状(shape)、惯性矩阵(inertial matrix)、碰撞参数(collision properties)等

<visual>:描述机器人link部分的外观参数

<inertial>:描述link的惯性参数

<collision>:描述link的碰撞属性

<calibration>:关节的参数位置,用来校准关节的绝对位置。

<dynamics>:描述关节的物理属性,例如阻尼值、物理静摩擦力等,经常在动力学仿真中用到

<limit>:描述运动的一些极限值,包括关节运动的上下限位置、速度限制、力矩限制等

<mimic>:描述该节点与已有关节的关系

<safety_controller>:描述安全控制器参数。

<joint>

  • 1.描述机器人关节的运动学和动力学属性
  • 2.包括关节运动的位置和速度限制
  • 3.根据关节运动形式,可以将其分为六种类型

<robot>

1.完整机器人模型的最顶层标签

2.<link>和<joint>标签都必须包含在<robot>标签内

一个完整的机器人模型,由一系列<link>和<joint>组成

创建一个机器人建模的功能包

catkin_create_pkg mbot_description urdf xacro

生成mbot_description文件夹,目录下包含如下内容:

  • urdf:存放机器人模型的URDF或xacro文件
  • meshes:放置URDF中引用的模型渲染文件
  • launch:保存相关启动文件
  • config:保存rviz的配置文件

joint_state_publisher:发布每个joint(除fixed类型)的状态,而且可以通过UI界面对joint进行控制。

robot_state_publisher:将机器人各个links,joints之间的关系,通过TF的形式,整理成三维姿态信息发布。