我遇到了一个问题,当无人机通过ROS使用ardrone_autonomy ardrone.launch连接时,我无法连接到AR Drone 2相机。
我认为这个问题是由于我试图通过OpenCV和Python的IP地址访问无人机摄像机,同时通过ardrone_autonomy连接。下面是我如何完成这个任务的代码片段。
video_capture = cv2.VideoCapture()
video_capture.open('tcp://192.168.1.1:5555')
vidWidth = video_capture.get(cv2.CAP_PROP_FRAME_WIDTH)
vidHeight = video_capture.get(cv2.CAP_PROP_FRAME_HEIGHT)
正如你所看到的,我正在使用摄像机的IP地址。当无人机没有通过ROS连接时,这就完美地工作了,ROS本质上就像一个网络摄像头。
我的最终目标是通过使用OpenCV从相机接收到的图像进行跟踪和导航,这意味着我将不得不发出运动命令(cmd_vel),这需要根据OpenCV接收和处理的图像通过ardrone_autonomy进行连接。
无论如何,我可以通过使用无人机的IP摄像头连接到ROS来实现这一点吗?
谢谢你的帮助!
http://wiki.ros.org/video_stream_opencv可以从HTTP/TCP URL打开视频流:
<launch> <!-- video stream from URL to ROS topic - see http://wiki.ros.org/video_stream_opencv -->
<include file="$(find video_stream_opencv)/launch/camera.launch" >
<arg name="camera_name" value="drone_webcam" /> <!-- node name and ros graph name -->
<arg name="video_stream_provider" value="http://192.168.1.227:8080/video?x.mjpeg" /> <!-- ?x.mjpeg see http://answers.opencv.org/question/13139/cvvideocapture-works-for-webcams-but-not-ip-cameras/ -->
<arg name="fps" value="10" /><!-- throttling the querying of frames to 10Hz -->
<arg name="frame_id" value="webcam" /> <!-- setting TF frame_id -->
<arg name="camera_info_url" value="file:///abc/xyz.yaml" /> <!-- camera info loading, take care as it needs the "file:///" at the start , e.g.:
"file:///$(find your_camera_package)/config/your_camera.yaml" -->
<arg name="flip_horizontal" value="false" /> <!-- flip the image horizontally (mirror it) -->
<arg name="flip_vertical" value="false" /> <!-- flip the image vertically -->
<arg name="visualize" value="true" /> <!-- visualize on an image_view window the stream generated -->
</include>
</launch>
注意URL末尾的/video?x.mjpeg