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转换消息。

发布了25 篇原创文章 · 获赞 1 · 访问量 3880

猜你喜欢

转载自blog.csdn.net/a215095167/article/details/105017907