ROS购物车第2部分。

系列文章:
8.我们从电话控制ROS控制,GPS节点
7.机器人本地化:映射,AMCL,房间地图上的参考点
6.带轮编码器的里程表,房间地图,激光雷达
5.我们在rviz和凉亭中工作:xacro,新传感器。
4.使用rviz和gazebo编辑器创建机器人仿真。
3.加速,更换相机,固定步态
2.软件
1.铁

继续微笑


根据上一篇文章的方案组装了“汉堡”,我们继续进行软件内容的研究。

由于我们正在收集已经完成的项目,因此在其中给出指示是合乎逻辑的。 他们在这里

一切都非常方便,您可以在同一地方从Raspbian Stretch + ROS + OpenCV下载现成的图像,并将其写入覆盆子的sd卡中。 (ROS Kinetic,OpenCV 3.4.1,是的,有一个更新的版本,但是有时候从源头收集所有东西最好还是随身携带)。

尽管如此,尽管方便,但我仍然必须稍微校正图像。 由于原来的图像有些令人不适的细节:

  • 没有GUI(图形界面)。 这并不是至关重要的,特别是对于ROS而言,但不是要成行,您需要在树莓派本身上校准相机,并查看相机(相机)如何传达色彩(更多内容在下面);
  • 即使您自己安装GUI,OpenCV程序集也不会在屏幕上显示图像。 显然在rosbots项目中,opencv是在没有此选项的情况下构建的。
  • 没有小拐杖(VNC,笔记文本编辑器,mc)。
  • 因此,重建了OpenCV以支持GUI中的图像输出(由openCV 3.4.3编译),安装了GUI,小拐杖。

最终的图片在这里 ,并将在此基础上做进一步的工作。

在树莓派上配置网络(Wi-Fi)和ROS-master


对于实验,我强烈建议您在Wi-Fi中使用单独的路由器。 为此,您只需在手机上创建一个接入点即可。 这是由于以下事实:许多数据包将通过wi-fi飞越,并且最好不要沉入一般流量中。

将映像上传到树莓sd卡后,配置网络。 初始网络设置如下:

interface wlan0 static ip_address=192.168.43.174/24 static routers=192.168.43.1 static domain_name_servers=192.168.43.1 

包含在/etc/dhcpcd.conf中

因此,您不能将软管连接到树莓上以更改所有内容,而只需创建一个具有悲哀名称的老板和密码1234554321的访问点。树莓派地址将为192.168.43.174。 除ssh外,您还可以通过VNC访问此地址:登录-pi,密码-123qweasdzxcV。

让我们配置ROS主机

对于那些还没有遇到过ROS(机器人操作系统)的人,请注意。 ROS主节点是中介,通过该中介,不同的节点在ros中进行通信(节点,服务等)。如果ros主节点未运行或运行在错误的地址,则节点之间将不会看到对方。

在我们的ROS系统中,该向导会自动从加载操作系统开始,而我们所要做的就是在相应的系统文件中为ROS向导指定IP地址。

如果尚未更改上面列出的网络设置,则无需进行任何配置。

否则,请编辑bashrc:

 nano ~/.bashrc 

在文件的最后,根据您的情况更正IP地址(两个):

 export ROS_MASTER_URI=http://192.168.43.174:11311 export ROS_HOSTNAME=192.168.43.174 

重新启动。

现在,当启动购物车上的终端时,输出将如下所示(或您在设置中指定的任何内容):

 For all slaves, "export ROS_MASTER_URI=http://192.168.43.174:11311" 

这意味着ROS主设备在指定的IP地址工作。

我们通过Wi-Fi控制手推车


我们将从一开始就检查节点是否对我们有用。

在终端:

 rosnode list 

输出将如下所示:

/ rosout
/ uno_serial_node

如果没有任何反应,请检查是否按照上述设置注册了ROS-master,是否将usb软管连接到arduino,重新启动。

检查后,运行负责移动的第一个节点:

 rosrun rosbots_driver part2_cmr.py 

*特殊的ros命令从rosbots_driver python包中启动part2_cmr.py文件

系统将通知该节点正在运行:



在这里您可以看到车轮的半径和车轮之间的距离已确定。 您可以固定这些值以及与robot.py文件中沿路径移动相关的其他值

 /home/pi/rosbots_catkin_ws/src/rosbots_driver/scripts/examples/coursera_control_of_mobile_robots/part2/full/controller 

因为part2_cmr.py本身没有这些参数。 打开第二个终端并输入rostopic列表:



在这里您可以看到主题/ part2_cmr / cmd_vel已经出现。 在本主题中,/ part2_cmr“侦听”其他节点将对它说些什么,并且取决于它们说什么,它们将控制运动。 可以使用命令来理解“听”的确切含义,而“说”的则不是。

 rostopic info /part2_cmr/cmd_vel 



在这里,您可以看到/ part2_cmr订阅者(已订阅)并正在收听该主题。

*您可以自己“说”主题上的某些内容,没有节点。

例如:

 rostopic pub -1 /wheel_power_left std_msgs/Float32 '{data: 1.0}' 

左轮向前转

 rostopic pub -1 /wheel_power_left std_msgs/Float32 '{data: 0.0}' 

停止左轮

 rostopic pub -1 /wheel_power_left std_msgs/Float32 '{data: -1.0}' 

滚轮背对背

 rostopic pub -1 /wheel_power_left std_msgs/Float32 '{data: -0.5}' 

向左转慢一点。

语法为:rostopic pub-希望在主题中发言,-1-一次性愿望,/ wheel_power_left-我们说的主题,std_msgs / Float32-语言(消息格式),“ {data:-0.5}”-我们说的是。

现在,运行将在主题/ part2_cmr / cmd_vel中讨论的人。 这将是键盘命令发送节点。

在不使用工作节点关闭上一个终端的情况下,运行另一个终端并输入:

 rosrun teleop_twist_keyboard teleop_twist_keyboard.py /cmd_vel:=/part2_cmr/cmd_vel 

*由于默认情况下主题/ cmd_vel中是发布,因此我们使用
/ cmd_vel:= / part2_cmr / cmd_vel,以便将消息倒入/ part2_cmr / cmd_vel。

控制节点已启动,您可以通过按键盘上的键进行骑行:



如果无法驾驶,或者车轮下面有轻微的吱吱声,则需要在节点运行的情况下在终端中按“ w”来提高速度。 可以通过旋转速度(“ e”按钮)进行相同(增大或减小)操作。 如果切换到另一个终端,如果控制按钮不起作用,则在具有运行节点的终端中也很重要。 控制终端中的“ k”按钮是停止按钮。

在另一个终端中,查看主题/ part2_cmr / cmd_vel:



现在,在主题/ part2_cmr / cmd_vel中,既有说话者又有听者。

在OpenCV上骑行


在去某个地方之前,您需要确保机器人可以通过键盘控制移动。 这里需要一个重要的说明。 在上面的示例中通过键盘进行控制时,向左旋​​转应对应于按j键,向右按l(拉丁文l),向前i,向后(逗号)。 如果您的情况并非如此,则旅行可能会有问题。 为了使一切恢复正常,有必要将从引擎驱动器到arduino腿上的电线对更改为arduino 4,5,6,7 arduino:4,5,以与6,7或4以及5,6和7互换。另一个取决于车轮旋转的位置。 您还可以通过沿以下路径调整arduino的代码来以编程方式执行此操作-/home/pi/gitspace/rosbots_driver/platformio/rosbots_firmware/examples/motor_driver/src/main.cpp

 #define M_LEFT_PWM 6 #define M_LEFT_FR 7 #define M_RIGHT_PWM 5 #define M_RIGHT_FR 4 

并使用以下命令在arduino上重新加载它:

 upload_firmware ~/gitspace/rosbots_driver/platformio/rosbots_firmware/examples/motor_driver 

让我们一起花吧

我们的园艺经验将是突出显示机器人将沿着其行进的地板上的线条,以确定其颜色。 默认情况下,机械手不会看到它。 作为一条线,您可以使用胶带(黄色)或胶带,也可以使用其他具有特定颜色和相当宽的颜色。 *透明胶带不太可能起作用,因为 很难与背景区分开。

让我们进入文件夹并运行脚本:

 cd /home/pi/rosbots_catkin_ws/src/rosbots_driver/scripts/rosbots_driver python bgr-to-hsv.py 

*注意! 如果使用rosbots的原始图像而不是我的图像,则此程序不存在。

将打开两个窗口:



