ROS机器人操作系统(简要总结)

创建一个包

catkin_create_pkg 包名 依赖

例子

catkin_create_pkg zsw std_msgs roscpp 

说明
依赖可以在package.xml 中修改
这个时候,包创建出来了,可是没有用。需要在工程中catkin_make install 安装这个包。

编写节点

包目录的src文件中编写文件
在CMakeLists.txt 中添加:

add_executable(节点名 src/节点文件.cpp)
target_link_libraries(节点名 ${catkin_LIBRARIES})
add_dependencies(节点名 包名_generate_messages_cpp)

还有

   generate_messages(DEPENDENCIES std_msgs) 

接着到工程目录下catkin_make就可以把节点编译出来了
例子

	add_executable(talker src/talker.cpp)
	target_link_libraries(talker ${catkin_LIBRARIES})
	add_dependencies(talker beginner_tutorials_generate_messages_cpp) 

说明
add_dependencies会产生 包名_generate_messages的built target出来
也就是说,generate_messages生成一个依赖,
名字就是包名_generate_messages_cpp
可以注释掉generate_messages(DEPENDENCIES std_msgs)
add_dependencies(talker std_msgs)

运行节点

rosrun 包名 节点名
说明
注意roscore

同时运行多个节点

rosrun 包名 节点名 __name:=新的节点名

例子

rosrun turtlesim turtlesim_node __name:=my_turtle 

说明
Ros中不允许运行相同名字的节点,节点中的主题可以一样。
所以通过修改节点名,可以启动多个相同功能的节点。

管理节点

在包下,launch 文件夹下创建.launch 文件

roslaunch 包名 文件名.launch 

例子

roslaunch beginner_tutorials turtlemimic.launch 

说明
.launch可以一下子启动很多节点,就不用搞很多终端出来了。注意,这样启动的话,没有启动一个终端可以看那些字符消息。
这个时候就需要调试工具来看log了

通过调试工具来看log

打开log工具

rosrun rqt_console rqt_console 

设置log级别(信息过滤)

rosrun rqt_logger_level rqt_logger_level 

launch 文件(有完整文档详细说明)

1. <group ns="turtlesim1">
2. 		<node pkg="turtlesim" name="sim" type="turtlesim_node"/>
3. </group> 

group 代表一个组,组里面的主题只能发到组中,其他组的同个主题节点并不能收到这个组里面的主题消息。
Node可以放在组里面,也可以不放在组里面。代表一个节点。

编写服务和客户

实际上,服务和客户也属于节点,可以用rosnode查看,只是客户运行只是一刹那,看不到,但是服务可以看到。
当然服务还可以用rosservice来看,可以看更多的信息。

编写srv文件

package.xml 中加入,这两个是固定写法,srv和msg都依赖他们

<build_depend>message_generation</build_depend>
<run_depend>message_runtime</run_depend> 

写完后,打开CMakeLists.txt
find_package 中加入message_generation ,这是一个固定写法,在srv和msg部分的注释中可以看到。接着

 catkin_package(
 ...
 CATKIN_DEPENDS message_runtime ...
  ...) 

以上是srv和msg通用的步骤,目的都是配置好message_generation和message_runtime,这样,srv和msg就可以用了。

add_service_files 中加入相关srv文件。
catkin_make 一下就会生成头文件,在devel/include文件夹中

编写msg文件(用于节点的)

类似srv,add_message_files 中要加入相关msg文件
主要用于节点主题消息。而srv用于服务。

服务与客户

包含上面生成的头文件。写完后,

1. add_executable(add_two_ints_server src/add_two_ints_server.cpp)
2. target_link_libraries(add_two_ints_server ${catkin_LIBRARIES})
3. add_dependencies(add_two_ints_server beginner_tutorials_gencpp)
4.
5. add_executable(add_two_ints_client src/add_two_ints_client.cpp)
6. target_link_libraries(add_two_ints_client ${catkin_LIBRARIES})
7. add_dependencies(add_two_ints_client beginner_tutorials_gencpp) 

写法跟写节点一样,实际上他们就是节点。只是add_dependencies的时候有点不一样。Gencpp并没有在CMakeLists.txt 有所体现。照写就行。

catkin_make一下就可以跑了

参数服务器(暂未跑通)

参数服务器跟上面提到的服务有所不同。小龟程序中的设置背景颜色,就是用了参数服务器。通过修改服务器的参数,来改变颜色,通过rosparam get可以获取到相应的参数。
见:http://blog.csdn.net/Start_From_Scratch/article/details/51567813 C++
Python也是同样原理:
if rospy.has_param(self._lm_param):
lm = rospy.get_param(self._lm_param)

Urdf文件
进行机器人模拟的时候,urdf文件用来描述机器人模型

Ros by example

源码地址
https://github.com/pirobot/rbx1
注意,里面只有4个版本,没有jade版本。
使用源码
下载下来的源码目录结构跟我们工程不一样,不能直接rosmake,要将源码里面的包复制到自己建的工程下的src目录下。
关于cvg
源码使用的是cvg作为参数服务文件,但新版的ros用的是yaml文件和.rviz文件。所以会无法启动rviz。

安装语音

1.$ sudo apt-get install gstreamer0.10-pocketsphinx
2.$ sudo apt-get install ros-fuerte-audio-common
3.$ sudo apt-get install libasound2

apt-get install ros-hydro-pocketsphinx
apt-get install gstreamer0.10-gconf
然后就可以跑语音例子了。ㄟ(⊙ω⊙ㄟ)
roslaunch pocketsphinx robocup.launch
rostopic echo /recognizer/output

