ROS系统初探

来源:互联网 发布:蜀地割据知乎 编辑:程序博客网 时间:2024/04/29 23:31

  • 引言
  • 实验平台
  • ROS 安装
  • ROS基本概念与操作
    • packages
    • The Master
    • Node
    • Topics and Messages
  • ROS编程初步上手
    • ROS 工作区目录结构
    • 操作过程
    • 操作实例

引言

对于一个新概念理解的三部曲:

  • 什么是ROS
  • 为什么要用ROS,或者说ROS能用来做什么
  • 怎么来学习ROS

    什么是ROS
    ros就是一个分布式操作系统,通过节点node,主题topic,服务service等进行通信和控制。
    这个机制就好比 两个人聊天微信,每个人都是一个节点node,微信这个软件的聊天功能就是Topic,两个人只有都通过微信才能聊天,如果一个人用whatsup,另一个人用微信,是收不到对方信息的。 而service就好比表情包或者微信朋友圈,两个人在聊天的同时也可以自己搞搞有趣的东西即Service,但是不一定非要通过微信的聊天功能即Topic。
    所以学好ROS就是不断的了解这种通信和交流的机制,然后应用在自己的项目上就好了。

    为什么要用ROS,ROS能用来做什么
    机器人/仿真/3D重建/嵌入式等
    三维重建/室内导航与重建/PCL与opencv/仿真与人机协作等
    ME research是无gps下,在弱光情况仍可以自主飞行的无人机。主要用到ros的地方有:
    传感器信息读取
    避障算法的开发
    避障算法可以自己在ros的gazebo里建立物理模型来进行测试
    传感器信息融合(EKU UKF data fusion)
    速度感知器的开发和测试(velocity estimator)和motion capture系统的对接
    实验数据的监控

    参考文章:

ROS初探总结 25篇

机器人程序设计——之如何正确入门ROS | 硬创公开课(附视频/PPT)by Top Liu

ROS Tutorials官方例子

创客智造 ROS入门整理

搭建stm32底盘的ros小车

ROS industrial
ROS应用篇

  1. 学习Python语言及ROS开发
    网址:http://www.ncnynl.com/category/Python/
    网址:http://www.ncnynl.com/category/ros-python/
    作用:了解Python语言并如何开发ROS程序
  2. 学习C++语言及ROS开发
    网址:http://www.ncnynl.com/category/cplusplus/
    网站:http://www.ncnynl.com/category/roscpp/
    作用:了解C++语言并如何开发ROS程序
  3. 学习SLAM相关
    网址:http://www.ncnynl.com/category/ros-rgbd/
    网址:http://www.ncnynl.com/category/ros-laser/
    网址:http://www.ncnynl.com/category/ros-slam/
    网址:http://www.ncnynl.com/category/rgbd-slam/
    作用:了解如何结合各种传感器实现SLAM
  4. 学习无人机相关
    网址:http://www.ncnynl.com/category/ros-ardrone/
    网址:http://www.ncnynl.com/category/ros-bebop/
    作用:了解如何通过ROS控制无人机
  5. 学习机械臂相关
    网址:http://www.ncnynl.com/category/turtlebot-arm/
    网址:http://www.ncnynl.com/category/ros-moveit/
    作用:了解如何通过ROS控制机械臂

参考书
《 Programming Robots with ROS: A Practical Introduction to the Robot Operating System 》-Morgan Quigley, Brian Gerkey, William D. Smart

《A Mathematical Introduction to Robotic Manipulation》 Richard M. Murray,Zexiang Li,S.Shankar Sastry _介绍机器人控制理论的基础介绍类书籍。ROS作为一个平台,本身很容易上手,难的是于对机器人控制的算法的应用。

《C++ primer》 廖雪峰老师的教程 Python 2.7教程 ROS的编程语言基本都是基于C++和Python的
这里写图片描述
这里写图片描述


ROS ERROR

实验平台

Linux系统:Ubuntu14.04
ROS版本 : indigo


ROS 安装

详细步骤可以参考 《机器人操作系统(ROS)浅析》第二章,写的非常详细。
安装–>配置rosdep–>配置环境变量–>验证


ROS基本概念与操作

packages

ROS 软件包一组用于实现特定功能的相关文件的集合,包括可执行文件和其他支持文件。
在 ROS 中,所有软件都被组织为软件包的形式
比如 turtlesim 包就包含turtlesim_node 和turtle_teleop_key> 可执行文件,当然还有一些其他的可执行文件和配置文件。

rospack list     //系统中已安装ROS软件包列表rospack find package-name // 查找软件包的目录rosls package-name      //查找软件包目录下的文件roscd package-name      //切换到软件包的目录之下sudo apt-get install ros-indigo-PACKAGE_name //安装新的packageeg: sudo apt-get install ros-indigo-slam-gmapping//apt-cache search ros-indigo  //查找可用package

The Master

