0
点赞
收藏
分享

微信扫一扫

无人驾驶小车调试笔记(五)-- 命令行通信

A邱凌 2022-04-23 阅读 37

        简介:在这一章节中,我们需要安装有相关环境(虚拟机方式为例,需要安装有ROS系统,安装过程请参考无人驾驶虚拟仿真教程第2节)的电脑一台,组装好并经过初始化设置的无人驾驶小车一台,路由器一台,主要学习通过脚本或者命令行的方式来与小车进行交互,交互内容包括视频流获取、小车控制、tof传感器数据获取、按钮事件获取、车灯控制等内容。

注:以下命令以duckiebot1为例


目录

1、确认网络连接配置

2、通过rqt工具查看小车摄像头视频流

3、通过Duckietown shell 实现控制小车移动

4、通过ROS指令查看图像信息

5、通过ROS指令控制小车行走

6、通过ROS指令查看tof传感器数据

7、通过ROS指令监听顶部按钮事件

8、通过ROS指令控制车灯

1、确认网络连接配置

电脑与小车连接同一网络,虚拟机网络类型应该为桥接网络,桥接网卡为电脑上网的网卡,具体配置如下:

VMware安装完成后,会自动安装虚拟机的网络配置软件--虚拟网络编辑器,在windows开始菜单搜索可以找到(也可以在VMware窗口中通过 编辑-->虚拟网络编辑器 打开):

在这里我们可以看到主机模式(VMnet1)和NAT模式(VMnet8)网络配置,点击右下角【更改设置】:

可以看到桥接模式网络设置(VMnet0),默认是自动桥接,有多网卡的情况下,需要手动选择使用的网卡,我使用的是笔记本电脑,常用网卡是无线网卡,所以选择了电脑上的无线网卡,应用该设置并确定退出。

打开VMware,在虚拟机设置中修改网络适配器设置,配置如下:

保存设置开启虚拟机,打开终端测试是否可以ping通主机名,可以通就说明网络配置没有问题。

查询在线小车:

$ dts fleet discover


2、通过rqt工具查看小车摄像头视频流

rqt工具是ROS系统中的一个图形化开发工具,其中包含了数据绘图、计算图可视化、日志输出、图像数据查看等多种功能,我们查看小车摄像头视频流需要用到的是图像查看工具rqt_image_view。

要查看小车摄像头图像首先要告诉上位机小车的网络信息,同时后续数据交互,也需要告诉小车上位机的网络信息,这一步通过配置上位机环境变量来实现。

$ export ROS_MASTER_URI=http://duckiebot1.local:11311

$ export ROS_IP=192.168.27.4

ROS_MASTER_URI:ROS系统中roscore所在的主机地址以及服务端口,roscore在小车上部署,默认开启,服务电口11311;

ROS_IP:上位机与小车在同一网络的网卡ip地址

注:该配置每新开一个终端都需要执行一次,如果小车只有一台,也可以将环境变量写死,命令如下:

$ echo " export ROS_MASTER_URI=http://duckiebot1.local:11311">>~/.bashrc

$ echo " export ROS_IP=192.168.27.4">>~/.bashrc

$ source ~/.bashrc

配置完成后,在终端通过list命令查看小车上的默认启动的节点列表和节点发布订阅的话题列表,同时也可以使用对应节点或者话题的info命令查看详细信息。
$ rosnode list

$ rostopic list

小车摄像头节点(/duckiebot1/camera_node)发布了图像流话题(/duckiebot1/camera_node/image/compressed),在终端启动rqt图像查看工具:

$ rqt_image_view

后续开发调试过程中图像信息也可以通过同样的方式发布出来,用rqt_image_view工具来查看。


3、通过Duckietown shell 实现控制小车移动

在虚拟机内打开终端,输入命令:

$ dts duckiebot keyboard_control duckiebot1

等待系统开启一个带方向按钮的控制窗口,激活窗口,通过键盘上的↑↓←→键即可控制小车移动。

注:首次运行系统需要下载相关镜像,需要等待一段时间,后续再执行就可以直接开启了


4、通过ROS指令查看图像信息

上文中我们通过rqt_image_view工具查看了小车摄像头的视频流信息,我们也可以通过ROS指令来查看图像信息,首先执行rosnode list指令,可以查看系统中的节点列表:

摄像头对应/duckiebot1/camera_node,通过rosnode info nodename查看摄像头节点信:

