How to use ViSP example for visual servoing ?
Hi ROSSER
I have been struggling for a while with this issue,
I want to do visual servoing with real UR5 arm, I can control UR5 with ur_modern_driver properly and I can use visp_auto_tracker
to detect the QR-code and publish the pose. Until now, everything works fine with ROS indigo.
I prepared a ROS node that can subscribe to the published pose, but I do not know how to use PBVS or IBVS (ViSPexamples) ???, and then publish the velocity to the UR5 driver ???. I can run this PBVS-example alone (which can calculate the errors and camera velocity) but I don't know how to feed it with my real QR-code. I also spent time with pioneer-example, but this is only for mobile robot, I couldn't use it for UR5 arm. I mean, it gives linear and angular velocity, but I need the position and orientation for the end-effector of the UR5.
The part the I am stuck is, I don't know how to feed PBVS-example with my real QR-code (see below) in order to calculate camera velocity based on my real input.
Thanks in advance
This is my ROS node
//c++ example to subscribe to an QR-code's pose that is published by visp_auto_tracker
#include <vector>
#include "ros/ros.h"
#include "geometry_msgs/PoseStamped.h"
std::vector<geometry_msgs::PoseStamped::ConstPtr> poses;
void handle_poses(const geometry_msgs::PoseStamped::ConstPtr& msg)
{
ROS_INFO_STREAM("Position X " << msg->pose.position.x);
ROS_INFO_STREAM("Position Y: " << msg->pose.position.y);
ROS_INFO_STREAM("Position Z: " << msg->pose.position.z);
ROS_INFO_STREAM("Orientation X: " << msg->pose.orientation.x);
ROS_INFO_STREAM("Orientation Y: " << msg->pose.orientation.y);
ROS_INFO_STREAM("Orientation Z: " << msg->pose.orientation.z);
ROS_INFO_STREAM("Orientation W: " << msg->pose.orientation.w);
// Use the msg object here to access the pose elements,
// like msg->pose.pose.position.x
poses.push_back(msg);
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "listenerccp");
ros::NodeHandle n;
ros::Subscriber sub = n.subscribe("/visp_auto_tracker/object_position",
1000, handle_poses);
ros::spin();
return 0;
} '