GitHub 上有哪些機器人、無人機、自動控制等方面的有趣項目?

本題已收錄至知乎圓桌 ? 玩轉無人機,更多無人機(Drone)操控、應用、研發方面的話題歡迎關注討論。


我們組正在開發的Drake: RobotLocomotion/drake · GitHub 用於機器人動力學建模,模擬和控制,集成了運動規劃,穩定性分析。應用的例子包括了人形機器人,飛機(四旋翼,固定翼)和機械臂等。語言是用MATLAB和C++(絕大多數動力學的函數同時提供了matlab和c++的介面)。這次的DARPA Robotics Challenge中MIT隊的控制器也包含在這個軟體中了。

關於這個軟體中所運用的機器人理論知識,可以參考edx上的公開課程underactuated robotics Underactuated Robotics

根據評論添加一部分回答。

  1. 組的背景?
    組的網站在這裡 http://groups.csail.mit.edu/locomotion/index.html
  2. 為什麼不直接用ROS?
    一是因為我們做研究需要的很多功能是ROS不提供的,比如說判定一個動態系統的region of attraction,這時候需要搜索一個Lyapunov function,ROS是沒有這個功能的。二是因為我們的側重點和ROS不一樣。比如說ROS中的gazebo模擬器更側重模擬的速度,而我們更注重模擬的精度。三是因為ROS太大了,其中核心的通信模塊可以用LCM LCM: Lightweight Communications and Marshalling (LCM) 替換,這是一個輕量級的通訊模塊。
  3. 是否有機械臂的關節規劃?
    我們有計算forward kinematics和inverse kinematics的引擎,支持MATLAB和C++。對於避障目前是用的Bullet來計算物體之間的距離。做inverse kinematics的例子包括在ABB IRB140 arm上drake/runPlanning.m at master · RobotLocomotion/drake · GitHub,和在Atlas機器人上 drake/testIK.m at master · RobotLocomotion/drake · GitHub。

hector quadrotor 是德國老牌理工學校Technische Universit?t Darmstadt大學開發的ros包,可以用於用於多旋翼的建模,控制和模擬。

GitHub - libing64/hector_quadrotor: hector_quadrotor contains packages related to modeling, control and simulation of quadrotor UAV systems.
GitHub - tu-darmstadt-ros-pkg/hector_quadrotor: hector_quadrotor contains packages related to modeling, control and simulation of quadrotor UAV systems.

hector quadrotor 整合了ros和gazebo,可以進行uav相關的很多模擬,例如飛行動力學,機載感測器例如imu、gps、camera,複雜環境模擬等等。

1. modeling and control
作者利用風洞實驗等測得了四旋翼的所有動力學參數,然後拿這些參數進行模擬,之後又拿模擬數據和實際飛行數據進行對比,結果相當吻合。

如果你想自己寫飛控但又不想炸雞,完全可以ros里進行模擬,模擬通過之後再把程序放到進飛機實際測試。
在模擬里寫飛控還有一個好處就是飛機的所有state都可以使用ground truth進行控制,避免和estimation問題耦合。


http://www.gkmm.tu-darmstadt.de/publications/files/meyer2012quadrotorsimulation.pdf

2. sensor fusion
hector quadrotor上集成了目前uav上最常見的感測器,imu, magnetometer, gps, lidar, sonar, camear, stereo camera, kinect, 3d lidar, spinning lidar...
拿來做感測器融合模擬非常方便,所有state都有ground ground truth,哪裡融合出錯了非常容易發現。noise level也可以自己定義
使用hector quadrotor的數據,我自己寫的基於ekf姿態融合跟 6d位置融合,att_ekf核心代碼不到150行,6d pose_ekf 核心代碼大約300行(Eigen真是高效)

GitHub - libing64/att_ekf: Extented Kalman Filter for attitude estimation using ROS
GitHub - libing64/pose_ekf: Extented Kalman Filter for 6D pose estimation using gps, imu, magnetometer and sonar sensor.

