学生です.コールバック関数について質問があります.
配信者側のプログラムで
ros::NodeHandle nh;
ros::Publisher ros_tutorial_point = nh.advertise<geometry_msgs::Point>("ros_tutorial_msg",100);
ros::Publisher ros_tutorial_vector = nh.advertise<geometry_msgs::Vector3>("ros_tutorial_msgg",100);
と宣言して,
ros_tutorial_point.publish(point);
ros_tutorial_vector.publish(vector);
と2種類のメッセージを送るとします.
次に,購読者側のプログラムで,
ros::NodeHandle nh;
ros::Subscriber ros_tutorial_point = nh.subscribe("ros_tutorial_msg", 100, msgCallback);
ros::Subscriber ros_tutorial_vector = nh.subscribe("ros_tutorial_msgg", 100, msgCallbacks);
と宣言し,2種類のメッセージを購読します.
その後,コールバック関数で
void msgCallback(const geometry_msgs::Point::ConstPtr& point)
{
ROS_INFO("recieve point: %f", point->x);
}
void msgCallbacks(const geometry_msgs::Vector3::ConstPtr& vector)
{
ROS_INFO("recieve vector: %f", vector->x);
}
と2つの関数はそれぞれ1種類ずつのメッセージを引数としてあります
この場合は問題なく2つのメッセージを受信できるのですが,
コールバック関数を一つにすることは可能でしょうか.
単純に,
void msgCallback(const geometry_msgs::Point::ConstPtr& point, const geometry_msgs::Vector3::ConstPtr& vector)
{
ROS_INFO("recieve point: %f", point->x);
ROS_INFO("recieve vector: %f", vector->x);
}
としてしまうとエラーが出てしまいます.
何か方法があればお願いします.