机器人操作系统ROS_典型功能代码详解

2018-12-04 22:18

机器人操作系统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 ............................................................................................................................................................................................................. 8

1//RosAria.cpp ........................................................................................................................................................................................... 8 #CmakeList.txt .......................................................................................................................................................................................... 19 2//rosaria_teleop_key.cpp ...................................................................................................................................................................... 19 3//rosaria_teleop_code.cpp .................................................................................................................................................................... 21 #CmakeList.txt .......................................................................................................................................................................................... 22 Images .............................................................................................................................................................................................................. 25

//image_converter.cpp //包 cv_bridge仅有的一个程序 ...................................................................................................................... 25 //hud_gui_simplified.cpp ......................................................................................................................................................................... 26 //usb_cam.h ............................................................................................................................................................................................. 27 //usb_cam.cpp ......................................................................................................................................................................................... 28 //usb_cam_node.cpp ............................................................................................................................................................................... 44 #usb_cam/CmakeList.txt .......................................................................................................................................................................... 47 NiTE, Tf的发布 ................................................................................................................................................................................................ 48

//tf2_ros/transform_broadcaster.h 系统 ............................................................................................................................................... 48 //tf2_ros/transform_broadcaster.cpp系统 ............................................................................................................................................ 48 //tf/transform_broadcaster.h .................................................................................................................................................................. 49 //tf/transform_broadcaster.cpp .............................................................................................................................................................. 50 //tf2_ros/transform_listener.h ................................................................................................................................................................ 50 //tf/transform_listener.h ......................................................................................................................................................................... 51 //openni_tracker.cpp节点 ...................................................................................................................................................................... 54 #CmakeList.txt .......................................................................................................................................................................................... 57 Tf的接收, 并以控制P3AT做示范 ................................................................................................................................................................. 58

//TfListnerAria.cpp ................................................................................................................................................................................... 58 #CmakeList.txt .......................................................................................................................................................................................... 59 语音发布 .......................................................................................................................................................................................................... 60

//sound_play.h ......................................................................................................................................................................................... 60 //SoundDemo.cpp .................................................................................................................................................................................... 62 #CmakeList.txt .......................................................................................................................................................................................... 63 #test/CmakeList.txt .................................................................................................................................................................................. 64 语言接收, 显示/再发声.................................................................................................................................................................................. 64

//VoiceBridgeNode.cpp............................................................................................................................................................................ 64 #CMakeList.txt ......................................................................................................................................................................................... 64 //RespondVoice.cpp ................................................................................................................................................................................. 65 #test/CMakeList.txt .................................................................................................................................................................................. 66 ROS_OpenTLD-GUI ........................................................................................................................................................................................... 66

//tld_gui_node.cpp .................................................................................................................................................................................. 66 //base_frame.hpp .................................................................................................................................................................................... 66 //base_frame.cpp .................................................................................................................................................................................... 68 //ui_baseFrame.h..................................................................................................................................................................................... 72 //base_frame_graphics_view.hpp ........................................................................................................................................................... 75

1

//base_frame_graphics_view.cpp ........................................................................................................................................................... 76 ROS_OpenTLD-tracker ...................................................................................................................................................................................... 79

//tld_node.cpp ......................................................................................................................................................................................... 79 //main.hpp ............................................................................................................................................................................................... 80 //main.cpp ............................................................................................................................................................................................... 82 ROS_OpenTLD-launch ...................................................................................................................................................................................... 87

//ros_tld_gui.launch ................................................................................................................................................................................ 87 //ros_tld_tracker.launch .......................................................................................................................................................................... 87 ROS_OpenTLD-msg ........................................................................................................................................................................................... 88

//BoundingBox.h ...................................................................................................................................................................................... 88 //Target.h ................................................................................................................................................................................................. 91 ROS_OpenTLD-git-opentld/main ...................................................................................................................................................................... 94 ROS数据类型 .................................................................................................................................................................................................. 95

//std_msgs/Float32 .................................................................................................................................................................................. 95 //std_msgs/Char ...................................................................................................................................................................................... 95 //std_msgs/String .................................................................................................................................................................................... 95 //std_msgs/Header .................................................................................................................................................................................. 95 //sensor_msgs/Image .............................................................................................................................................................................. 95 //sensor_msgs/Image_encodings?? ........................................................................................................................................................ 96 //sound_play/SoundRequest ................................................................................................................................................................... 96 //geometry_msgs/Twist ........................................................................................................................................................................... 96 //geometry_msgs/TransformStamped .................................................................................................................................................... 96 ROS系统程序文件 .......................................................................................................................................................................................... 96