att_ekf, 長坐標軸是estimation,短的是ground truth

pose_ekf, 長坐標軸是estimation,短的是ground truth

我也試過跑optical flow 跟stereo visual odomety,效果都蠻好。laser-based slam上面的paper中已經實現了,作者把它放在了hector_localization這個包.

3. slam
hector quadrotor用於laser-based slam非常容易實現,但是沒看到用hector quadrotor做camera-based slam的,但是我覺得既然光流和stereo vo都可以跑的很好,那麼用來做slam應該不成問題,起碼我自己是打算這麼乾的。

laser-based 2d slam

===========================================
2016.03.23 更新

@鐵膽火車俠 提到了orb slam,我之前只看過paper並沒有運行過
hector quadrotor模擬環境中控制uav飛圓形(幾十圈),下圖是用orb slam(monocular version) 跑出來的軌跡和點雲。

單目能跑出這樣的精度而且是實時的,我還是蠻驚訝的為了讓orb slam和hector quadrotor同時實時運行,對orb slam的介面做了修改
GitHub - libing64/ORB_SLAM2: Real-Time SLAM for Monocular, Stereo and RGB-D Cameras, with Loop Detection and Relocalization Capabilities


基於ROS的項目在Github上不要太多,乾脆從ROS開始吧:
1.ROS core stacks · GitHub
應該說現在搞機器人相關應用的機構和研究所,幾乎都會開發ROS相關的應用介面,強大和統一的通信方式,省去了很多重複的勞動,各種相關和熱門的感測器以及平台也都提供了ROS相關的介面,如果有一台Linux筆記本,想做機器人相關的項目,那就趕緊下載一個ROS開始吧。
具體版本選擇參見官網,有linux,c++或python基礎,跟著官方tutorial應該很快就可以上手了。
ROS8周年宣傳視頻,需要翻牆,https://www.youtube.com/watch?v=Z70_3wMFO24

2. ROS支持的相關機器人和感測器
Baxterhttps://github.com/RethinkRobotics

PR2 https://github.com/PR2

Turtlebotturtlebot · GitHub

DJI的開發平台 Matrix-100GitHub - dji-sdk/Onboard-SDK-ROS: ROS packages for DJI onboard SDK, all new data structures

Gazebo 沒有這些實體機器人?沒關係,完全ROS支持的Gazebo模擬環境,你值得擁有:
GitHub - ros-simulation/gazebo_ros_pkgs: Wrappers, tools and additional API"s for using ROS with Gazebo. Formally simulator_gazebo stack

在Gazebo環境下,基本上已經可以完整解決很多機器人相關的問題了。

感測器相關的Sick 雷達,Velodyne全景雷達,Kinect攝像頭等,都是ROS官方支持的,驅動安裝相當方便,這裡就不詳細說了,基本上市面上流行的感測器和IMU都有官方支持,沒有的話在github上也能搜的到ROS相關介面。

3. Mapping 和 SLAM
GmappingGitHub - ros-perception/slam_gmapping: http://www.ros.org/wiki/slam_gmapping
比較早但是非常好用的一個包,有一個激光雷達或者Kinect,搭配移動機器人就可以實現一個2D的SLAM解決方案,如果沒有機器人的話,用Gazebo搭配一個模擬Turtlebot一樣可以實現。定位精度之高有時候可以當groud-truth用。

ORB_SLAMGitHub - raulmur/ORB_SLAM: A Versatile and Accurate Monocular SLAM
學術界目前最火的Monocular SLAM解決方案,除了攝像頭不需要其他任何相關里程計信息,來自西班牙薩拉戈薩大學,只需要單攝像頭就可以完成,同樣支持Kinect,並有ROS介面,有攝像頭的都可以下載下來跑一跑試試。ORB feature相比傳統Feature提取效率大大提升。

ETH的2.5D MappingGitHub - ethz-asl/grid_map: Universal grid map library for mobile robotic  mapping
ETH的機器人相關研究一直都是世界頂級的,ETHZ ASL · GitHub 下面的幾乎每一個項目,都是一個機器人領域相關研究的分支。這裡就不一一列舉了。

