logo资料库

机器人操作系统ROS-典型功能代码详解.doc

第1页 / 共105页
第2页 / 共105页
第3页 / 共105页
第4页 / 共105页
第5页 / 共105页
第6页 / 共105页
第7页 / 共105页
第8页 / 共105页
资料共105页,剩余部分请下载后查看
目录
ROS API 介绍
Demo
//talker.cpp
//listener.cpp
//add_two_ints_server.cpp
//add_two_int_client.cpp
#CmakeList.txt
ROSARIA
1//RosAria.cpp
#CmakeList.txt
2//rosaria_teleop_key.cpp
3//rosaria_teleop_code.cpp
#CmakeList.txt
Images
//image_converter.cpp //包 cv_bridge仅有的一个程序
//hud_gui_simplified.cpp
//usb_cam.h
//usb_cam.cpp
//usb_cam_node.cpp
#usb_cam/CmakeList.txt
NiTE, Tf的发布
//tf2_ros/transform_broadcaster.h 系统
//tf2_ros/transform_broadcaster.cpp系统
//tf/transform_broadcaster.h
//tf/transform_broadcaster.cpp
//tf2_ros/transform_listener.h
//tf/transform_listener.h
//openni_tracker.cpp节点
#CmakeList.txt
Tf的接收, 并以控制P3AT做示范
//TfListnerAria.cpp
#CmakeList.txt
语音发布
//sound_play.h
//SoundDemo.cpp
#CmakeList.txt
#test/CmakeList.txt
语言接收, 显示/再发声
//VoiceBridgeNode.cpp
#CMakeList.txt
//RespondVoice.cpp
#test/CMakeList.txt
ROS_OpenTLD-GUI
//tld_gui_node.cpp
//base_frame.hpp
//base_frame.cpp
//ui_baseFrame.h
//base_frame_graphics_view.hpp
//base_frame_graphics_view.cpp
ROS_OpenTLD-tracker
//tld_node.cpp
//main.hpp
//main.cpp
ROS_OpenTLD-launch
//ros_tld_gui.launch
//ros_tld_tracker.launch
ROS_OpenTLD-msg
//BoundingBox.h
//Target.h
ROS_OpenTLD-git-opentld/main
ROS数据类型
//std_msgs/Float32
//std_msgs/Char
//std_msgs/String
//std_msgs/Header
//sensor_msgs/Image
//sensor_msgs/Image_encodings??
//sound_play/SoundRequest
//geometry_msgs/Twist
//geometry_msgs/TransformStamped
ROS系统程序文件
//fill_image.h
//cv_bridge.h系统
//cv_bridge.cpp
Linux系统程序文件
/usr/include/linux/videodev2.h
机器人操作系统 ROS: 典型功能代码详解 李宝全 目录 目录..................................................................................................................................................................................................................... 1 ROS API 介绍 ...................................................................................................................................................................................................... 3 Demo ....................................................................................................................................................................................................................3 //talker.cpp..................................................................................................................................................................................................3 //listener.cpp ...............................................................................................................................................................................................4 //add_two_ints_server.cpp........................................................................................................................................................................ 4 //add_two_int_client.cpp........................................................................................................................................................................... 5 #CmakeList.txt.............................................................................................................................................................................................5 ROSARIA...............................................................................................................................................................................................................9 1//RosAria.cpp.............................................................................................................................................................................................9 #CmakeList.txt...........................................................................................................................................................................................20 2//rosaria_teleop_key.cpp ........................................................................................................................................................................20 3//rosaria_teleop_code.cpp..................................................................................................................................................................... 21 #CmakeList.txt...........................................................................................................................................................................................22 Images................................................................................................................................................................................................................26 //image_converter.cpp //包 cv_bridge 仅有的一个程序 ...................................................................................................................... 26 //hud_gui_simplified.cpp ..........................................................................................................................................................................27 //usb_cam.h .............................................................................................................................................................................................. 28 //usb_cam.cpp.......................................................................................................................................................................................... 29 //usb_cam_node.cpp................................................................................................................................................................................45 #usb_cam/CmakeList.txt ...........................................................................................................................................................................48 NiTE, Tf 的发布..................................................................................................................................................................................................49 //tf2_ros/transform_broadcaster.h 系统................................................................................................................................................49 //tf2_ros/transform_broadcaster.cpp 系统.............................................................................................................................................50 //tf/transform_broadcaster.h...................................................................................................................................................................50 //tf/transform_broadcaster.cpp...............................................................................................................................................................51 //tf2_ros/transform_listener.h.................................................................................................................................................................52 //tf/transform_listener.h .......................................................................................................................................................................... 53 //openni_tracker.cpp 节点 .......................................................................................................................................................................55 #CmakeList.txt...........................................................................................................................................................................................59 Tf 的接收, 并以控制 P3AT 做示范..................................................................................................................................................................60 //TfListnerAria.cpp.................................................................................................................................................................................... 60 #CmakeList.txt...........................................................................................................................................................................................61 语音发布........................................................................................................................................................................................................... 61 //sound_play.h..........................................................................................................................................................................................61 //SoundDemo.cpp.....................................................................................................................................................................................64 #CmakeList.txt...........................................................................................................................................................................................65 #test/CmakeList.txt................................................................................................................................................................................... 66 语言接收, 显示/再发声...................................................................................................................................................................................66 //VoiceBridgeNode.cpp.............................................................................................................................................................................66 #CMakeList.txt ...........................................................................................................................................................................................66 //RespondVoice.cpp ..................................................................................................................................................................................67 #test/CMakeList.txt ...................................................................................................................................................................................68 ROS_OpenTLD-GUI ............................................................................................................................................................................................ 68 //tld_gui_node.cpp................................................................................................................................................................................... 68 //base_frame.hpp..................................................................................................................................................................................... 68 //base_frame.cpp......................................................................................................................................................................................70 //ui_baseFrame.h......................................................................................................................................................................................74 //base_frame_graphics_view.hpp............................................................................................................................................................77 1
//base_frame_graphics_view.cpp............................................................................................................................................................ 78 ROS_OpenTLD-tracker .......................................................................................................................................................................................81 //tld_node.cpp.......................................................................................................................................................................................... 81 //main.hpp................................................................................................................................................................................................ 82 //main.cpp .................................................................................................................................................................................................84 ROS_OpenTLD-launch........................................................................................................................................................................................89 //ros_tld_gui.launch ..................................................................................................................................................................................89 //ros_tld_tracker.launch...........................................................................................................................................................................90 ROS_OpenTLD-msg............................................................................................................................................................................................90 //BoundingBox.h....................................................................................................................................................................................... 90 //Target.h.................................................................................................................................................................................................. 94 ROS_OpenTLD-git-opentld/main .......................................................................................................................................................................97 ROS 数据类型 ....................................................................................................................................................................................................98 //std_msgs/Float32...................................................................................................................................................................................98 //std_msgs/Char........................................................................................................................................................................................98 //std_msgs/String......................................................................................................................................................................................98 //std_msgs/Header ................................................................................................................................................................................... 98 //sensor_msgs/Image............................................................................................................................................................................... 98 //sensor_msgs/Image_encodings??......................................................................................................................................................... 99 //sound_play/SoundRequest.................................................................................................................................................................... 99 //geometry_msgs/Twist ............................................................................................................................................................................99 //geometry_msgs/TransformStamped .....................................................................................................................................................99 ROS 系统程序文件..........................................................................................................................................................................................100 //fill_image.h ...........................................................................................................................................................................................100 //cv_bridge.h 系统 ..................................................................................................................................................................................100 //cv_bridge.cpp.......................................................................................................................................................................................105 Linux 系统程序文件........................................................................................................................................................................................105 /usr/include/linux/videodev2.h.............................................................................................................................................................. 105 2
ROS API 介绍 关于 publisher 1.ros::Publisher chatter_pub = n.advertise("chatter", 1000);//创建了一个发布者 2. image_pub_ = it_.advertise("/image_converter/output_video", 1); 3. image_transport::CameraPublisher image_pub_ ; image_pub_ = it.advertiseCamera("image_raw", 1); image_pub_.publish((sensor_msgs::Image)img_, (sensor_msgs::CameraInfoPtr)*ci); 关于 advertise 的缓冲区数量, 对于摄像头而言, 缓冲 1 幅图像即可, 试想若缓冲 1000 的话, 当接收图像时接收的是历史图像. (需要验证???) 但是对于第一行的缓冲区为 1000 的 BaseDemo,listener 还是从最新发布的信息开始读取啊??? 关于 subscribe, 订阅者要有一个回调函数, 例如: image_sub_ = it_.subscribe("/camera/image_raw", 1, &ImageConverter::imageCb, this); //关联了回调函数 // ImageConverter:: 是指该类中的一个函数 ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);//创建一个订阅者 // chatterCallback 只是外面的与 main 平级的一个函数 代码相关说明: 程序中含有中文注释时, 也能编译成功。 也能运行! 安装的 hydro,只有。h 文件,cpp 文件没有 Demo //talker.cpp #include "ros/ros.h"//ROS的头文件 #include "std_msgs/String.h"//ROS自定义的数据类型String所在的头文件 #include //字符串的输入输出流 int main(int argc, char **argv) { ros::init(argc, argv, "talker");//在名字空间”ros”中的函数init(); //初始化ROS, 是确切说明节点名字的地方, 节点的名字必须唯一, //它允许ROS通过命令行重新命名, ros::NodeHandle n;//创建了该节点的一个句柄 ros::Publisher chatter_pub = n.advertise("chatter", 1000);//创建了一个发布者 //尖括号里为发布的数据类型, 即消息Message //圆括号中”chatter”为发布的话题的名称, 即Topic //这就使得主机告诉了所有订阅了”chatter”话题的节点, 我们将在这个话题上发布数据 //用到了std_msgs, 对应于在创建包时加入 “std_msgs” 一项//////////////////////////// //第二个参数是发布队列的大小, 它的作用是缓冲. 当我们发布消息很快的时候, 它将能缓冲 1000 条信息. //NodeHandle::advertise()将会返回ros::Publisher对象 //也可以写成ros::Publisher chatter_pub; chatter_pub= n.advertise<...>... ros::Rate loop_rate(10);//一个ros::Rate对象允许user制定循环的频率 //它将会记录从上次调用Rate::sleep()到现在为止的时间, 并且休眠正确的时间 int count = 0; while (ros::ok())//默认情况下,roscpp将会安装一个SIGINT监听,它使当Ctrl-C按下时,ros::ok()将会返回 0. { std_msgs::String msg; std::stringstream ss; ss << "hello world " << count; msg.data = ss.str(); 3
ROS_INFO("%s", msg.data.c_str());//函数ROS_INFO()将相关数据输出到屏幕上 //输出结果为: hello world 1; hello world 2; hello world 3; …… chatter_pub.publish(msg);//将该消息, 即字符串 “hello word xxx”, 发布到话题 “chatter”上 ros::spinOnce();//等待消息发布完成 loop_rate.sleep();//休眠一下, 使程序满足前面所设置的 10Hz的要求 ++count; } return 0; } //listener.cpp #include "ros/ros.h" #include "std_msgs/String.h" void chatterCallback(const std_msgs::String::ConstPtr& msg) //该回调函数的输入参数为std_msgs::String msg, 与发布者中的数据类型保持一致///////////////// //是否可以不用ConstPtr,因为talker中只是String msg的数据结构, 是不用也可以不用 & //是不是凡是接受者, 都用ConstPtr?? ROS_INFO("I heard: [%s]", msg->data.c_str());//将msg中的信息输出到屏幕上 //输出结果为: I heard: [hello world 1]; I heard: [hello world 2]; I heard: [hello world 3];… int main(int argc, char **argv) { ros::init(argc, argv, "listener"); ros::NodeHandle n; ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);//创建一个订阅者 //第一个参数为Topic的名称 “chatter” //第三个参数为回调函数的名称 //每当在话题上接受到数据, 即调用该回调函数一次 ros::spin();//等到该节点被关闭时,spin()才返回//类似于cvWaitKey() return 0; } //add_two_ints_server.cpp #include "ros/ros.h" #include "beginner_tutorials/AddTwoInts.h" { } { } bool add(beginner_tutorials::AddTwoInts::Request &req, beginner_tutorials::AddTwoInts::Response &res) res.sum = req.a + req.b; ROS_INFO("request: x=%ld, y=%ld", (long int)req.a, (long int)req.b); ROS_INFO("sending back response: [%ld]", (long int)res.sum); return true; 4
int main(int argc, char **argv) { ros::init(argc, argv, "add_two_ints_server"); ros::NodeHandle n; ros::ServiceServer service = n.advertiseService("add_two_ints", add); ROS_INFO("Ready to add two ints."); ros::spin();//程序一直停留在这,等待客户端的请求. 客户端请求一次,就运行一次add() //等到该节点被关闭时,spin()才返回 return 0; } //add_two_int_client.cpp #include "ros/ros.h" #include "beginner_tutorials/AddTwoInts.h" #include int main(int argc, char **argv) { ros::init(argc, argv, "add_two_ints_client"); if (argc != 3) { ROS_INFO("usage: add_two_ints_client X Y"); return 1; ROS_ERROR("Failed to call service add_two_ints"); return 1; return 0; } #CmakeList.txt cmake_minimum_required(VERSION 2.8.3) project(beginner_tutorials) ## Find catkin macros and libraries ## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) ## is used, also find other catkin packages 5 ros::NodeHandle n;//符号::是指名字空间下的一个数据类型 ros::ServiceClient client = n.serviceClient("add_two_ints"); //尖括号里面的, 是指消息的类型. //Topic话题:圆括号里面的是Topic的名字(节点可以在一个话题上发布消息,同样也可以订阅一个话题来接收消息) //Message消息: 在一个话题上,发布或订阅时所使用的ROS的数据类型. beginner_tutorials::AddTwoInts srv; srv.request.a = atoll(argv[1]); srv.request.b = atoll(argv[2]); //request的类型为Request,其下有两个量:a,b //atoll功能: 把字符串转换成长长整型数 if (client.call(srv)) { ROS_INFO("Sum: %ld", (long int)srv.response.sum); } } else { }
find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation ) ## System dependencies are found with CMake's conventions # find_package(Boost REQUIRED COMPONENTS system) ## Uncomment this if the package has a setup.py. This macro ensures ## modules and global scripts declared therein get installed ## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html # catkin_python_setup() ################################################ ## Declare ROS messages, services and actions ## ################################################ * add a build_depend and a run_depend tag for each package in MSG_DEP_SET * If MSG_DEP_SET isn't empty the following dependencies might have been your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). pulled in transitively but can be declared for certainty nonetheless: * add a build_depend tag for "message_generation" * add a run_depend tag for "message_runtime" ## To declare and build messages, services or actions from within this ## package, follow these steps: ## * Let MSG_DEP_SET be the set of packages whose message types you use in ## ## * In the file package.xml: ## ## ## ## ## ## * In this file (CMakeLists.txt): ## ## ## ## ## ## ## ## * add "message_generation" and every package in MSG_DEP_SET to * uncomment the add_*_files sections below as needed and list every .msg/.srv/.action file to be processed find_package(catkin REQUIRED COMPONENTS ...) * add "message_runtime" and every package in MSG_DEP_SET to * uncomment the generate_messages entry below * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) catkin_package(CATKIN_DEPENDS ...) ## Generate messages in the 'msg' folder add_message_files( FILES Num.msg ## Generate services in the 'srv' folder add_service_files( FILES AddTwoInts.srv ) ) ## Generate actions in the 'action' folder # add_action_files( # # # # ) FILES Action1.action Action2.action ## Generate added messages and services with any dependencies listed here 6
generate_messages( DEPENDENCIES std_msgs ) ################################### ## catkin specific configuration ## ################################### ## The catkin_package macro generates cmake config files for your package ## Declare things to be passed to dependent projects ## INCLUDE_DIRS: uncomment this if you package contains header files ## LIBRARIES: libraries you create in this project that dependent projects also need ## CATKIN_DEPENDS: catkin_packages dependent projects also need ## DEPENDS: system dependencies of this project that dependent projects also need catkin_package( CATKIN_DEPENDS message_runtime # # LIBRARIES beginner_tutorials # CATKIN_DEPENDS roscpp rospy std_msgs// # DEPENDS system_lib ) INCLUDE_DIRS include ########### ## Build ## ########### ## Specify additional locations of header files ## Your package locations should be listed before other locations # include_directories(include) include_directories( ${catkin_INCLUDE_DIRS} ) # add_executable(talker src/talker.cpp) # target_link_libraries(talker ${catkin_LIBRARIES}) # add_dependencies(talker beginner_tutorials_generate_messages_cpp) # add_executable(listener src/listener.cpp) # target_link_libraries(listener ${catkin_LIBRARIES}) # add_dependencies(listener beginner_tutorials_generate_messages_cpp) add_executable(add_two_ints_server src/add_two_ints_server.cpp)#可执行程序目标 target_link_libraries(add_two_ints_server ${catkin_LIBRARIES})#设置单个目标需要链接的库 add_dependencies(add_two_ints_server beginner_tutorials_gencpp) #目标 add_two_ints_server 依赖于 beginner_tutorials_gencpp add_executable(add_two_ints_client src/add_two_ints_client.cpp) target_link_libraries(add_two_ints_client ${catkin_LIBRARIES}) add_dependencies(add_two_ints_client beginner_tutorials_gencpp) ## Declare a cpp library # add_library(beginner_tutorials # # ) #库目标 src/${PROJECT_NAME}/beginner_tutorials.cpp ## Declare a cpp executable # add_executable(beginner_tutorials_node src/beginner_tutorials_node.cpp) 7
## Add cmake target dependencies of the executable/library ## as an example, message headers may need to be generated before nodes # add_dependencies(beginner_tutorials_node beginner_tutorials_generate_messages_cpp) ## Specify libraries to link a library or executable target against # target_link_libraries(beginner_tutorials_node # # ) ${catkin_LIBRARIES} ############# ## Install ## ############# # all install targets should use catkin DESTINATION variables # See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html ## Mark executable scripts (Python etc.) for installation ## in contrast to setup.py, you can choose the destination # install(PROGRAMS # # # ) scripts/my_python_script DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} ## Mark executables and/or libraries for installation # install(TARGETS beginner_tutorials beginner_tutorials_node # # # # ) ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} ## Mark cpp header files for installation # install(DIRECTORY include/${PROJECT_NAME}/ # # # # ) DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} FILES_MATCHING PATTERN "*.h" PATTERN ".svn" EXCLUDE ## Mark other files for installation (e.g. launch and bag files, etc.) # install(FILES # myfile1 # # # myfile2 # DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} # ) ############# ## Testing ## ############# ## Add gtest based cpp test target and link libraries # catkin_add_gtest(${PROJECT_NAME}-test test/test_beginner_tutorials.cpp) # if(TARGET ${PROJECT_NAME}-test) # # endif() target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) ## Add folders to be run by python nosetests # catkin_add_nosetests(test) 8
分享到:
收藏