如何在Raspberry Pi或BeagleBone Blue上使用带有ROS的USB摄像机-将视频流传输到大型计算机



本指南是关于将USB摄像机连接到Raspberry Pi或BeagleBone Blue并将其与ROS(机器人操作系统)一起使用-通过ROS image_view从摄像机读取数据,甚至将视频流传输到Web浏览器!

视频末尾是EduMip机器人的演示。

1)作为奖励,我们将创建一个分布式ROS系统。

2)Roscore应用程序和用于查看图像的应用程序将在PC(主机)和Raspberry Pi(从机)上的相机节点上运行。

3)要配置主设备和从设备,我们需要在两个设备上都更新环境变量。

4)在向导上:找到设备的IP地址。 对于以太网,net_dev可以是enpXXs0或ethX:

$ ifconfig {net_dev} ifconfig enp61s0   ifconfig 

5)使用IP地址作为ROS_IP变量的值:

 $ export ROS_IP="10.42.0.1" 

6)对于ROS_MASTER_URI:

 $ export ROS_MASTER_URI="http://10.42.0.1:11311" 

7)如果要在以后的会话中使用这些值,则可以将这些值保存在主目录中的.bashrc文件中:

 $ echo 'export ROS_IP="10.42.0.1"' >> ~/.bashrc $ echo 'export ROS_MASTER_URI="http://10.42.0.1:11311"' >> ~/.bashrc 

8)通过ssh连接到Raspberry Pi:

 $ ssh {user}@{raspberry_ip} 

9)对于RPi,作为从属,添加ROS_MASTER_URI的主IP地址

10)以及Raspberry Pi的ROS_IP的IP地址

 $ export ROS_IP="10.42.0.65" $ export ROS_MASTER_URI="http://10.42.0.1:11311"  $ echo 'export ROS_IP="10.42.0.65"' >> ~/.bashrc $ echo 'export ROS_MASTER_URI="http://10.42.0.1:11311"' >> ~/.bashrc 

11)现在该连接USB摄像机了。

12)检查相机是否被系统识别:

 $ lsusb $ ls /dev | grep video* 

13)安装具有必需依赖项的usb_cam ROS节点:

 $ sudo apt install ros-kinetic-usb-cam 

14)usb_cam主机已经有一个测试启动文件:

 $ cat /opt/ros/kinetic/share/usb_cam/launch/usb_cam-test.launch 

15)在开始此文件之前,让我们在master上运行ROS内核:

 $ roscore 

16)现在在slave上运行usb_cam节点:

 $ roslaunch usb_cam usb_cam-test.launch 

17)现在我们可以看到创建的主题。 我们可以在主机或从机上对其进行检查。

18)使用CTRL + Z将当前进程移至后台,并运行bg命令以继续在后台运行。 (在Ubuntu版本不是完整桌面且没有屏幕的情况下,只需启动另一个终端即可)

19)要在终端中查看主题:

 $ rostopic list 

20)...或在图形界面中:

 $ rqt_graph 

21)使用image_view读取相机数据:

 $ rosrun image_view image_view image:=/usb_cam/image_raw 



22)或使用rqt_image_view

23)将后台任务置于前台:

 $ fg 

24)迄今为止最新的实验是网络流媒体

25)安装ROS主机网络视频服务器:

 $ sudo apt install ros-kinetic-web-video-server 

26)要正确执行此操作,请为我们的自定义启动文件的catkin创建一个工作区:

 $ mkdir -p ~/rosvid_ws/src $ cd ~/rosvid_ws $ catkin_make $ source devel/setup.bash 

27)然后创建ROS包:

 $ cd src $ catkin_create_pkg vidsrv std_msgs rospy roscpp 

28)使用nano,vim等创建启动文件:

 $ mkdir -p vidsrv/launch $ nano vidsrv/launch/vidsrv.launch 

从这里发布代码

在带有A4Tech usb相机的Beaglebone Blue上,此代码对我有用:

 <launch> <!-- This node description you can take from usb_cam-test.launch --> <node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" > <param name="video_device" value="/dev/video0" /> <param name="image_width" value="352" /> <param name="image_height" value="288" /> <param name="pixel_format" value="mjpeg" /> <param name="camera_frame_id" value="usb_cam" /> <param name="io_method" value="mmap"/> </node> <!-- This node will launch web video server --> <node name="web_video_server" pkg="web_video_server" type="web_video_server" \ /> </launch> 

29)收集包裹:

 $ cd .. $ catkin_make 

30)再次在master上运行ROS内核:

 $ roscore 

31)并运行创建的启动文件:

 $ roslaunch vidsrv vidsrv.launch 

32)默认的Web视频服务器端口为8080

33)在网络浏览器中打开URL:{RPi_IP}:8080

文档链接:

视频服务器节点
USB摄像头节点
rqt图像查看器
Raspberry Pi相机模块节点

USB摄像头几乎可以用于任何具有linux驱动程序的驱动器,您也可以类似使用Raspberry Pi摄像头模块链接。

使用A4Tech相机在BeagleBone Blue上如何工作的示例:



从BealeBone Blue USB摄像机的视频中搜索三张卡(识别算法可在具有主ROS的笔记本电脑上使用)。

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


All Articles