4 Planning 和 Kinematics
官方非常基礎的一個運動學相關的package。
GitHub - ros-planning/moveit_ros: MoveIt! ROS

----------總結陳詞的分割線-------------
ROS在學術界和工業界的應用發展還遠遠沒有止步,目前國內國外的相關機器人工程師招聘,也都有ROS相關的需求,比如前百度IDL副院長余凱的地平線機器人公司等等。把ROS玩好,可以大大的體會到做機器人相關研究的樂趣,希望有相關興趣的同學都參與進來。

----------夾帶私貨的分割線-------------
最後安利一個自己的project,如果大家有人買了Leap motion control,同樣最近非常火,並且經常被各種創業雞湯項目拿來唬人的手勢深度感測器,我給它寫了一個簡單的ROS介面https://github.com/CityU-MBE/leap_motion_ros
我們組正在進行的一個深度學習機器人應用的項目,主要是Semantic Mapping和基於CNN的壁障,目前比較搓,後期也可能棄坑,大家看看就好
GitHub - libcnn/libcnn: libcnn++

----------不定時更新的分割線------------
GitHub - arrenglover/openfabmap: Open-source C++ code for the FAB-MAP visual place recognition algorithm
FAB-SLAM,  基於appearance, chowliu-tree的slam方法,用bag of words的方式去訓練圖像分類,從而實現基於地圖資料庫的定位。BOWtrainer已寫入opencv標準庫。來自一篇IJRR高引用論文,出自牛津大學著名的Paul Newman教授組。感覺比ORBSLAM來的簡單一點,代碼的注釋也比較清楚,比較容易看懂。


Teensy: 電路+Library,可以DIY也可以買。大小類似於Arduino Pro Mini,但是性能和Arduino DUE一個級別。
PaulStoffregen/cores · GitHub
FreeIMU(這個項目的創始人是個英年早逝的義大利PhD在讀學生,很可惜)。
mjs513/FreeIMU-Updates · GitHub
兩個加一起可以做飛控。


法國inria研究所的人型機器人Poppy
全部開源,可3d列印,非常好看,設計也相當出色,缺點是造價高昂,用的韓國Dynamixel系列舵機,以及無法自主行走


題主說的是「有趣」,我是來強答的,因為下面說的不一定有趣。
無人機著名的開源社區是ArduPilot(網址:Community),他們有一些項目是託管在GitHub上的。他們的GitHub主頁是:ArduPilot · GitHub:
搬運一下他們的項目列表(Welcome to the ArduPilot Development Site),包括了飛控固件、地面站軟體、MavLink通訊協議、無人機模擬系統等

Project List

The ArduPilot system is made up of (or relies upon) several different projects which are listed below. Those marked with an asterix (*) are peer projects that have their own owners outside the core ArduPilot dev team.

  • DroneKit (site) - APM SDK for apps running on vehicles, mobile devices and/or in the cloud.
  • Plane (wiki, code) - autopilot for planes
  • Copter (wiki, code) - autopilot for multicopters and traditional helicopters
  • Rover (wiki, code) - autopilot for ground vehicles
  • Mission Planner (wiki, code) - the most commonly used ground station written in C# for windows but also runs on Linux and MacOS via mono
  • APM Planner 2.0 (wiki, code) is a ground station specifically for APM written in C++ using the Qt libraries
  • MAVProxy (wiki) - command line oriented and scriptable ground station (mostly used by developers)
  • MinimOSD (wiki, code) - on-screen display of flight data
  • AndroPilot (user guide, code, google play) - android ground station
  • DroneAPI (tutorial, droneshare) - A developer API for drone coprocessors and web applications.
  • DroidPlanner2 (wiki, code, google play) - android ground station
  • QGroundControl is an alternative ground station written in C++ using the Qt libraries
  • PX4 (wiki) - designers of the PX4FMU and owners of the underlying libraries upon which Plane/Copter/Rover use when running on the PX4FMU
  • MAVLink (wiki) - the protocol for communication between the ground station, flight controller and some periphers including the OSD. A 「Dummy』s Guide」 to working with MAVLink is here.

