ros学习笔记之——vicon的使用(代码片段)

gwpscut gwpscut     2023-01-26     238

关键词:

最近要测量定位算法的精度,打算用vicon来提供ground truth

入门

vicon其实就相当于一个传感器,在机载电脑上安装VICON-ROS包,这个包就相当于驱动接收来自VICON的数据

在机载电脑上编译(需要用cm编译)

编译完了之后,就只需要修改 /ws_vicon/src/viconros/launch/unit.launch 文件里面的值就可以使用 viconros pkg 了然后根据 viconros使用说明.pdf 的提示,修改 unit.launch 文件里面的值。如下所示:

<?xml version="1.0"?>
<launch>
  <node  pkg="viconros" type="viconros" name="viconros" output="screen" ns="turtlebot2">
    <!-- <remap from="/pengrui/viconros/mocap/pos" to="/mavros/vision_pose/pose"/>  -->
    <param name="vicon_host_name" value="192.168.50.74:801"/>
    <param name="modelsegment_name" value="turtlebot2"/>
  </node>

  <!-- 192.168.50.74:801 value 是vicon 主机的ip地址,然后冒号之后的端口号 = 801 -->
 
  <!-- <node  pkg="viconros" type="viconros" name="viconros" output="screen" ns="pr_object_1">
    <remap from="/pr_object_1/viconros/mocap/pos" to="/pr_object_1/pose"/> 
    <param name="vicon_host_name" value="192.168.50.74:801"/>
    <param name="modelsegment_name" value="pr_object_1"/>
  </node>

  <node  pkg="viconros" type="viconros" name="viconros" output="screen" ns="pr_object_2">
    <remap from="/pr_object_2/viconros/mocap/pos" to="/pr_object_2/pose"/> 
    <param name="vicon_host_name" value="192.168.50.74:801"/>
    <param name="modelsegment_name" value="pr_object_2"/>
  </node>

  <node  pkg="viconros" type="viconros" name="viconros" output="screen" ns="pr_object_3">
    <remap from="/pr_object_3/viconros/mocap/pos" to="/pr_object_3/pose"/> 
    <param name="vicon_host_name" value="192.168.50.74:801"/>
    <param name="modelsegment_name" value="pr_object_3"/>
  </node> -->


</launch>

保存文件之后 roslaunch viconros unit.launch 就可以收到信息了

topic 的命名方式是 "objectname"/viconros/mocap/(acc OR pos OR vel),示例如下:

$ rostopic list
/calibrationstick/viconros/mocap/acc  
/calibrationstick/viconros/mocap/pos  
/calibrationstick/viconros/mocap/vel 

如果有多个object,就在launch 文件里面多调几次node,然后每段node 的launch 都是一样地改三个地方。

VICON的原理:相机发射红外线到无人机上的反射球上,得到测距距离,通过多相机标定计算反射球的空间位置

相机连接方式:一共14个相机(顺时针排序)全部用网线连接到总交换机上

软件使用

Vicon-tracker,每次装完该软件第一次要用licsence激活

在vicon-tracker里选择“camera”栏可以调节相机的基本参数

在vicon-tracker里选定单个相机->对应相机的LED灯会加一圈紫色

相机状态正常:镜头旁边的LED灯显示绿色

判断vicon相机对单个反射球的检测质量:

中间为白色,周围最外面一圈为灰色(逐渐变暗)-> 此时检测质量最佳
调节相机光圈大->造成检测效果过白,光圈小->过暗

反射球能选大的就尽量选大的,除非物理上有干涉(放不下)才选小尺寸的

vicon的频率:100hz~330hz

在机器人上贴球时尽量不要对称,每个无人机的贴法不要一致。如下图所示

VICON相机标定

  1. 在标定时尽量把所有反光物体移开,当然包括所有反射球
  2. 如果遇到实在无法移走的反光区域,可用Mask Calibration模式手动覆盖该区域,但是该区域也不会被纳入VICON工作范围,所以不能mask太多的区域
  3. 标定过程:

(a)打开标定杆,中间有按钮分别显示“开关-电量-强度”

(b)点击vicon-tracker里的calibration,开始标定,此时所有相机的LED会闪烁

(c)走进vicon场,一边走动一边挥动标定杆

(d)直到所有相机LED变绿,说明标定完成,查看标定误差error < 0.3mm即可

(e)将标定杆放置在合适的地方,回到vicon-tracker设置原点origin,标定完成

标定完成之后检测标定效果:在vicon场里放入装有反射球的无人机,点击单独一个球可以看到该球和所有相机都有实时的连线

VICON发布的topic

pose

  • topic name: /object/viconros/mocap/pos
  • topic type: geometry_msgs/PoseStamped
  • messages: position, orientation

velocity

  • topic name: /object/viconros/mocap/vel
  • topic type: geometry_msgs/TwistStamped
  • messages: linear velocity, angular velocity

acceleration

  • topic name: /object/viconros/mocap/acc
  • topic type: geometry_msgs/TwistStamped
  • messages: linear acceleration, angular acceleration

实验测试

参考资料

ros学习笔记之——rpg_trajectory_evaluation工具的使用(代码片段)

之前博客《ROS学习笔记之——EVO工具的使用》采用了EVO来衡量误差,本博文试试rpg_trajectory_evaluation首先编译mkdircatkin_wscdcatkin_wsmkdirsrccdsrcgitclonehttps://github.com/uzh-rpg/rpg_trajectory_evaluation.gitgitclonehttps://githu 查看详情

ros学习笔记之——davis346calibration(代码片段)

之前博客《ROS实验笔记之——DAVIS346测试》已经对davis346相机进行了测试。接下来正式开始gan,先看看如何做calibration官方给的标定在(rpg_dvs_ros/README.mdatmaster·uzh-rpg/rpg_dvs_ros·GitHub)这里面有关于dvs的校正。由于davis有... 查看详情