机器人TurtleBot

roslaunch rbx1_bringup fake_pi_robot.launch
rosrun rviz rviz -d …rbx1_nav/sim.rviz
然后
pub /cmd_vel geometry_msgs/Twist ‘{linear:{x: 0.2, y: 0, z: 0},angular:{x: 0, y: 0, z: 0.5}}’
就可以动起来了。
rostopic pub -1 /cmd_vel geometry_msgs/Twist '{}可以停下来。-l可以不用

节点关系图

工程比较大的时候,节点关系图能够看出消息是怎么传递的。
rosrun rqt_graph rqt_graph

掏糞坐标

Rosrun tf tf_echo /map /odom
查看两个坐标消息怎么传输的。以及传输的数据。
Rosrun tf view_frames
可以在当前路径下生成一个.pdf就可以详细看到目前状况。不过也只能看到当前5s内的tf转换消息。

ROS机器人学习小结全文共9页,当前为第1页。ROS机器人学习小结全文共9页,当前为第1页。ROS机器人学习小结 ROS机器人学习小结全文共9页,当前为第1页。 ROS机器人学习小结全文共9页,当前为第1页。 Ros简介 ROS是一个用于编写软件的灵活框架,它集成了大量的工具、库、协议,提供了类似操作 系统提供所提供的功能,包括硬件抽象描述、底层驱动程序管理、共用功能的执行、程序 间的消息传递、程序发行包的管理,可以极大的简化繁杂多样的机器人平台下的复杂任务创 建与稳定行为控制。 在短短几年里,ROS得到了广泛的应用,各大机器人平台几乎都支持ROS框架,如 Pioneer、Aldebaran Nao、TurtleBot ' Lego NXT、Asctec quadrotor 等。同时,开源社 区内的ROS功能包呈指数级增长,涉及的应用邻域包括轮式机器人、人形机器人、工业机器 人、农业机器人等。 1.1 ROS的设计目标。 ROS的设计目标是提高机器人研发中的软件复用率,所以它被设计成为一种分布式结构, 使得框架中的每个功能模块都能被单独设计、 编译,并且在运行时以松散耦合 的方式结合在一起。而且ROS中的功能模块都封装于独立的功能包(Package ),便于在社 区中共享与分发。 1-2ROS的特点 ROS核心一一分布式网络,使用Tcp/ip的通信方式,实现模块间点对点的松耦合连 接,可以执行若干类型的通信,包括基于话题的(Topic )的异步数据流通信,基于服务 (service )的同步数据流通信,还有参数服务器上的数据存储等(1)点对点的设计 ROS机器人学习小结全文共9页,当前为第2页。ROS机器人学习小结全文共9页,当前为第2页。在ROS中,每一个进程都以一个节点的形式运行,可以分布于多个不同的主机。 ROS机器人学习小结全文共9页,当前为第2页。 ROS机器人学习小结全文共9页,当前为第2页。 传送到接收节点。这种点对点的设计可以分散定位、导航等功能带来的实时计 算压力,适应多机器人的协同工作。 多语言支撑 Python、C++、Java、Octave、LISP 等 架构精简、集成度高 在已有的机器人应用中,软件的复用性是一个巨大的问题。很多的驱动程序、 应用算法、功能模块在设计时过于混乱,导致其很难在其他机器人或应用中进行移植和 二次开发。而 ROS框架具有模块化特点使得每个功能节点可以进行 单独编译,并且使用统一的消息接口让模块的移植、复用更加便捷。 组织化工具包丰富 移动机器人的开发往往需要一些友好的可视化工具和仿真软件, ROS采用组件 的方法将这些工具和软件集成到系统中可以作为一个组件直接使用。例如 3D 可视化工具rvk,开发者可以根据ROS定义的接口在其显示机器人3D模型、周围环境 地图、机器人导航路线等消息。此外, ROS中还有消息查看工具、物理 仿真环境等组件,提高了机器人开发的效率。 免费并且开源 ROS遵照的BSD许可给使用者较大的自由,允许其修改和重新发布其中的应 ROS机器人学习小结全文共9页,当前为第3页。ROS机器人学习小结全文共9页,当前为第3页。丿II代码,共至町以进行商业化的丿I:发和销售o ROS机器人学习小结全文共9页,当前为第3页。 ROS机器人学习小结全文共9页,当前为第3页。 master: (1)每个node启动时都要向master注册。(2)管理node之间的通信master: (1)每个node启动时都要向master注册。(2)管理node之间的通信 master: (1)每个node启动时都要向master注册。(2)管理node之间的通信 master: (1)每个node启动时都要向master注册。(2)管理node之间的通信 node: (1) ROS的进程。(2) pkg里的可执行文件运行的实例(运行C++、python、shell 脚本等可执行文件,加载到内存中,就成为一个 ROS进程,即一个node) 通信方式 topic 通信 ros中的异步通信方式 机制通信机制通信node 之间通过 publish-subscribe nodeA和nodeB发布和订阅并不同步 机制通信 机制通信 多个node可以发布信息给同一 Topic,多个node可以订阅同一 Topic的信息 service 通信 topic通信占用计算资源,node不停的发布信息和接受信息。 service ROS机器人学习小结全文共9页,当前为第4页。ROS机器人学习小结全文共9页,当前为第4页。ROS中的同步通信方式 ROS机器人学习小结全文共9页,当前为第4页。 ROS机器人学习小结全文共9页,当前为第4页。 ROS机器人学习小结全文共9页,当前为第5页。ROS机器人学习小结
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值