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应用篇
- 学习Python语言及ROS开发
网址:http://www.ncnynl.com/category/Python/
网址:http://www.ncnynl.com/category/ros-python/
作用:了解Python语言并如何开发ROS程序 - 学习C++语言及ROS开发
网址:http://www.ncnynl.com/category/cplusplus/
网站:http://www.ncnynl.com/category/roscpp/
作用:了解C++语言并如何开发ROS程序 - 学习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 - 学习无人机相关
网址:http://www.ncnynl.com/category/ros-ardrone/
网址:http://www.ncnynl.com/category/ros-bebop/
作用:了解如何通过ROS控制无人机 - 学习机械臂相关
网址: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软件包
- ROS系统初探
- ROS初探
- (Part1 ROS初探)
- ROS nodelet初探
- ROS学习笔记(五):服务初探
- ros要学习的四元数初探
- ROS系统命令学习
- ROS系统安装
- ROS坐标系统
- ROS系统安装
- ROS系统学习01
- ROS系统学习02
- ROS系统架构
- ROS 总结(一):ROS系统框架
- ROS(Robot Operating SysTerm) 系统
- ROS(Robot Operating SysTerm) 系统
- ubuntu14.04安装ros系统
- ubuntu16.04安装ros系统
- MySQL体系结构
- 怎么用MATLAB来读取MIT-BIH的心电数据
- 【BZOJ 3926】【ZJOI 2015】 诸神眷顾的幻想乡
- ThinkPHP 3.2.3 Excel文件内容导入数据库
- JSONP跨域访问浅谈
- ROS系统初探
- 【题解】Bomb
- git 总结+踩坑
- java开发—— javascriptDOM对象
- hdu 1203 I NEED A OFFER!
- easyui treegrid 懒加载
- css字体设置相关属性
- 异步提交表单,页面跳转问题
- jquery中$(this)代表的含义