这是HSV中的颜色范围。 什么是hsv,为何不选择rgb,请自己进行搜索。

h1,s1,v1-较低范围,h2,s2,v2-较高范围。

现在,您需要通过移动窗口中的滑块来选择一条在地板上有电气胶带(也许不是胶带而是胶带)的线路。 结果窗口中仅应保留胶带行:



胶带线异常为白色,其他所有线均为黑色。 这个结果是必要的。
记录,记住HSV范围的编号。 我的案子是56,155,40和136,255,255。 在机器人摄像头附近的不同光照条件下,HSV范围会有所不同。

在终端中输入ctrl + c关闭窗口,然后将HSV范围添加到follow_line_step_hsv.py文件中:

 cd /home/pi/rosbots_catkin_ws/src/rosbots_driver/scripts/rosbots_driver nano follow_line_step_hsv.py 

在行中:

 lower_yellow = np.array([21,80,160]) upper_yellow = np.array([255,255,255]) 

我们输入HSV范围的数字。

时间骑行

我们在端子1中启动电机节点:

 rosrun rosbots_driver part2_cmr.py 

在第二个终端中启动相机节点:

 sudo modprobe bcm2835-v4l2 roslaunch usb_cam usb_cam-test.launch 

在第三个终端中运行opencv节点:

 cd /home/pi/rosbots_catkin_ws/src/rosbots_driver/scripts/rosbots_driver python follow_line_step_hsv.py 

如果一切顺利,那么机器人将沿着这条线前进,并出现另一个窗口:



在该窗口中,电工胶带将带有红色圆圈标记。

该代码的一般含义是突出显示距相机一定距离的颜色段,绘制一个红色圆圈,然后转到该圆圈,尝试将其保持在中心。

最后,关于重要-关于猫和微笑


由于我们的目标是去找猫或微笑的人,所以我们将不得不在代码中使用更复杂的东西。 我们还将需要猫和微笑的人。 第二个现在更加困难:在这个困难而令人震惊的时间里,很少有人微笑。 因此,让我们从猫开始。

对于实验,适合脸部猫的照片。

在第一个终端中运行相机节点:

 cd /home/pi/rosbots_catkin_ws/src/rosbots_driver/scripts/rosbots_driver python pi_camera_driver.py 

在第二个端子中,电机节点:

 rosrun rosbots_driver part2_cmr.py 

在cat搜索节点的第3个终端中:

 cd /home/pi/rosbots_catkin_ws/src/rosbots_driver/scripts/rosbots_driver python follow_cat2.py 

手推车将逐渐移至猫:



现在您需要一个知道如何微笑的志愿者。 拍摄一个小国的鲜为人知的公众人物肖像。

在猫的搜索节点的第3个终端中,您可以关闭-ctrl + c,然后开始搜索鲜为人知的公众人物的微笑:

 python follow_smile.py 

手推车必须缓慢,难以置信地驶向一个鲜为人知的人的微笑:



正如许多人已经猜到的那样,我们运行的脚本使用Haar级联。 按照与沿直线行程相同的原理,突出显示所需区域的正方形,程序尝试通过移动机器人将其保持在中心。

不幸的是,尽管相机设置为320x240和15 Fps,但在树莓3b上的性能仍然令人望而却步。 延迟随着时间的增加而变得明显。 并非每只猫都能忍受。

如何改善呢?

尝试按照Adrian的建议(https://www.pyimagesearch.com/2017/10/09/optimizing-opencv-on-the-raspberry-pi/)重建经过优化的opencv? 使用外部PC资源进行图像处理? 尝试不压缩jpeg中飞向Haar处理程序的图像吗? 还有一个更大的减号-猫应该大并且在前面。 在A4纸上15厘米的距离。 从相机上移开时,猫已经变得无法辨认且无敌了。 将覆盆子单片眼镜以8倍放大率放在相机上吗?

PS:如果您尝试使用本文中给出的图像进行实验,那么您仍然可以骑在身体的不同部位,因此可以启动而不是使用cat节点:

 python follow_fullbody.py python follow_upperbody.py python follow_lowerbody.py 

脸或眼:

 python follow_face.py python follow_right_eye.py 

如果您对如何平稳地移开以免机器人洒茶以及对树莓派本身不进行操作感兴趣,请写下。

Source: https://habr.com/ru/post/zh-CN461131/


All Articles