其中最著名的恐怕是Mission Planner,以至於我去很多展覽會,都能看到大家將這個開源軟體改來改去,我表示呵呵呵。這個軟體的界面是這樣的:

業內人士是不是看到以後很熟悉啊!!
這裡尤其說一下他們的Android項目Tower。Tower本身是一個APP,通過3DRservice(另一個APP,主要用於將遠程連接過程封裝)與無人機連接。我花了好久來研究這兩個軟體的方方面面,繪製流程圖和UML,還是很有收穫滴(我就是這麼一個認真的孩子,你打我啊~)。
3DRServices
Tower
下面是Tower的主界面。

開源社區的無人機大抵逃不出下面的結構。

ArduPilot 配合使用的飛控PiXWahk淘寶上就有賣,大概2000多能買到,而且附帶很多配件,比如GPS和數傳模塊。
最後是私貨,我寫過一篇介紹MavLink協議的博客,請看【無人機開發】通訊協議MavLink詳解。
以後有時間了,會多些一些關於無人機開發方面的文章,歡迎關注~


Gladius水下無人機,大概是我能想到國內民用級別最好玩的ROV了。
有趣的話,大概有這麼幾個點。
1.海釣專用。科普:海釣_360百科。常規的海釣依憑漁夫的經驗尋找水域,然後進行漫長的、不可知的釣魚過程。但是有了Gladius水下無人機後,能下潛海中,通過4K超高清視頻實時傳輸到手機上,從而實現可視化找魚。這意味著:釣魚不再是一種漫長而未知的過程,而是看見、捕捉、執行的高效率過程。
2.實時分享到社交平台。Gladius水下無人機通過半纜繩的設計結構,能高速穩定傳輸圖像資料,及時分享到社交平台和圖像下載。
3.船底檢查。全球中大型貨輪、客輪、大型漁船等總計超過10萬艘,中國佔比30%,需要經常進行船底外部檢查。常規的檢查方式是通過潛水員(蛙人)下水進行人工檢查。不僅耗時長進度慢,而且人力成本較高!但是Gladius水下無人機能夠輕鬆潛水百米,遊刃有餘地穿梭在船底,搭配智能輔助照明系統檢查。不僅速度快效率高,還能傳輸高清影像供船長參考船底的具體情況。
當然,還有很多有趣的玩法,比如水下攝影、遊艇娛樂等等……最後放張照片給大伙兒瞅瞅。


適合嵌入式平台的C的解釋器,代碼量很小。https://github.com/zsaleeba/picoc


- Repetier Software
源代碼可以在某度下載


Paparazzi UAV
Paparazzi UAV (Unmanned Aerial Vehicle) is an open-source drone hardware and software project encompassing autopilot systems for multicopters/multirotors, fixedwing, helicopters and hybrid aircraft.

中文介紹:http://m.leiphone.com/news/201406/paparazzi-open.html
官方wiki: http://wiki.paparazziuav.org/wiki/Main_Page
Github: https://github.com/paparazzi/


Pixhawk,開源飛控
drone-kit 通過mavlink協議控制pixhawk的android服務封裝
tower 上述service的客戶端


paparazzi


openworm/OpenWorm · GitHub
可以把它移植到機器人上面玩


openrov國外的一款開源水下機器人。


diydrone/ardupilot,pixhawk


PIXHAWK 無人機 導師叫我學這個,剛接觸了1天一頭霧水


推薦閱讀:

單片機可以替代plc么?
自動化專業的路該怎麼走?
常用控制演算法(包括PID和卡爾曼濾波等)各有什麼天然的局限乃至缺陷?
參加大學生電子設計競賽是怎樣的體驗?

TAG:機器人 | 編程 | GitHub | 自動化 | 無人機Drone |