VISP库IBVS仿真

示例程序1–tutorial-ibvs-4pts.cpp

/*! \example tutorial-ibvs-4pts.cpp */
#include <visp3/visual_features/vpFeatureBuilder.h>
#include <visp3/vs/vpServo.h> //实现控制律的头文件
#include <visp3/robot/vpSimulatorCamera.h> //包含六自由度的虚拟相机

int main()
{
  try {
    vpHomogeneousMatrix cdMo(0, 0, 0.75, 0, 0, 0); //相机目标位置
    vpHomogeneousMatrix cMo(0.15, -0.1, 1.,        //相机初始位置
                            vpMath::rad(10), vpMath::rad(-10), vpMath::rad(50));

    vpPoint point[4] ;                             //四个角点
    point[0].setWorldCoordinates(-0.1,-0.1, 0);
    point[1].setWorldCoordinates( 0.1,-0.1, 0);
    point[2].setWorldCoordinates( 0.1, 0.1, 0);
    point[3].setWorldCoordinates(-0.1, 0.1, 0);

    vpServo task ;
    task.setServo(vpServo::EYEINHAND_CAMERA);     //初始化任务,手眼模型
    task.setInteractionMatrixType(vpServo::CURRENT);//设着交互矩阵类型(current, desired, mean or user defined)
    task.setLambda(0.5);                          //收敛速度

    vpFeaturePoint p[4], pd[4] ;                  //初始化特征点
    for (unsigned int i = 0 ; i < 4 ; i++) {
      point[i].track(cdMo);                      //相机坐标系下 跟踪特征点,并计算二位图像平面内的投影
      vpFeatureBuilder::create(pd[i], point[i]); //根据point[i]和相机参数,创建一个特征点,
      point[i].track(cMo);
      vpFeatureBuilder::create(p[i], point[i]);
      task.addFeature(p[i], pd[i]);
    }

    vpHomogeneousMatrix wMc, wMo;   //定义相机、目标位置
    vpSimulatorCamera robot;
    robot.setSamplingTime(0.040);
    robot.getPosition(wMc);
    wMo = wMc * cMo;

    for (unsigned int iter=0; iter < 150; iter ++) {
      robot.getPosition(wMc);
      cMo = wMc.inverse() * wMo;
      for (unsigned int i = 0 ; i < 4 ; i++) {   //通过将3维点投影到图像平面,来更新特征点
        point[i].track(cMo);
        vpFeatureBuilder::create(p[i], point[i]);
      }
      vpColVector v = task.computeControlLaw();
      robot.setVelocity(vpRobot::CAMERA_FRAME, v);
    }

    task.kill();
  }
  catch(vpException &e) {
    std::cout << "Catch an exception: " << e << std::endl;
  }
}

效果图
http://visp-doc.inria.fr/doxygen/visp-daily/tutorial-ibvs.html


vpHomogeneousMatrix cdMo(0, 0, 0.75, 0, 0, 0);
vpHomogeneousMatrix cMo(0.15, -0.1, 1., vpMath::rad(10), vpMath::rad(-10), vpMath::rad(50));

用两个齐次矩阵定义相机的目标位置与初始位置。前三个值表示平移分量,后三个表示旋转分量,组合成其次坐标表示,参考:http://blog.csdn.net/yjy728/article/details/78335758


vpPoint point[4] ;
point[0].setWorldCoordinates(-0.1,-0.1, 0);
point[1].setWorldCoordinates( 0.1,-0.1, 0);
point[2].setWorldCoordinates( 0.1, 0.1, 0);
point[3].setWorldCoordinates(-0.1, 0.1, 0);

然后定义边长20cm的正方形的四个角点;vpPoint这个数据类型定义如下。

   51 void
   52 vpPoint::init()
   53 {
   54   p.resize(3) ; p = 0 ; p[2] = 1 ;
   55   oP.resize(4) ; oP = 0 ; oP[3] = 1 ;
   56   cP.resize(4) ; cP = 0 ; cP[3] = 1 ;
   57 
   58   //default value Z (1 meters)
   59   set_Z(1) ;
   60 }

vpPoint这个类型里面包含了
1. p–图像平面p内的表示的特征坐标,与2维正规化坐标对应,单位m。
2. oP–目标坐标系表示的特征,也叫世界坐标系
3. cP–相机坐标系下的特征表示
setWorldCoordinates是设置了oP;


vpServo task ;
task.setServo(vpServo::EYEINHAND_CAMERA);
task.setInteractionMatrixType(vpServo::CURRENT);
task.setLambda(0.5);

将任务初始化为手眼相机的视觉伺服,控制器计算出来的是相机坐标系下的速度值。交互矩阵有当前特征值计算出来,需要在每个循环内更新。常数 λ 是收敛的速度,设为0.5。
其中:

v
  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
这个问题是由于在运行"sudo apt-get update"命令时,无法获取到"http://realsense-hw-public.s3.amazonaws.com/Debian/apt-repo/dists/focal/InRelease"这个链接的资源,返回了403 Forbidden的错误。\[1\]\[2\] 根据引用\[3\]提到的解决方法,你可以尝试编辑"/etc/apt/source.list"文件,并将"http://realsense-hw-public.s3.amazonaws.com/Debian/apt-repo/dists/focal"这个源的勾选去掉,然后选择"https://librealsense.intel.com/Debian/apt-repo"这个选项。然后再次运行"sudo apt-get update"命令,应该就能成功更新了。 请注意,这个解决方法是基于引用\[3\]提到的情况,如果你的情况不同,可能需要采取其他的解决方法。 #### 引用[.reference_title] - *1* *3* [实验日志二: Sawyer IBVS control____Visp以及visp-ros平台的安装](https://blog.csdn.net/Maomaokingya/article/details/121086729)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [解决E: 仓 “http://realsense-hw-public.s3.amazonaws.com/Debian/apt-repo bionic InRelease” 没有...](https://blog.csdn.net/weixin_45498383/article/details/128592673)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值