Go to the documentation of this file.00001
00009 #include <cmath>
00010 #include <ros/ros.h>
00011 #include <sensor_msgs/JointState.h>
00012
00013 #include <omnicamera_msgs/VirtualCameraConfig.h>
00014
00015 using std::string;
00016
00017 using ros::Publisher;
00018 using ros::Subscriber;
00019
00020 using sensor_msgs::JointState;
00021
00022 using omnicamera_msgs::VirtualCameraConfig;
00023
00024
00025 namespace {
00026
00027 const int MODE_JOINT_STATE_IN = 0;
00028 int mode = MODE_JOINT_STATE_IN;
00029
00030 string inTopic = "in";
00031 string outTopic = "out";
00032
00033 Subscriber jointStateSub;
00034
00035 VirtualCameraConfig out;
00036 Publisher pub;
00037
00038
00039 void jointStateCallback(const JointState::ConstPtr& msg) {
00040
00041
00042
00043 out.pan = msg->position[0];
00044 out.tilt = msg->position[1];
00045
00046 pub.publish(out);
00047 }
00048 }
00049
00050 int main(int argc, char **argv) {
00051 ros::init(argc, argv, "virtual_camera_conv");
00052 ros::NodeHandle nh;
00053
00054
00055 ros::NodeHandle pnh("~");
00056
00057
00058 pnh.param(string("viewport_width"), out.viewportWidth, 512);
00059 pnh.param(string("viewport_height"), out.viewportHeight, 512);
00060 pnh.param(string("image_update_interval"), out.imageUpdateInterval, 3.0);
00061 pnh.param(string("pan"), out.pan, 0.0);
00062 pnh.param(string("tilt"), out.tilt, 0.0);
00063 pnh.param(string("horizontal_fov"), out.horizontalFov, M_PI / 180 * 90);
00064 pnh.param(string("vertical_fov"), out.verticalFov, M_PI / 180 * 90);
00065
00066
00067 pnh.param(string("mode"), mode, MODE_JOINT_STATE_IN);
00068 ROS_INFO("Conversion mode set to %d.", mode);
00069 switch (mode) {
00070 case MODE_JOINT_STATE_IN:
00071 default:
00072 jointStateSub = nh.subscribe(inTopic, 1, jointStateCallback);
00073 }
00074
00075 pub = nh.advertise<VirtualCameraConfig>(outTopic, 1);
00076
00077 ros::spin();
00078
00079 return 0;
00080 }