节点信息主要包括发布话题清单,订阅话题清单,服务列表以及话题通信列表等内容,通过rostopic echo 查看指定话题消息:

$ rostopic echo /duckiebot1/camera_node/image/compressed

图像内容以数组的形式发布,不能直观的看出图像内容。


5、通过ROS指令控制小车行走

小车控制节点是/duckiebot1/wheels_driver_node,先查看节点信息

可以看到该节点订阅了两个话题:

* /duckiebot1/wheels_driver_node/emergency_stop [duckietown_msgs/BoolStamped]

* /duckiebot1/wheels_driver_node/wheels_cmd [duckietown_msgs/WheelsCmdStamped]

一个是急停话题,另一个是车轮控制话题,我们通过命令行发布车轮控制话题来直接控制小车行驶,

要发布或者查看某个话题,我们需要保证该话题类型在环境变量中注册过,duckietown_msgs/WheelsCmdStamped并不属于ros默认消息类型,所以需要先设置环境变量:

$ source ~/myros/catkin_ws/devel/setup.bash

然后发布车轮控制命令:

命令格式:rostopic pub -1 话题名称 话题消息类型 消息内容

消息内容中vel_left和vel_right是必须要的参数,数值大于0向前,小于0向后,等于0停止,转弯可以通过设置两个参数的差值来实现,-1表示该命令只发布一次。

输入命令时,话题名称、消息类型以及消息内容都通过table键自动补全,然后方向键控制光标到要修改数据的地方直接修改数据即可。

控制小车还可以通过另外一个话题来发布命令,那就是/duckiebot1/car_cmd_switch_node/cmd,该话题消息内容是小车控制的线速度和角速度,格式如下:

v代表线速度,正值向前,负值向后,omega代表角速度,正值向左,负值向右,发布该命令后,小车会根据指定的线速度和角速度换算出左右车轮需要的速度对小车进行控制。


6、通过ROS指令查看tof传感器数据

tof传感器对应的节点是/duckiebot1/front_center_tof_driver_node,查看该节点信息:

其中发布的/duckiebot1/front_center_tof_driver_node/range [sensor_msgs/Range]话题内包含检测到的距离数据,通过rostopic echo命令查看:

其中range的数据就是tof传感器检测到的距离,单位为米。


7、通过ROS指令监听顶部按钮事件

顶部按钮对应的节点是/duckiebot1/button_driver_node,查看该节点信息:

其中的/duckiebot1/button_driver_node/event [duckietown_msgs/ButtonEvent] 是按钮事件话题,通过rostopic echo 监听该话题后,按下按钮:

可以看到event数值0表示单击按钮,3表示按3秒以上,10表示长按10秒,因为长按事件的时间很不好把控,另外长按10秒默认配置是关机,所以我们可以利用单击频率来对按钮事件进行分析处理,比如单击一次停车,单机两次开始行驶等。


8、通过ROS指令控制车灯

车灯节点是/duckiebot1/led_emitter_node,查看该节点信息:

我们发现该节点没有订阅任何话题,所以无法通过话题命令对车灯进行控制,该节点对车灯控制是通过服务(ros services)提供的控制接口。

其中/duckiebot1/led_emitter_node/set_pattern是按照默认设定规则进行控制,默认设定规则都有字符串代码,例如:WHITE、RED、BLUE、GREEN、LIGHT_OFF等,另外还有一些复杂命令,可参考配配置文件,命令格式如下:

服务/duckiebot1/led_emitter_node/set_custom_pattern是用户自定义控制接口,命令格式如下:

主要参数说明:

color_list:颜色列表,应该是一个长度为5字符串的数组,5个元素依次控制左前灯,右前灯,左后灯,右后灯,最后一个元素无效,但是不能缺,颜色有以下七种选择:red、green、blue、yellow、pink、cyan、white

frequency:闪烁频率,默认为0,不闪烁

frequency_mask:长度为5的数组,元素为0或者1,如果frequency不为0,元素为1对应的灯会按frequency指定频率闪烁,元素为0的不闪烁。

上图表示控制左前灯红色,右前灯粉红色、左后灯绿色,右后灯黄色,都不闪烁

下图表示控制左前灯红色,右前灯白色、左后灯红色,右后灯白色,左前和左后灯以1Hz的频率进行闪烁

举报

相关推荐

0 条评论