ROS小车的制作原理

任务描述:
1.ROS小车识别ar标志
2.ROS小车移动到ar标志前
3.ROS小车巡线

制作原理:
ROS小车识别ar标志:

调用ROS小车自带的jubot_ar_track.launch文件对ar标志进行识别

上图为识别的大致效果
从上图可知,小车原地自转去识别ar标志相当于ar标志绕y轴旋转。

ROS小车移动到ar标志前

通过subscribe /visualization_marker这个topic我们可以得到ar标志在camera_link下的位姿信息。但是我们需要得标志在小车坐标系下的位姿信息,所以需要进行tf坐标变换。

我们新建了一个静态坐标系base_link1,位于world坐标系上方0.5,姿态和world相同和camera_link坐标系在同一个高度。

ar_marker_7为标志
去除name的Rviz下的坐标图
我们将ar_marker_7y轴反向旋转90°,z轴正向旋转180°,那么经上图推算它的姿态会和world,base_link1大致相同。

假设在没有误差的情况下,如果我们将ar标志和小车正对,那么经过tf坐标变换后ar_marker_7的姿态所表示的欧拉角在base_link1的坐标系下表示为0。
那么在小车自传识别ar标志时相当于绕y轴旋转,我们可以通过pitch角的正负,判断小车在标志的左边还是右边。

最后通过标志的姿态信息,让小车先移动y在移动x逼近标志。
由于存在误差,小车在沿着y轴移动时不会在标志的正前方停下,这个时候我们采用逼近策略,线速度为0.2distance,角速度为0.2atan(y,x)逼近 标志。

巡线

首先对图像进行掩膜处理。然后将RGB图像转化为HSV图像,再读取launch文件中设置的HSV的最大值和最小值,二值化图像。最后对每一层的像素进行筛选,如果像素不为0的长度大于10,那么证明找到黑线,对不为0的像素的x位置坐标求平均值,并和图像位置的中间值比较,来判断向左移动还是向右移动。


二值化处理的图像
原图像

调参

使用dynamic_reconfigure.server动态调参

图像中找一点读取HSV值进行调参



其他的一些操作
多线程操作:
由于python中没有spinonce函数所以开辟一个子线程来运行spin函数

c++中调用execlp(“roslaunch”, “roslaunch”, “ROS_project”,“line_following.launch”, NULL);命令运行launch文件。

巡线部分学习自https://www.bilibili.com/video/BV1b5411g7hr?p=44

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值