Step 1 :让机器⼈站起来并保证项⽬能够正常⼯作

  • 短按+⻓按电源,开启前部电源(确保⼀格以上);
  • 短按+⻓按开启上位机,短按开启下位(关机顺序相反)
  • 在机器⼈⾝上插上遥控器usb接收器,开启遥控器
  • 等机器⼈背屏进⼊DEFAULT模式后,按LT+RT+START使得机器⼈站⽴;
  • 重新插拔机器⼈的双⽬摄像头接线,保证ZED work

Step 2 : 连接机器⼈

ssh nvidia@192.168.50.22X

x为机器人编号

随后可以进⼊机器⼈上的ubuntu系统,对机器⼈的调试都在ssh环境中进⾏。

Step 3 : 先修改机器⼈的内参数据

在当前⼯作空间下,找到
robocup_ws/core/src/dvision/src/camera/source/zed_camera.cpp
⽂件,确认camera_resolution的格式,是1080还是HD720还是其他?记住它!

在机器⼈ubuntu系统中,找到
/usr/local/zed/settings,⾥⾯有SN.conf⽂件。

如果此时有不同编号的conf⽂件,怎么确定哪个⽂件才是正确的?可以跑
/usr/local/zed/samples
下⾯的tutorial-Hello ZED,不过需要⾃⼰编译⼀下
然后运⾏会在终端输出当前ZED的serial number,就可以找到对应的SN.conf⽂件。打开对应的SN.conf⽂件,根据刚才看到的camera_resolution,把对应的内参数据记住,fx,fy,cx,cy还有⼏个畸变系数。

重新回到⼯作空间,找到
robocup_ws/core/src/dconfig/1/division/camera.yml,这个就是机器⼈相机的配置⽂件(不⼀定要1,但是我们默认使⽤1这个⽂件夹,后续标外参的时候需要机器⼈编号也输⼊1即可)

(1)需要修改width height frameRate根据zed相机分辨率和帧率来改,如果不知道,可以打开⼀个终端运⾏ZED_Explorer,应该可以查看相关数据,如果不全,上⽹搜搜查询⽅法

(2)把刚刚的内参数据填⼊到这个yml⽂件中,即projection下的fx fy cx cy和distcoeff矩阵,这个discoeff是畸变系数和⼀些数据,SN.conf⽂件应该只有⼀部分,ZED_Explorer也能看到⼀部分,需要对应填进去,具体的discoeff矩阵可以问问ai。

⾄此,内参处理完。

Step 4: 外参标定过程

摊开那个标定⽩布,展平,然后如图所⽰,把机器⼈放在细线交叉点(红圈处,⾯朝⽩布),注意图中右上⻆那个图案需要被遮起来 image 然后打开新的终端运⾏calib_ext,终端提⽰时输⼊机器⼈位置A,机器⼈编号1(如果没有请忽略),机器⼈应该会⾃⼰运转;

⼤概运⾏五分钟左右,即可关闭tmux的两个终端;

找到最外层的
~/dancer-camera
⽂件夹,会看到⽂件名为 bot1_ext_A.txt (外参标定数据)与
bot1_in.txt (去畸变后的内参矩阵),这两个⽂件,把它下载到⾃⼰电脑上。

接着在
robocup_ws/core/src/dconfig
下找到⼀个名为matlab的⽂件夹,把这个⽂件夹也⼀同下载到你的电脑⾥。

打开你电脑上的matlab,导⼊这个⽂件夹,以及 bot1_ext_A.txt (外参标定数据)与 bot1_in.txt (去畸变后的内参矩阵)这两个⽂件,在运⾏之前,需要改⼀下main.m程序,如下图把lb和ub数组⾥z这⼀列都改成50,会有更好地效果。然后点击运⾏,等待⼀会⼉你就能看到终端输出了⼀个外参矩阵,然后会出现⼀张图,如果图中的红点分布⾮常集中,且全部在蓝点附近,则效果⽐较好,如果没有,则要思考哪⾥出现了问题。 image 把matalb终端⾥⽣成的外参矩阵复制粘贴到刚刚的
robocup_ws/core/src/dconfig/1/division/camera.yml,替换原有的extrinsic parameters矩阵,就在最底下,应该很清楚能够看到。

Step 5 : 检验标定效果:

在
robocup_ws/core/src/dvision/src/detector/ball_detector.cpp
这个⽂件,找到这⼀⾏

// std::cout<<ball_image<<"---"<<ball_field<<std::endl;

取消注释,保证终端可以输出球的距离,然后开个终端运⾏
roslaunch dvision default.launch

注:应该还有两个dbehavior包和dancerio的launch⽂件要开,具体可以问下在实验室的学⻓,然后把机器⼈⾯朝球,应该就可以看到球的距离在终端输出,拿个卷尺量⼀量看看x,y方向上误差大不大