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工具
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来看,可以看更多的信息。
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文件夹中
类似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文件用来描述机器人模型
源码地址
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
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转换消息。