1.机械臂
启动机械臂控制(选一个就好)
roslaunch vkarm_controller vkarm_controller.launch # 有gui
roslaunch vkarm_controller vkarm_new_controller.launch # 无gui
GUI机械臂控制
roslaunch vkarm_control_gui vkarm_control_gui.launch
启动机械臂服务
roslaunch vkarm_controller vkarm_control_bsp.launch
2.AR码
二维码识别
roslaunch vkarm_ar_markers vkarm_ar_pose_new.launch
3.语音技术
语音合成
roslaunch xf_mic_tts_offline xf_mic_tts_offline.launch
语音识别
roslaunch xf_mic_asr_offline xf_mic_asr_offline.launch
4.速度控制
启动底盘控制
roslaunch vkbot_bringup minimal.launch
5.建图
启动建图节点:
roslaunch vkbot_navigation vkbot_gmapping_rviz_demo.launch
roslaunch vkarm_controller vkarm_new_controller.launch
启动键盘控制:
roslaunch vkbot_teleop keyboard_teleop.launch
保存指令
rosrun map_server map_saver -f /home/vkrobot/test_map
6.导航
启动导航:
roslaunch vkbot_navigation vkbot_navigation_teb_rviz_test_demo.launch map_file:=/x/x(保存的地图)
查看位姿:
rostopic echo /amcl_pose # 查看位姿,运行后无需关闭,会自动刷新
7.代码
实战:家庭服务应用
- 建图
- 启动导航,记录起始点位姿(七个值,四个需修改),再通过键盘控制将机器人先后移动到要抓取的点位A、B,并分别记录它们的位姿到代码中。
- 关闭所有终端,启动语音技术,启动导航,启动机械臂,将机械臂调至初始或home位置,启动二维码识别,运行python程序,喊小薇小薇,任务开始。
可能会遇到的问题:
- control_gui启动后,点“开启定时器”,等几秒再去点“使能”,“使能”无法启动时点一遍它右边的disabled,在卡顿的过程中迅速连点几次“使能”,高概率可以成功启动(玄学)
- 导航加载地图文件后缀为yaml,而不是pgm。如果启动导航后没有加载地图,也没有小车,就去检查急停按钮是否释放
- 不可以手动移动机器人到A,B点,这样获取的位置不准确,此处无需调 rviz里的绿色箭头(2dpose)
- 运行python程序前记得调整2dpose,让红色(实际检测的)与黑色(地图)尽量匹配
- 语音关键词修改文件位置:/xf_mic_asr_offline/config/call.bnf,可用locate + call.bnf 命令找到他的路径,修改完后对应的代码也要修改哦!
- 若在夹取的过程中夹爪与桌子距离过近可以调(抓取的安全距离范围(x方向) 单位米)
- 若夹不准可以调(夹取药品的误差补偿系数 W_value=[0.0,0.01,-0.03])三个值分别代表x, y, z,调大小根据右手法则去理解
opencv 颜色识别
OpenCV是一个开源的计算机视觉库,可用于实时图像处理、计算机视觉、图像分析以及机器学习等各种领域。其主要功能包括图像和视频捕获、图像处理、计算机视觉、机器学习、视频分析、物体检测和跟踪等。
一、图像相关概念
图像的相关概念:
像素点:是最小的图像单元,一张图片由好多的像素点组成
像素:也就是图片的尺寸,例如500 * 338等
图像分辨率:指每英寸图像内的像素点数;分辨率越高,像素的点密越高,图像越逼真
二值图像:即图像上的每一个像素只有两种取值,为0或1(0代表黑,1代表白)
灰度图像:即图像上的每一个像素有0~255多种取值,只包含了一个通道的信息
彩色图像:即每个像素点由红(R)、绿色(G)、蓝(B)三个分量来表示,分量介于0~255
RGB模型
RGB在opencv中为BGR,即第一个通道是蓝色(B)分量,第二个通道是绿色(G)分量,第三个通道是红色(R)分量。
HSV模型
HSV是色度(Hue)、饱和度(Saturation)和亮度(Value)的简写
色度是色彩的基本属性,就是平时常说的颜色,例如红色,蓝色等;饱和度是指颜色的纯度,饱和度越高色彩越纯越艳,饱和度越低色彩则逐渐地变灰变暗,饱和度的取值范围是由0到100%;亮度是颜色的明亮程度,其取值范围由0到计算机中允许的最大值。
由于色度、饱和度和亮度的取值范围不同,因此其颜色空间模型用锥形表示,其形状如图所示。相比于RGB模型三个颜色分量与最终颜色联系不直观的缺点,HSV模型更加符合人类感知颜色的方式:颜色、深浅以及亮暗
LAB模型
Lab颜色模型弥补了RGB模型的不足,是一种设备无关的颜色模型,是一种基于生理特征的颜色模型。在模型中L表示亮度(Luminosity),a和b是两个颜色通道,两者的取值区间都是由-128到+127,其中a通道数值由小到大对应的颜色是从绿色变成红色,b通道数值由小到大对应的颜色是由蓝色变成黄色。其构成的颜色空间是一个球形,形式如图所示
不同颜色模型的不同效果:
二、opencv常用函数
Img = cv2.imread(‘img.jpg’) # 读取一张图片
capture = cv2.VideoCapture(0) # 打开笔记本内置摄像头,Linux里需要把0改成摄像头型号的名称
retval, image = capture.read() # 从摄像头中实时读取视频(即读取一帧图像)
cv2.imshow("Video", image) # 在窗口中显示读取到的视频
capture.release() # 关闭笔记本内置摄像头
cv2.destroyAllWindows() # 销毁显示摄像头视频的窗口
capture.isOpened() #判断摄像头是否被打开成功
cv2.waitKey() #等待用户按下任意键后 换成cv2.waitKey(5000)表示5s
读取摄像头示例:
import cv2
capture = cv2.VideoCapture(0) # 打开笔记本内置摄像头,在linux中为“/dev/ttyUSB0”等格式
while (capture.isOpened()): # 笔记本内置摄像头被打开后
retval, image = capture.read() # 从摄像头中实时读取视频
cv2.imshow("Video", image) # 在窗口中显示读取到的视频
key = cv2.waitKey(1) # 窗口的图像刷新时间为1毫秒
if key == 32: # 如果按下空格键 # 也可换成ord('k')
break
capture.release() # 关闭笔记本内置摄像头
cv2.destroyAllWindows() # 销毁显示摄像头视频的窗口
三、HSV颜色模型的使用
确定图像中的黄色区域,对图像进行二值化处理使用inRange函数多通道处理:
import cv2
import numpy as np
img = cv2.imread("duck.jpg") # 读取一张图片
cv2.imshow("img", img)
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower = np.array([26, 43, 46]) # hmin, smin, vmin
upper = np.array([34, 255, 255]) # hmax, smax, vmax
# 提前确定黄色的hsv范围
img_r = cv2.inRange(img, lower, upper)
cv2.imshow("img_r", img_r)
cv2.waitKey(0)
cv2.destroyAllWindows()
HSV颜色范围参考表:
四、与ros结合使用
要先启动这个,在运行python程序
roslaunch vkarm_cam.launch
人工智能边缘应用
宿主机操作docker images:显示docker镜像仓库docker run:创建并运行docer容器
DL workbench工作流程:
模型分析:
启动深度学习工作平台(DL Workbench)
1. 验证容器镜像,docker images
2. 运行:
切换至工作目录:cd ~/vkaibot_ncs/dl_workbench
运行启动脚本:./start_workbench.sh -IMAGE_NAME openvino/workbench -TAG latest
3.打开生成的端口链接即进入到工作平台
案例分析:物体检测
1.验证容器
docker images
2.启动容器
参数解释:
3.运行python程序
进入工作目录:
$ exportDISPLAY=:0$ cd /home/openvino/vkaibot_ncs/ov_workspace/demo/classification_demo
运行主程序(神经计算棒):
$ python classification_rs.py -m ./model/googlenet_v3.xml --label imagenet_slim_labels.txt