TogetherROS示例运行
接下来,我们就在安装配置好TogetherROS的旭日X3派上,试一试系统自带的一些例程,确保整个系统已经可以正常运行。
通信测试
先来测试一下TogetherROS系统的通信功能。
我们需要启动两个终端,分别连接到旭日X3派上,并分别按以下命令配置环境变量。
终端1:
$ source /opt/tros/local_setup.bash
$ ros2 run examples_rclcpp_minimal_publisher publisher_member_function
终端2:
$ source /opt/tros/local_setup.bash
$ ros2 run examples_rclcpp_minimal_subscriber subscriber_member_function
接下来,我们用ros2 run命令运行节点:
运行第一个例程:
这是一个用C++写的最小化的发布者程序,其中节点叫publisher_member+function,按回车运行该节点。
可以看到这个节点开始不断循环发布信息,每次发布的信息为字符串形式,内容是“Hello,world! +数字”。
同样,在终端2的命令行窗口,输入以下命令并回车开启订阅者节点。
这个订阅者节点会获取到、并显示出刚才发布者节点发布的信息。
通过这样一个例程,我们验证了两个节点之间的通信没有问题。这这是一个基于DDS的话题通信。
按CTRL+C可以关闭该例程。
通信系统没有问题了,如果你是一个ROS2的开发者,可能对刚才我们使用的ROS2命令比较熟悉,这时你可能也会产生一个问题:我们之前也安装了ROS2系统,那ROS2的原生功能还可以正常运行么?
我们再来试一试ROS2中自带的一个例程。
和刚才一样打开两个终端,这里我们需要source一下ROS里的环境变量。该环境变量我们刚才已经设置了过软连接,所以配置过程中它也会配置ROS2的功能包路径。
在终端1输入命令:
在终端2,也输入同样的命令,配置环境变量的脚本:
接下来运行两个ROS2的节点。
这两个节点的功能包是属于ROS2里的功能包,可以直接调用到。我们来尝试一下输入命令ros2 run,再输入功能包名称,如果按Tab自动补全文件名,说明可以找到对应的这个功能包:
talker也是一个发布者节点。按回车运行,可以看到终端1的发布者节点以每秒1次的频率发布消息。
同样,我们到终端2中打开订阅者节点:
回车运行,很快两个终端间就建立了通讯。
这样就使用ROS2里的例程实现了话题通信连接,只不过这里我们使用的就是ROS2原生的功能包了,而不是TogetherROS的功能。
通信系统已经没问题了,但看上去似乎还不太直观。
目标检测
没问题,接下来,我们就运行一个更为直观的案例——目标检测。
在这个案例中,需要大家找一个USB的相机,连接到旭日X3拍的USB接口上。
在运行这个例程之前,需要确认两点:1.有一个USB相机已经连接到了旭日X3派板子上;2.有一个HDMI的显示器也连接到了旭日X3派板子上,它主要用于显示后续的图像检测的效果。
要确认USB相机已经正确连接到开发板,可以在终端输入命令“ls - dv"查看当前设备号,默认把USB相机识别为vedio8,如果当前列表里能找到vedio8就说明相机被成功识别到了。
输入以下命令运行例程:
代码第一行,02例程的功能是通过相机动态采集图像,并对图像里的目标物体进行实时识别。
代码第二行,我们用python3来运行例程usb_camera_fcos.py,它的目标识别的功能是通过我们板卡中CPU的AI引擎来实现的。
我们输入以上两行代码,就开始驱动相机、并对相机里的图像做动态识别了。
此时如果有连接HDMI的显示器,就可以在显示器里看到动态识别的效果。
我们可以调整USB相机镜头的范围,去拍一些杯子、电脑、显示器等等,都可以把对应的目标物体识别到,并把对应的物体用彩色框给框出来;在框的左上角,就是识别到物体的名称、以及它识别的概率值了。
几个示例程序都可以正常运行了,说明当前的软硬件系统都已经准备就绪,到这里,我们才算是可以正式开始机器人开发了。