在这里插入图片描述
这个是本人在大三期间做的项目 —— 基于MIT的Cheetah方案设计的十二自由度并联四足机器人,这个项目获得过两个国家级奖项和一个省级奖项。接下来我会将这个机器人的控制部分所有代码进行开源,并配有相关的教程博客,希望能够帮助到在学习相关领域知识或者进行项目开发的同学。

学习建议


ROS是用于编写机器人软件程序的一种具有高度灵活性的软件架构。它包含了大量工具软件、库代码和约定协议,旨在简化跨机器人平台创建复杂、鲁棒的机器人行为这一过程的难度与复杂度。ROS设计者将ROS表述为“ROS = Plumbing + Tools + Capabilities + Ecosystem”,即ROS是通讯机制、工具软件包、机器人高层技能以及机器人生态系统的集合体。
在这里插入图片描述

学习视频:古月居ROS21讲
学习资料:我的学习笔记
ROS的原理+实战学习资料
ROS机械臂的moveit编程实现和视觉应用学习源码

  1. 建议先看完古月居21讲,对ROS就会有个比较全面的认识,看的过程中可以结合它配套的课件以及我做的笔记。
  2. 看完教学视频之后,建议做一个小项目进行巩固练习,推荐基于ROS搭建一个移动机器人或机械臂,在我的学习笔记中有搭建机械臂仿真环境的相关教程可以进行参考。

学习内容


首先要明确,ROS是作为工具使用,更多是用于搭建框架,而不包括相应的驱动逻辑和算法,所以在编写ROS相关代码的时候,需要将代码框架和功能实现进行区分。

话题,服务,动作

使用ROS构建的框架属于分布式节点网络,每个节点对应着一个独立的进程(而非线程),进程与进程之间就通过话题,服务,动作这三种方式进行数据交互,从而构建出如下的通信网络。
在这里插入图片描述


话题模型:一个发布者 + n个订阅者(最常用的通信方式)
服务模型:一个服务端 + n个客户端(双向通信)
动作模型:一个服务端 + 一个客户端(拥有完整的流程管理,属于是应用层的通信方式,内核其实就是话题和服务),实现方式如下图所示。

在这里插入图片描述
详细内容可以参考我的笔记:ROS的安装及基础语法

参数管理,Launch文件

对于大工程,常常伴随着许多需要整定的参数,所以就需要进行参数管理,便于修改和存储各个参数值。ROS自带有一套完整的参数管理方法。

  1. 采用yaml参数文件进行参数存储
  2. 将参数载入到ROS网络中(一般通过launch文件)
  3. 各个ROS节点通过调用相应的API函数,读取参数值

/* 设置背景颜色参数 */
ros::param::set("/background_r", 255);
ros::param::set("/background_g", 255);
ros::param::set("/background_b", 255);

/* 读取背景颜色参数 */
ros::param::get("/background_r", red);
ros::param::get("/background_g", green);
ros::param::get("/background_b", blue);

Launch文件是为了更方便地启动ROS的各个节点,加载参数文件,以及对项目文件进行分类管理(因为内部的文件包含机制,类比c++的#include,可以对不同类别的文件进行分类编写和包含)。

#没有使用launch文件
roscore
rosrun package node1
rosrun package node2
rosparam load file_name

#使用了launch文件
roslaunch file-name file.launch

详细内容可以参考我的笔记:ROS进阶用法学习

工具使用

ROS除了用于通信网络的构建,其也提供了非常多的功能包以及开发工具,以下列出常用的几个。

rviz

rviz是ROS提供的一个集成的可视化GUI,可以实现各种数据的显示,同时其也提供二次开发的插件,可以打造个性化的机器人的控制界面。
在这里插入图片描述

gazebo

机器人仿真软件,与verp和webots类似,操作难度不高,并且与ROS较为适配,有相应的功能包,可以结合rviz一起使用。
详细内容可以参考我的笔记:ROS机械臂项目实战
在这里插入图片描述

rqt

用于可视化ROS网络的相关信息。

#画出发布在topic上的数据变化图
rosrun rqt_plot rqt_plot  
#画出node关系图 
rosrun rqt_graph rqt_graph 
#属于ROS日志框架(logging framework)的一部分,用来显示节点的输出信息
rosrun rqt_console rqt_console  
#参数动态配置工具
rosrun rqt_reconfigure rqt_reconfigure
#tf树
rosrun rqt_tf_tree rqt_tf_tree

ros-navigation导航功能包

ROS的导航功能包非常成熟,属于是只要有相应的外设(如雷达,里程计),并配置好话题名称,就可以直接调库实现功能。剩下的就只有调参工作。
详细内容可以参考我的笔记:ros-navigation的应用
在这里插入图片描述