ROS以控制空拍機


安裝Tello Driver


為了讓空拍機可以使用ROS,我們必須先安裝Dji Tello 的驅動
在安裝的過程中,會安裝TelloPy、h264_image_transport、tello_driver
並且要放到對應的位置,才可以順利呼叫

 $ cd <CATKIN_WS/SRC>
 $ git clone https://github.com/anqixu/TelloPy.git
 $ cd TelloPy
 $ sudo -H pip2 install -e .
 $ cd ..
 $ git clone https://github.com/anqixu/h264_image_transport.git
 $ git clone https://github.com/anqixu/tello_driver.git
 $ cd ..
 $ rosdep install h264_image_transport
 $ catkin build tello_driver

執行Tello Driver


  1. 開啟tello,並讓筆電與tello連線
  2. 開啟終端機
  3. 執行指令roslaunch tello_driver tello_node.launch

安裝後的檢查

因為ROS 是用node 以及topic的方式貫穿所有指令,如果安裝沒裝好,會有指令無法使用的問題
所以我們會再一次如同上一篇一樣用rosnode list、rostopic list,以顯示目前有的。
rosnode list

rostopic list

開始寫第一個ROS控制空拍機飛行的程式


在發佈者Publisher方面

我們要在對應的拍令動作作出定義
像是起飛動作takeoff 會用rospy.publisher中呼叫/tello/takeoff
而在cmd則是/tello/cmd_vel

takeoff_pub = rospy.Publisher('/tello/takeoff', Empty, queue_size = 1)
cmd_pub = rospy.Publisher('/tello/cmd_vel', Twist, queue_size = 10)

另外,在Cmd中的Twist就是我們的message
單純地送出一個 geometry_msgs/Twist 的 command,所以我們只要定期送出一個 command 就可以維持空拍機的動作
同時在一連串的動作之間我們也要有sleep為指令之間的緩衝時間
當中message 這次用的是以x,y,z三軸的動力數值去控制空拍機的飛行行為

msg = Twist()
msg.linear.x = 0.4
msg.angular.z = 0.36
rospy.loginfo(msg)
cmd_pub.publish(msg)

在訂閱者Subscriber方面

因為這次我們要在飛行的中途取得影像,之後再作分析的動作
所以會用到ROS當中的影像

CvBridge

ROS以其自己的sensor_msgs/Image訊息格式釋出影象,但許多使用者會希望將影象與OpenCV結合使用。
CvBridge是一個ROS庫,提供ROS和OpenCV之間的介面。

要將ROS影象訊息轉換為opencv,模組cv_bridge.CvBridge提供以下功能:

cv_image = bridge.imgmsg_to_cv2(image_message, desired_encoding="passthrough")

輸入是影象訊息,以及可選的編碼。 編碼引用目標c影象。如果給出預設值“passthrough”,則目標影象編碼將與影象訊息編碼相同。 影象編碼可以是以下任何一種OpenCV影象編碼:

  • 8UC[1-4]
  • 8SC[1-4]
  • 16UC[1-4]
  • 16SC[1-4]
  • 32SC[1-4]
  • 32FC[1-4]
  • 64FC[1-4]
    對於流行的影象編碼,CvBridge將根據需要選擇進行顏色或畫素深度轉換。 要使用此功能,請指定編碼為以下字串之一:
  • mono8: CV_8UC1, grayscale image
  • mono16: CV_16UC1, 16-bit grayscale image
  • bgr8: CV_8UC3, color image with blue-green-red color order
  • rgb8: CV_8UC3, color image with red-green-blue color order
  • bgra8: CV_8UC4, BGR color image with an alpha channel
  • rgba8: CV_8UC4, RGB color image with an alpha channel
    請注意,mono8和bgr8是大多數OpenCV函式預期的兩種影象編碼。

下一編將說明OpenCV的導入

本部分主要是用wifi的連接,以空拍機的協定控制空拍機的飛行行為。






Related Posts

[TensorFlow Certification Day7] 挑戰NLP (5hrs)

[TensorFlow Certification Day7] 挑戰NLP (5hrs)

[極短篇] JSONP

[極短篇] JSONP

[筆記] 串接 HTTP API 實戰

[筆記] 串接 HTTP API 實戰



Sponsored



Comments