1 搭建
1.1安装场景
使用3*3白色长挡板构建场地,然后分别在左上角放置长为20cm的白色短挡板和右下角围成正方形。
整体场地长:约130cm
整体场地宽:约130cm
1.2myAGV安装myCobot280Pi
用六角扳手将这四颗m4*8内六角螺丝拆卸f下来。
将myCobot 280Pi机械臂的X轴对应的正确方向进行安装,并拧上四颗m4*8固定280Pi。
用六角扳手将这四颗m4*8内六角螺丝重新安装上去。
1.3安装摄像头和吸泵
让机械臂回到零位,摄像头安装在六轴零位右旋转10°,此时摄像头平行于地面,吸泵没有方向要求,分别用乐高键安装在机械臂末端。
Grove口连接吸泵,根据引脚定义,另一端依次连接树莓派的GND、5V、21、22;M5版本连接GND、5V、2、5。摄像头的USB线和AGV的DC电源端接入机械臂接口。
将吸泵放入右侧弹仓,将杜邦线和吸泵线进行整理,不能遮挡激光雷达。否则会影响导航功能。
2 知识环境
2.1 OpenCV简单使用
2.1.1 什么是OpenCV
openCV全称是Open Source Computer Vision Library。是Intel(英特尔)公司开源计算机视觉库,它有一系列C函数和C++类构成,实现了图像处理和计算机视觉方面的很多通用算法。
2.1.2 OpenCV的安装与使用
pip install opencv-python
pip install opencv-contrib-python
简单使用
import cv2
def openCamera():
print('opencv版本',cv2.__version__)
print("键盘ESC退出")
cap = cv2.VideoCapture(0) # Linux
# cap = cv2.VideoCapture(1) # Windows
while cap.isOpened():
sucess,frame = cap.read()
if sucess:
cv2.imshow("frame",frame)
if cv2.waitKey(10)==27:
break
cap.release()
cv2.destroyAllWindows()
if __name__=="__main__":
openCamera()
2.2 校准摄像头
详情请查看 2.8.2 知识准备章节 中的校准摄像头部分内容。
3 myAGV建图导航功能
3.1Gmapping建图
3.1.1 打开slam激光扫描launch文件
打开小车后,打开控制台终端(快捷键Ctrl+Alt+T),在命令行中输入以下指令:
cd myagv_ros
roslaunch myagv_odometry myagv_active.launch
注意:在开启launch文件之前,请先将小车放置在需要建图环境中的一个合适起始点位上,因为开启launch文件将会开启小车的IMU传感器及odom里程计,人为的移动小车将造成小车建图失真。
3.1.2 打开gmapping建图launch文件
重新打开一个控制台终端,在命令行中输入以下指令:
cd myagv_ros
roslaunch myagv_navigation myagv_slam_laser.launch
3.1.3 打开键盘控制文件
重新打开一个控制台终端,在终端命令行中输入:
cd myagv_ros
roslaunch myagv_teleop myagv_teleop.launch
方向键:
按键 | 方向 |
---|---|
i | 前进 |
, | 后退 |
j | 向左运动 |
l | 向右运动 |
u | 逆时针旋转 |
o | 顺时针旋转 |
k | 停止 |
3.1.4 开始建图
现在小车可以在键盘的控制下开始移动了,操控小车在所需建图的空间内转一圈吧。与此同时,可以看到在Rviz空间里我们的地图也会跟着小车的移动一点点的把地图构建出来了。 注意:在用键盘操作小车的时候,确保运行myagv_teleop.launch文件的终端是当前选中的窗口,否则键盘控制程序无法识别键盘的按键。
3.1.5 保存所构建的地图
再打开一个新的控制台终端,在命令行中输入以下指令,用来保存小车扫描完成的地图:
rosrun map_server map_saver
运行成功后终端显示如下:
这里可以看到我们画了个红圈圈,只是地图保存后生成的两个文件,分别为 map.pgm 和 map.yaml。这两个文件默认会保存在家目录。在同一个终端内输入 cd 则会进入我们的家目录,再输入 ls 可以看到在家目录下生成的地图文件已经生成好了。
3.2导航
3.2.1 复制地图文件到项目文件夹对应的位置
- 点击桌面上的File system图标打开文件管理器,点击右侧的“ubuntu”进入/home/ubuntu 目录
- 可以看到之前我们建好的地图就保存在这个路径下,选中这两个文件
- 单击右键,点击Copy复制这两个文件
点击桌面上的File system图标打开另一个文件管理器进入如下路径,将刚才复制的地图文件粘贴到该路径下:
/home/ubuntu/myagv_ros/src/myagv_navigation/map/
3.2.2 修改launch文件
- 打开/home/er/myagv_ros/src/myagv_navigation/launch/路径下的 navigation_active.launch文件
- 将navigation_active.launch文件"map_file" 的“default”路径名替换成我们自己建图的文件名 map.yaml,例如下面
<arg name="map_file" default="$(find myagv_navigation)/map/map.yaml"/>
3.2.3 运行launch文件
- 打开小车后,打开控制台终端(快捷键Ctrl+Alt+T),在命令行中输入以下指令:
cd myagv_ros
roslaunch myagv_odometry myagv_active.launch
- 再打开一个控制台终端(快捷键Ctrl+Alt+T),输入如下指令:
cd myagv_ros
roslaunch myagv_navigation navigation_active.launch
- 可以看到开启了一个Rviz仿真窗口。
注意:小车的初始位置最好放置到我们建图时小车的出发位置
若Rviz界面的小车和实际小车对应不上,点击顶部工具栏的“2D Pose Estimate” 进行调整,使得Rviz界面的小车和实现的小车可对应上,调整后进行导航。
- 点击顶部工具栏的“2D Nav Goal”
- 点击地图上我们想要到达的点位,小车便会向着目标点位出发,同时还可以在rviz中看到起点到目标点位间有一条小车的规划路径,小车会沿着路线运动到目标点位。
4 复合机器人套装整体流程
4.1 myAGV
在启动前确保其他终端都关闭,并把小车移动到建图时小车起始位置,然后运行下面这三个文件
#终端1 激光雷达、里程计启动
roslaunch myagv_odometry myagv_active.launch
#终端2 navigation导航启动
roslaunch myagv_navigation navigation_active.launch
#终端3 socket启动并得到当前网络的ip地址和端口
cd myagv_ros/src/simple_navigation_goals/scripts/
python agvto280_socket_server.py
4.2 myCobot 280Pi
在myCobot 280Pi中运行python脚本,修改python中socket的ip地址和端口,对应agv的ip和端口
client_socket.connect(('192.168.123.126',9000))
然后运行python脚本
cd ~/Composite-robot-Kit
python 280pi_socket_client.py
等待机械臂发送指令后,就能完成流程: 1.myAGV定点导航 2.myAGV二维码导航 3.myCobot二维码识别 4.myAGV定点导航 5.机械臂放取。