//fill_image.h............................................................................................................................................................................................ 96 //cv_bridge.h系统 ................................................................................................................................................................................... 97 //cv_bridge.cpp ...................................................................................................................................................................................... 101 Linux系统程序文件 ...................................................................................................................................................................................... 101

/usr/include/linux/videodev2.h ............................................................................................................................................................. 101

2

ROS API 介绍

关于publisher

1.ros::Publisher chatter_pub = n.advertise(\, 1000);//创建了一个发布者

2. image_pub_ = it_.advertise(\, 1); 3. image_transport::CameraPublisher image_pub_ ; image_pub_ = it.advertiseCamera(\, 1);

image_pub_.publish((sensor_msgs::Image)img_, (sensor_msgs::CameraInfoPtr)*ci);

关于advertise的缓冲区数量, 对于摄像头而言, 缓冲1幅图像即可, 试想若缓冲1000的话, 当接收图像时接收的是历史图像. (需要验证???)

但是对于第一行的缓冲区为1000的BaseDemo,listener还是从最新发布的信息开始读取啊???

关于subscribe, 订阅者要有一个回调函数, 例如:

image_sub_ = it_.subscribe(\, 1, &ImageConverter::imageCb, this); //关联了回调函数 // ImageConverter:: 是指该类中的一个函数

ros::Subscriber sub = n.subscribe(\, 1000, chatterCallback);//创建一个订阅者 // chatterCallback只是外面的与main平级的一个函数

代码相关说明: 程序中含有中文注释时, 也能编译成功。 也能运行! 安装的hydro,只有。h文件,cpp文件没有

Demo

//talker.cpp

#include \//ROS的头文件

#include \//ROS自定义的数据类型String所在的头文件 #include //字符串的输入输出流

int main(int argc, char **argv) { ros::init(argc, argv, \);//在名字空间”ros”中的函数init(); //初始化ROS, 是确切说明节点名字的地方, 节点的名字必须唯一, //它允许ROS通过命令行重新命名, ros::NodeHandle n;//创建了该节点的一个句柄 ros::Publisher chatter_pub = n.advertise(\, 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 << \ << count; msg.data = ss.str();

3

}

ROS_INFO(\, 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 \

#include \

void chatterCallback(const std_msgs::String::ConstPtr& msg) //该回调函数的输入参数为std_msgs::String msg, 与发布者中的数据类型保持一致/////////////////

//是否可以不用ConstPtr,因为talker中只是String msg的数据结构, 是不用也可以不用 & //是不是凡是接受者, 都用ConstPtr?? { ROS_INFO(\, 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, \); ros::NodeHandle n; ros::Subscriber sub = n.subscribe(\, 1000, chatterCallback);//创建一个订阅者 //第一个参数为Topic的名称 “chatter” //第三个参数为回调函数的名称 //每当在话题上接受到数据, 即调用该回调函数一次 ros::spin();//等到该节点被关闭时,spin()才返回//类似于cvWaitKey() return 0; }

//add_two_ints_server.cpp

#include \

#include \

bool add(beginner_tutorials::AddTwoInts::Request &req, beginner_tutorials::AddTwoInts::Response &res) { res.sum = req.a + req.b; ROS_INFO(\, (long int)req.a, (long int)req.b); ROS_INFO(\, (long int)res.sum); return true; }

int main(int argc, char **argv) { ros::init(argc, argv, \);

4

}

ros::NodeHandle n;

ros::ServiceServer service = n.advertiseService(\, add); ROS_INFO(\);

ros::spin();//程序一直停留在这,等待客户端的请求. 客户端请求一次,就运行一次add() //等到该节点被关闭时,spin()才返回 return 0;

//add_two_int_client.cpp

#include \

#include \ #include

int main(int argc, char **argv) { ros::init(argc, argv, \); if (argc != 3) { ROS_INFO(\); return 1; } ros::NodeHandle n;//符号::是指名字空间下的一个数据类型 ros::ServiceClient client = n.serviceClient(\); //尖括号里面的, 是指消息的类型. //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(\, (long int)srv.response.sum); } else { ROS_ERROR(\); 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

find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs

message_generation

5


机器人操作系统ROS_典型功能代码详解.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:张大千题画诗欣赏(9)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: