初学ROS 笔记

ROS诞生背景

机器人是一种高度复杂的系统性实现,机器人设计包含了机械加工、机械结构设计、硬件设计、嵌入式软件设计、上层软件设计....是各种硬件与软件集成,甚至可以说机器人系统是当今工业体系的集大成者。机器人体系是相当庞大的,其复杂度之高,以至于没有任何个人、组织甚至公司能够独立完成系统性的机器人研发工作。一种更合适的策略是:让机器人研发者专注于自己擅长的领域,其他模块则直接复用相关领域更专业研发团队的实现,当然自身的研究也可以被他人继续复用。这种基于"复用"的分工协作,遵循了不重复发明轮子的原则,显然是可以大大提高机器人的研发效率的,尤其是随着机器人硬件越来越丰富,软件库越来越庞大,这种复用性模块化开发需求也愈发强烈。

ROS概念

ROS起源于2007年斯坦福大学人工智能实验室与柳树车库(WillowGarage)公司的个人机器人项目,其后被柳树车库公司开源和发展,同年该公司发布了 ROS(机器人操作系统)。ROS是一套机器人通用软件框架,可以提升功能模块的复用性,并且随着该系统的不断迭代与完善,如今 ROS 已经成为机器人领域的事实标准。

ROS全称Robot Operating System(机器人操作系统)

ROS是一个适用于机器人的开源的元操作系统,是用于编写机器人软件程序的一种具有高度灵活性的软件架构,ROS集成了大量的工具,库,协议,提供类似OS所提供的功能,简化对机器人的控制。ROS设计者将ROS表述为“ROS = Plumbing + Tools + Capabilities + Ecosystem”,即ROS是通讯机制、工具软件包、机器人高层技能以及机器人生态系统的集合体。

ROS设计目标

为了服务“ 分工”,ROS主要设计了如下目标:

  • 代码复用:ROS的目标不是成为具有最多功能的框架,ROS的主要目标是支持机器人技术研发中的代码重用

  • 分布式:ROS是进程(也称为Nodes)的分布式框架,ROS中的进程可分布于不同主机,不同主机协同工作,从而分散计算压力

  • 松耦合:ROS中功能模块封装于独立的功能包或元功能包,便于分享,功能包内的模块以节点为单位运行,以ROS标准的IO作为接口,开发者不需要关注模块内部实现,只要了解接口规则就能实现复用,实现了模块间点对点的松耦合连接

  • 精简:ROS被设计为尽可能精简,以便为ROS编写的代码可以与其他机器人软件框架一起使用。ROS易于与其他机器人软件框架集成:ROS已与OpenRAVE,Orocos和Player集成

  • 语言独立性:包括Java,C++,Python等。为了支持更多应用开发和移植,ROS设计为一种语言弱相关的框架结构,使用简洁,中立的定义语言描述模块间的消息接口,在编译中再产生所使用语言的目标文件,为消息交互提供支持,同时允许消息接口的嵌套使用

  • 易于测试:ROS具有称为rostest的内置单元/集成测试框架,可轻松安装和拆卸测试工具

  • 大型应用:ROS适用于大型运行时系统和大型开发流程

  • 丰富的组件化工具包:ROS可采用组件化方式集成一些工具和软件到系统中并作为一个组件直接使用,如RVIZ(3D可视化工具),开发者根据ROS定义的接口在其中显示机器人模型等,组件还包括仿真环境和消息查看工具等

  • 免费且开源:开发者众多,功能包多

ROS的安装

本人使用的ROS 版本是 Noetic,也就是ROS1的终极版本,可以在 ubuntu20.04、Mac 或 windows10 系统上安装。虽然一般用户平时使用的操作系统以windows居多,但是ROS之前的版本基本都不支持windows,所以当前最常用的操作系统是 ubuntu,以方便向历史版本过渡。ubuntu常用的安装方式有两种——实体机安装(使用双系统,windows 与 ubuntu 并存)和虚拟机安装。虽然双系统可以保证性能,但是不方便实现windows 与 ubuntu 的交互,当然,如果只是出于学习目的,虚拟机安装也够用了,所以作为一名初学者我毫不犹豫地选择了虚拟机安装。

