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: 外参标定过程
摊开那个标定⽩布,展平,然后如图所⽰,把机器⼈放在细线交叉点(红圈处,⾯朝⽩布),注意图中右上⻆那个图案需要被遮起来
然后打开新的终端运⾏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,会有更好地效果。然后点击运⾏,等待⼀会⼉你就能看到终端输出了⼀个外参矩阵,然后会出现⼀张图,如果图中的红点分布⾮常集中,且全部在蓝点附近,则效果⽐较好,如果没有,则要思考哪⾥出现了问题。
把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方向上误差大不大