ros学习笔记之——esvo复现及davis346测试(代码片段)

之前博客《学习笔记之——EventCamera调研》已经介绍过事件相机。本博文对科大开源的ESVO以及本团队购买的DAVIS346进行测试分析。本博文仅供本人学习记录用,不做任何商业用途~目录原理学习代码运行事件相机的driver安... 查看详情

ros学习笔记之——3dmapmerge(代码片段)

之前博客《ROS实验笔记之——基于cartographer的多机器人SLAM地图融合》已经实现了2Dmapmerge,也做了大量这方面的demotwo基于两个turtlebot2的多机器人SLAM地图融合本博文看看3dmapmerge方面的资料首先呢有CCM-SLAM(https://github.com/VI... 查看详情

ros实验笔记之——evo(代码片段)

...eventcamera仿真(dvsgazebo)》介绍了DVS的gazebo仿真。博客《ROS学习笔记之——ESVO复现及DAVIS346测试》介绍了ESVO以及事件相 查看详情

ros学习笔记之——messagefilters的应用(代码片段)

message_filters用于对齐多种传感信息的时间戳,对齐时间戳有两种方式,一种是时间戳完全对齐:ExactTimePolicy ,另一种是时间戳相近:ApproximateTimePolicymessage_filters作用是:同时订阅并发布话题时间同步... 查看详情

ros实验笔记之——davis346测试(代码片段)

之前博客《ROS学习笔记之——ESVO复现及DAVIS346测试》介绍了dvs驱动的安装。本博文对到手的时间相机进行测试。运行命令roslaunchdvs_rendererdavis_mono.launch但是运行的时候出现报错[WARN][1632472696.858249337]:Cameracalibrationfile/home/kwanwaipang/.r... 查看详情

ros学习笔记之——msckf(代码片段)

原理精度方面,MSCKF应该与graphoptimazation差不多,但是其对算力要求没有那么高~http://www.xinliang-zhong.vip/msckf_notes/#header-n1369DemoMSCKF_MONOhttps://github.com/daniilidis-group/msckf_mono运行此包时,注 查看详情

ros学习笔记之——基于已有的rosbag重新录制rosbag(代码片段)

首先通过下面命令查看当前rosbag的topicrosbaginforslidar-outdoor-gps.bag此处把tf去掉rosbagrecord/imu/odom_scout/fix/front_scan/heading/rslidar_points/tf_static但在执行前还需要执行rosparamsetuse_sim_timetruerosparamgetuse_sim_time运 查看详情

ros实验笔记之——基于prometheus的无人机运动规划(代码片段)

本博文基于Prometheus项目来学习无人机的运动规划。关于该项目的配置可以参考《ROS实验笔记之——基于Prometheus自主无人机开源项目的学习与仿真》Demo演示基于2D-LiDAR的APF路径规划基于rgbdcamera的APF路径规划基于3D-LiDAR的Astar路径... 查看详情

ros学习笔记之——gazebo仿真(代码片段)

本博文是本人学习gazebo的学习记录。 Gazebo是一款3D仿真器,支持机器人开发所需的机器人、传感器和环境模型,并且通过搭载的物理引擎可以得到逼真的仿真结果。Gazebo是近年来最受欢迎的三维仿真器之一,并被选... 查看详情

ros实验笔记之——intelrealsensel515激光相机的使用(代码片段)

最近实验室购买了IntelRealsensel515相机。本博文记录使用过程~ 驱动安装先到官网安装驱动:https://github.com/IntelRealSense/realsense-roshttps://github.com/IntelRealSense/realsense-ros安装realsense2_camerasudoapt-getinstallros-melod 查看详情

蓝桥ros机器人之现代c++学习笔记7.3期物(代码片段)

学习了如下程序://futureexample#include<iostream>//std::cout#include<future>//std::async,std::future#include<chrono>//std::chrono::milliseconds//anon-optimizedwayofcheckingforprimenum 查看详情

蓝桥ros机器人之现代c++学习笔记7.4条件变量(代码片段)

学习如下代码://condition_variableexample#include<iostream>//std::cout#include<thread>//std::thread#include<mutex>//std::mutex,std::unique_lock#include<condition_variable>//std 查看详情

ros仿真笔记之——基于rrt_exploration的单个机器人自主探索建图(代码片段)

...文已经介绍过机器人exploration以及多机器人SLAMmapmerage《ROS学习笔记之——多机器人探索环境》《ROS仿真笔记之——基于gazebo的多机器人探索环境仿真》《ROS仿真笔记之——多移动机器人SLAM地图融合》《ROS仿真笔记之——移动机... 查看详情

ros进二阶学习笔记--关于rospy和parameters(代码片段)

...作paramhttp://wiki.ros.org/rosparam -- ROSTool之rosparam用法ros进阶学习笔记(24)--关于rospy和parameters进行rospy编程时,需要用到parameter,但如何灵活用好它,还需进一步学习总结。节点程序如何声明parameter,是global... 查看详情

ros进二阶学习笔记--关于rospy和parameters(代码片段)

...作paramhttp://wiki.ros.org/rosparam -- ROSTool之rosparam用法ros进阶学习笔记(24)--关于rospy和parameters进行rospy编程时,需要用到parameter,但如何灵活用好它,还需进一步学习总结。节点程序如何声明parameter,是global... 查看详情

蓝桥ros机器人之现代c++学习笔记2.4控制流(代码片段)

ifconstexpr#include<iostream>template<typenameT>autoprint_type_info(constT&t)ifconstexpr(std::is_integral<T>::value)returnt+1;elsereturnt+0.001;//atcompilingtime//intprin 查看详情