参数标定¶
相机内参标定¶
参数说明¶
相机内参(英文:camera intrinsics),指相机自身内在的焦距、中心距、畸变等参数,与相机的安装位置无关。
标定步骤¶
- 准备一张棋盘格,平整放置。
- 准备好已安装bito标定软件的电脑及需要标定内参的相机(带镜头)。
- 根据相机铭牌信息在home/yugong_ws/src/yugong/yugong/launch/文件夹下的cameracalibrator.launch文件中更新相机序列号、相机分辨率(2448*2048 用于50S5M,1024*1024用于13Y3M),设置采样点数量为120,并更新韩信的IP地址,点击保存。
- 打开命令行,运行以下命令。
$ flycap
- 相机指示灯显示为绿色,跳出一个弹窗,弹窗中相机可以显示周围环境信息。
- 让相机可以看到棋盘格,调节镜头和焦距直至棋盘格中的黑白边分界线在远距及近距情况下都能清晰地被辨别,之后将镜头上的螺丝适度拧紧以固定焦距。
- 在之前打开的终端中输入以下命令(“Ctrl+C”)关闭flycap。
$ ^C
(如果在已装配好并连接相机的yugong上标定内参,需kill掉相机相关节点, 具体做法为: rosnode kill /yg…/pg_…(一共四个节点)). 8. 在命令行中,输入以下命令。
$ roslaunch yugong cameracalibrator.launch
- 开始采集棋盘格中的数据点,尽可能在各个方向及角度采集数据点,在采集到期望数量的数据点后,可以在终端中看到数据点不再增加。
- 点击“Calibrate”,页面变成灰色,等待一段时间,至页面重新变为可以交互。
- 在页面可以重新交互后,用相机查看棋盘格子,看lin下的数值,若小于1则点击“save”,待页面由灰色重新变为可以交互时,点击“commit”,窗口自动关闭,然后重复步骤7关闭之前启动的程序;若大于1,请重新采集数据点进行标定(注意:在此操作之前,需保证标定用的电脑与韩信连接在同一个WIFI下)。
- 检查:进入数据库检验相机内参标定参数是否上传,具体做法为按顺序运行以下命令(请按照以下的命令全部输入,包括标点符号,192.168.XXX.XXX为韩信IP地址):
(1)在命令行中,输入以下命令:
$ mysql -u root -h 192.168.XXX.XXX -p
(2)在命令行中,输入密码:bitorobotics
(3)在命令行中,输入以下命令:
$ show databases;
$ use camera_info_db;
$ select * from camera_info;
(4)查看相机序列号和对应的时间戳是否为标定时的相机序列号和时间戳。
(5)在命令行中,输入以下命令:
$ exit
温馨提示¶
- 棋盘格须一直保持平整放置,不能被折叠
- 使用相机/镜片后请及时盖上盖子(防止感光芯片被损坏)
- 当在数据库中没有查询到相机内参,但相机内参已存储在本地时(在文件夹home/yugong_ws/src/yugong/yugong/data/camera_info/,找到对应的相机序列号文件(如pg_17121609.yaml)),需手动将此文件上传至数据库,具体做法为:
(1)在命令行中,输入以下命令:
$ cd yugong_installer/bito_mysql/camera_info_db(2)紧接着输入以下命令(下面的pg_16492813为相机序列号,192.168.XXX.XXX为韩信IP地址):
$ python insert_data.py pg_16492813 192.168.XXX.XXX
- 若是摄像头拍摄程序在采集数据点时长时间卡住,可在命令行输入以下命令(“Ctrl+c”)关闭摄像头,接着重复步骤4观察是否正常,观察USB接口是否松动,确认正常后可从步骤7继续。
$ ^C
相机外参标定¶
参数说明¶
相机外参(英文:camera extrinsics),指相机光学中心所在机器人坐标系下的相对位置。
标定步骤(若未更新外参标定的软件代码,则只需步骤1、2)¶
- 将蓝蚂蚁机器人用手柄遥控到二维码地毯上,并精准停到标线内,前后轮对准刻度线。建议让机器人从地毯的侧面或前面驶入,避免轮子压到二维码区域,影响精度。
- 将贴有标识二维码的货架摆放的二维码地毯上,货架腿精确摆放在四个方框中,标识二维码正对前视摄像头。
- 打开命令行1,运行标定脚本。
$ roslaunch yugong blue_ant_bring_up.launch
- 打开一个命令行2。
$ rqt_image_view
显示图片后点击图片红色框处选择/camera1/image这个话题,如下图所示
- 打开命令行3
$ rostopic echo /ygxxxxxx/apriltag/detections_servo
此时可以看到图像,识别到的二维码会显示在屏幕上
- 打开命令行4,(pg_123124中的数字是前置相机序列号,int_data里的[10]是百分之10的亮度值,这个值是0到100间。越大越亮,)
$ rosservice call /ygxxxxxxx/pg_123124/set_cam_param "param_name: 'brightness' id: 0 param_flag: [3] double data: [0] int_data: [10]"
- 打开命令行5(或ssh到机器人上)。
$ roslaunch foot_eye_calibrator foot_eye_calibration.launch
- 检查标定数据。
$ roscd yugong/data/tag_map
$ vim cam.txt
对于蓝蚂蚁机器人,正确的摄像头参数约为下框。
cam_id: 0 extrinsics: -1.74 -1.74 0.71 -0.91 0.01 0.68
cam_id: 1 extrinsics: -1.20 1.32 -1.26 -0.71 0.01 0.32
- 重启机器人。
蓝蚂蚁运动参数标定¶
参数说明¶
运动模型(英文:motion model),指机器人的体速度与各驱动电机转速的映射关系。对于蓝蚂蚁机器人所配备的麦克纳姆轮底盘,共有六个参数(3个控制参数,3个里程计参数)需要标定。
标定配件¶
卷尺。
标定步骤¶
- 将蓝蚂蚁机器人开到开阔空间。
- 修改
~/yugong_ws/src/deploy_tool/motion_test/launch/open_loop_pub_vel.launch中的参数,使得机器人开环前进/后退/横移/原地旋转一定距离或角度。其中,平移的速度单位为m/s, 原地旋转的速度单位为rad/s, 运动时间单位为s标定的顺序没有要求。 - 测量机器人实际运动的距离和角度,计算相差比例,并得到新的运动模型参数。
- 将新的运动模型参数通过
~/yugong_ws/src/bito_ib_lib/launch/ib_calibration.launch, 写入IB。 - 重复步骤2~4,直至开环运行的距离或角度与控制值的误差在可接受范围内。至此,3个控制参数标定完毕。
- 将机器人摄像头遮挡住,或将机器人驶离二维码区域。
- 清零融合的里程计数值
$ rosservice call /$ROBOT_NAME/set_pose xxxx
- 用手柄控制机器人前进/后退/横移/原地旋转一定距离或角度,读取融合的里程计数值
$ rostopic echo /$ROBOT_NAME/odom/filtered
- 根据读取值与真实值的比例,计算新的里程计参数。
- 将新的运动模型参数通过
~/yugong_ws/src/bito_ib_lib/launch/ib_calibration.launch, 写入IB。 - 重复步骤7~10,直至手柄控制运行的距离或角度与里程计值的误差在可接受范围内。至此,3个里程计参数标定完毕。
- 重启机器人。
叉车运动参数标定¶
参数说明¶
运动模型(英文:motion model),指机器人的体速度与各驱动电机转速的映射关系。
标定配件¶
卷尺
launch文件说明
1.open_loop_pub_vel.launch vx表示线速度, wz表示角速度。
2.open_loop_pub_motor.launch speed表示行走电机转速参数,一般前进设置为500,停止设置为0. angle表示舵轮转动角度,转90度为3000,摆正为0.
标定步骤¶
- 将自动叉车开到开阔空间。将navigator切换到calibration branch,打开一个命令行窗口,运行roslaunch navigator_ros lidar_forklift_navigator_ros.launch。
- 修改
~/yugong_ws/src/navigator/navigator_ros/launch/tool_launch/tool_tasksimplex_singleline.launch中的参数数值<arg name=”distance” default=”8”/>, 其中正值代表前进,负值代表后退。
打开一个命令行窗口,运行roslaunch navigator_ros tool_tasksimplex_singleline.launch, 使得机器人开环直线前进。
打开一个命令行窗口,通过``rosservice call /yg00…/request_finish_singleline_calculation “command: 0 owner: ‘’” `` 可以让小车回退回来。
如果运行轨迹横向偏移误差不在纵向距离的2%以内,通过修改 ~/yugong_ws/src/bito_ib_lib/launch/ib_calibration.launch 的 /_param_default_forklift_steer_offset ,并在一个命令行中,重新运行roslaunch bito_ib_lib ib_calibration.launch。
再次运行上述步骤,直到使得叉车轨迹为直线。
- 修改
~/yugong_ws/src/deploy_tool/motion_test/launch/open_loop_pub_vel.launch中的参数,使得机器人开环原地旋转。
目测叉车运动的旋转中心,通过调节 ~/yugong_ws/src/bito_ib_lib/launch/ib_calibration.launch 的 /_param_default_forklift_steer_scale ,并在一个命令行中,重新运行roslaunch bito_ib_lib ib_calibration.launch。
再次运行上述步骤,直到使得叉车旋转中心为两被动轮连线中心处,误差容忍范围在2cm以内。
4. 修改 ~/yugong_ws/src/deploy_tool/motion_test/launch/open_loop_pub_vel.launch 中的参数,并运行该launch文件,使得机器人开环直线前进一定距离,速度单位为 m/s ,运动时间单位为 s ,测量机器人实际运动的距离。通过调节 ~/yugong_ws/src/bito_ib_lib/launch/ib_calibration.launch 的 /_param_default_forklift_model_vel_cmd_coef_a ,并在一个命令行中,重新运行roslaunch bito_ib_lib ib_calibration.launch。
反复运行上述步骤,使得叉车前进的距离与控制量的误差在2%以内。
5. 修改 ~/yugong_ws/src/deploy_tool/motion_test/launch/open_loop_pub_vel.launch 中的参数,并运行该launch文件,使得机器人开环原地旋转一定角度,速度单位为 rad/s ,运动时间单位为 s ,测量机器人实际旋转的角度。通过调节 ~/yugong_ws/src/bito_ib_lib/launch/ib_calibration.launch 的 /_param_default_forklift_model_vel_cmd_coef_b , 并在一个命令行中,重新运行roslaunch bito_ib_lib ib_calibration.launch。
反复运行上述步骤,使得叉车原地旋转的角度与控制量的误差在2%以内。
6. 修改 ~/yugong_ws/src/deploy_tool/motion_test/launch/open_loop_pub_motor.launch 中的参数speed设置为500,angle设置为0,使得机器人开环直线前进。目测叉车运动的轨迹曲率,通过调节 ~/yugong_ws/src/bito_ib_lib/launch/ib_calibration.launch 的 /_param_default_forklift_steer_odom_offset 。
反复运行上述步骤,使得叉车在rviz中的轨迹为直线,横向误差容忍范围在2%以内。
7. 修改 ~/yugong_ws/src/deploy_tool/motion_test/launch/open_loop_pub_motor.launch 中的参数speed设置为500,angle设置为3000,使得机器人开环原地旋转。通过调节 ~/yugong_ws/src/bito_ib_lib/launch/ib_calibration.launch 的 /_param_default_forklift_steer_odom_scale 。
反复运行上述步骤,使得rviz中的叉车以起始点为圆心,旋转半径为0,进行旋转,圆心容忍偏移范围在10cm以内。
- 将navigator切换回master branch, 重启机器人。
注:标定机器人旋转和前进时,考虑现场测试场地的大小,每次运行任务时,应该把车开到一个开阔的位置执行。