如果采用虚拟机安装 ubuntu,再安装 ROS 的话,大致流程如下:

  1. 安装虚拟机软件(比如:virtualbox 或 VMware,我刚开始使用的VMware,后来转用virtualbox,具体看个人需求);

  1. 使用虚拟机软件虚拟一台主机(磁盘空间一定要够用);

  1. 在虚拟主机上安装 ubuntu ,我是用的是20版本;

  1. 在 ubuntu 上安装 ROS;

  1. 测试 ROS 环境是否可以正常运行。

ROS 初体验

HelloWorld实现(C++版)

目标:编写 ROS 程序,在控制台输出文本: Hello World,使用编程语言 C++ 实现。

  • 创建一个工作空间

mkdir -p 自定义空间名称/src
cd 自定义空间名称
catkin_make

打开终端,输入上述命令,会创建一个工作空间以及一个 src 子目录,然后再进入该工作空间进行编译, catkin_make是编译命令,如下图所示。

  • 进入src子目录,创建功能包并添加依赖

cd src
catkin_create_pkg 自定义ROS包名 roscpp rospy std_msgs

上述命令,会在工作空间下生成一个功能包,该功能包依赖于 roscpp、rospy 与 std_msgs,其中roscpp是使用C++实现的库,而rospy则是使用python实现的库,std_msgs是标准消息库,创建ROS功能包时,一般都会依赖这三个库实现。

  • 进入 ros 包的 src 目录编辑源文件

C++源码实现(文件名自定义,我定义为helloworld.cpp)

#include "ros/ros.h"
    //主函数
int main(int argc, char *argv[])
{
    //执行 ros 节点初始化,节点名称helloworld
    ros::init(argc,argv,"helloworld");
    //创建 ros 节点句柄(非必须)
    ros::NodeHandle n;
    //控制台输出 Hello World!
    ROS_INFO("Hello World!");

    return 0;
}
  • 编辑 ros 包下的 Cmakelist.txt文件

add_executable(源文件名
  src/源文件名.cpp
)
target_link_libraries(源文件名
  ${catkin_LIBRARIES}
)
  • 进入工作空间目录并编译

cd 自定义空间名称
catkin_make
  • 执行

先执行命令一

roscore

在执行命令二

cd 工作空间
source ./devel/setup.bash
rosrun 包名 C++节点

最终实现效果如图所示

话题通信关于自定义msg调用的简单操作(C++)

  • 实现目的:编写发布订阅实现,发布方以某频率发布自定义消息,订阅方订阅自定义消息并将消息内容打印输出。

  • 流程:

  1. 编写发布方实现;

  1. 编写订阅方实现;

  1. 编辑配置文件;

  1. 编译并执行。

注:这里实现该程序使用的是VScode ,VSCode 全称 Visual Studio Code,是微软出的一款轻量级代码编辑器,免费、开源而且功能强大。如果要使用VScode,使用前要确保相应的插件安装完成,vscode/tasks.json 文件修改妥当,配置妥当等。

  • 发布方

  • 订阅方

  • 配置 CMakeLists.txt

  • 执行

与小乌龟的纠缠不休

  1. 测试ROS

  • 首先启动三个命令行(快捷键:ctrl + alt + T)

  • 命令一:roscore(运行ROS主节点)

  • 命令二:rosrun turtlesim turtlesim_node(显示小乌龟的图形化界面)

  • 命令三:rosrun turtlesim turtle_teleop_key(在该命令行中可以通过键盘的方向键控制小乌龟的运动)

  1. 话题发布的简单实操

编码实现乌龟运动控制,让小乌龟做圆周运动。

  1. 使用launch文件启动小乌龟,控制乌龟运动,且时时打印当前乌龟的位姿。

  1. 编码实现向 turtlesim 发送请求,在中央位置生成一只乌龟,在左下角(自定义生成坐标)循环生成五只小乌龟。

  1. 修改turtlesim乌龟显示节点窗体的背景色(参数服务器以 rgb 的方式设置)。

  1. 启动 turtlesim_node,该节点中窗体有一个世界坐标系(左下角为坐标系原点),乌龟是另一个坐标系,键盘控制乌龟运动,将两个坐标系的相对位置动态发布。

机器人导航(仿真)简单实操

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值