在ROS系统中,多个相对独立的节点(小程序)能够同时运行,而节点管理器是实现节点间通信的关键部分。
大多数 ROS> 节点在启动时连接到节点管理器上。

roscore   //    启动节点管理器

Node

节点是各自独立的可执行文件,在ROS程序的运行实例被称为节点程序( node)
比如在 turtlesim例子中,就运行了 turtlesim功能包中的 turtlesim_node 节点程序和
turtle_teleop_key节点程序,两个节点相互独立,各执行各的。

rosrun package-name executable-name //运行节点rosrun package-name executable-name __name:=node-name//记得之前先配置环境变量,或者把setup.bash脚本写入 .bashrc文件里source /opt/ros/indigo/setup.bashsource /home/hualong/ros/devel/setup.bashrosnode info node-name  //打印节点信息

Topics and Messages

ROS节点之间进行通信所利用消息传递,而消息被有组织地存放在话题里 .
消息传递的理念是:当一个节点想要分享信息时,它就会发布(publish)消息到对应的一个或者多个话题;当一个节点想要接收信息时,它就会订阅(subscribe)它所需要的一个或者多个话题。 ROS节点管理器负责确保发布节点和订阅节点能找到对方.

所以节点之间通过topic机制来通信,topic机制是一个一对多的Publish/Subscribe 模式: 同一个话题也可以有很多个订阅者,它的底层传输依靠的是TCP/IP,也可以是UDP。topic具体传输的是message,具有一定的类型和数据结构,包括ROS提供的标准类型,和用户自定义类型。

这里写图片描述
如图 /teleop_turtle节点 和 /turtlesim节点 通过 Topic /turtle1/cmd_vel 来通信。
/teleop_turtle 节点会以消息的形式将这些运动 控 制 命 令 发 布 到 话 题 /turtle1/cmd_vel;
turtlesim_node 节点订阅了该话题,因此它会接收到这个些消息,控制海龟按照该预定的速度移动。

ROS编程初步上手

ROS 工作区目录结构

这里写图片描述

操作过程

这里写图片描述
一. 创建工作台

这里我是在用户主目录下创建了一个ros文件夹,这就是我的工作台,并创建了一个src子目录用于存放源码文件。

二.创建软件包

在src目录下 执行 catkin_creat_pkg package_name

三.编写和修改包内文件

  • 编写可执行文件 这个根据任务需求编写,语言格式可以是C++, python等
  • 修改配置文件 CMakeLists.txt   package.xml
  • 声明依赖库
    声明程序所依赖的其他功能包,以确保 catkin 能够向 c++编译器提供合适的标记来定位编译功能包所需的头文件和链接库。

1).操作 CMakeLists.txt 文件

原文件: find_package(catkin REQUIRED)
修改 find_package(catkin REQUIRED COMPONENTS package-names)
roscpp :提供了 ROS 的 C++客户端库
std_msgs : 提供ROS消息类型的库

2). 操作 package.xml 文件
原文件:在<buildtool_depend>catkin</buildtool_depend>
添加:
build_depend 编译依赖
run_depend 运行依赖
格式:
<build_depend>package_name</build_depend>
<run_depend>package_name</run_depend>
【一般是相对应CMakeLists.txt 中声明的库】
例如 添加
<build_depend>roscpp</build_depend>
<run_depend>roscpp</run_depend>


  • 声明可执行文件

这一步比较关键,因为最终运行的ROS节点程序就是这些可执行文件

3). 操作CMakeLists.txt 文件

在# add_executable(${PROJECT_NAME}_node src/agitr_node.cpp)下
//声明了我们想要的可执行文件的文件名,以及生成此可执行文件所需的源文件列表
add_executable(executable-name source-files) // 若有多个source-files用空格隔开

在# target_link_libraries(${PROJECT_NAME}_node下方
//告诉 Cmake 当链接此可执行文件时,需要链接哪些库(就是上面的 find_package 中定义的)
target_link_libraries(executable-name ${catkin_LIBRARIES})

例如:
add_executable(hello hello.cpp)
target_link_libraries(hello ${catkin_LIBRARIES})

add_executable(pub pub.cpp)
add_executable(sub sub.cpp)
target_link_libraries(pub ${catkin_LIBRARIES})
target_link_libraries(sub ${catkin_LIBRARIES})

四. 编译

在工作台ros目录下  catkin_make设置环境变量  source devel/setup.bash查看软件包    rospack list

五. 执行

启动终端 roscore另外启动一个终端 先配置环境变量 再执行sourc /home/hualong/ros/devel/setup.bashrun package_name node_name可以查看执行图  rqt_graph

可以添加环境变量到 /home/user_name/.bashrc
vim /home/user_name/.bashrc 在低行添加sourc /home/hualong/ros/devel/setup.bash
echo “sourc /home/hualong/ros/devel/setup.bash” >> ~/.bashrc

操作实例

第一个hello_ros 软件包

测试发布和订阅的 pub_sub_test软件包

原创粉丝点击