前言
在ROS開發過程中,想要發佈自己的包貢獻到ROS社區,也就是想要自己的包可以通過apt-get的形式進行下載,這樣可以避免每次源碼編譯的時候會遇到很多坑的情況,不過想要發佈ROS包到ROS社區需要如下能力:
- 長期維護能力:ROS包會一直迭代更新,因此自己的包也應具有長期維護能力,當然,穩定版本後可以不用長期維護。
- 開源精神:因爲ROS包遵循BSD協議,會要求將包開源後纔可以上傳到ROS社區,所以將自己的包發佈到ROS社區,最好有開源精神。
- 文檔更新:包的更新也伴隨這文檔更新,當然也不是絕對的,不過最好有包的使用文檔,也就是wiki上。
如果以上的可以做到,那麼,恭喜你,可以作爲開源成員加入到ROS大家庭來,開源自己代碼,共享社區。
本教程只是單純的介紹如何發佈自己的包到ROS社區,並且,發佈後如何通過apt-get獲取下載,關於文檔界面編寫,也就是wiki說明,會在後面進行說明。
一般發佈自己ROS包有如下步驟:
- 具有github賬號與要發佈的存儲庫地址,發佈存儲庫(bloom-release生成的包路徑),wiki白名單(文檔界面做準備)
- 發佈前準備工作,bloom安裝(ROS1推薦使用bloom-release進行一鍵操作)
- 同步到ROS社區
- 等待ROS社區的ROS包版本迭代
- 編輯wiki文檔教程
以上步驟完成後,就可以進行apt-get形式下載自己的包了。假如自己的包爲cht10_node,那麼可以使用如下命令進行安裝:
sudo apt-get install ros-<rosdistro>-cht10-node
其中將<rosdistro>替換成自己的ROS版本,也就是自己的包發佈到的ROS版本中,比如自己的包發佈到了kinetic中,那麼就是:
sudo apt-get install ros-kinetic-cht10-node
注意:並不是自己把包發佈到ROS社區就等於所有的ROS版本都可以下載,只有發佈到對應ROS版本纔可以。也就是說要想把自己的包發佈到ROS所有版本,必須把自己的包發佈到所有的版本中,比如Indigo、Jade、Kinetic、Luna、Melodic中。
ROS發佈需要bloom-release包,我已經將ROS的bloom-release包如何使用翻譯到wiki上,大家可以查看教程
http://wiki.ros.org/cn/bloom
或者查看英文教程:
http://wiki.ros.org/bloom
以後會編寫如何發佈ROS2的包到ROS社區教程。
大家也可以看Mastering ROS for Robotics Programming中的Maintaining the ROS package 部分。
Mastering ROS for Robotics Programming書籍下載:https://download.csdn.net/download/u011118482/10402380
包含英文和中文翻譯。
沒有0積分下載,大家也可以進入ROS羣進行下載。
發佈前的準備
創建github存儲庫
登錄http://github.com/,創建自己的github賬號,創建完成後,創建要發佈的ROS存儲庫,例如包名爲之前教程的cht10_node,那麼創建cht10_node目錄。
我的存儲庫爲:https://github.com/Playfish/cht10_node
創建完成後,上傳自己的代碼到github的cht10_node存儲庫中。完成如上圖。
注意:發佈ROS包應有如下內容,否則無法發佈:
- CHANGELOG.rst:必須有該文件,該文件內容,可以查看我寫的,格式一般爲包+版本(日期)+分隔符+修訂日誌
- package.xml:內容必須有maintainer子項,版本號必須與CHANGELOG中的版本一致,比如都爲0.0.1,包名也一樣。
- tag:版本標記。
生成tag用於以下發布ROS包追蹤:
點擊當前界面上的release按鈕,創建一個release tag:
保存。
創建github release存儲庫
創建要發佈的ROS完成後,爲ROS包創建生成的release存儲庫,我創建的名爲cht10_node_release,最好創建爲包名_release。這個存儲庫爲空即可,必須勾選初始化ReadeMe.md選項,生成的包版本更新日誌將存放在這裏。
完成後即可,不用再管這個存儲庫,後期發佈完成後,可以查看內容。
fork ROS社區版本包存儲庫
保證自己的github賬號處於登錄狀態,點擊:http://github.com/ros/rosdistro 。隨後點擊fork。
完成後,可以看到自己有了rosdistro存儲庫:
發佈ROS包
發佈前的準備完成後,在自己的Ubuntu下,安裝bloom_release包,安裝命令如下
sudo apt-get install python-bloom
安裝完成後,使用如下命令進行發佈:
以下配置只會在第一次產生。
運行以下命令進行發佈與配置ROS Release包,比如把cht10_node發佈到kinetic版本上:
bloom-release --rosdistro kinetic --track kinetic cht10_node
其中--rosdistro後的選項爲發佈到kinetic版本,--track選項爲追蹤選項,默認爲ROS分佈式版本,最後的cht10_node爲當前存儲庫名稱。
運行命令產生如下:
輸入之前創建的發佈的release存儲庫:https://github.com/Playfish/cht10_node_release.git
選擇Y確定創建追蹤。
輸入當前存儲庫名稱:cht10_node
輸入當前存儲庫地址:https://github.com/Playfish/cht10_node.git
隨後一路按下回車爲默認選項。直到遇到輸入用戶名、密碼爲止,在此過程中會遇到很多次輸入賬號密碼。
輸入github賬號密碼,回車。
產生debian配置文件:y
輸入當前github用戶名密碼繼續。
產生debian包後,輸入用戶名密碼發佈tag。
編輯當前ROS包另一個配置,文檔配置以及版本狀態,輸入默認即可。
注意:turn on pull request testing選擇默認爲N,如果選擇y需要額外配置,不需要打開,我這裏是爲以後做準備。
額外的配置查看:https://github.com/ros/rosdistro/pull/17576
向rosdistro存儲庫的kinetic目錄下的分佈式文件添加當前包內容。
隨後向rosdistro存儲庫提交請求,輸入當前github賬號密碼。
生成請求日誌。
完成後,將提示已經發布完成請求,大家可以點擊最後的鏈接查看當前請求。
確認工作
請求完成後,大家打開之前創建的空白髮布存儲庫,可以看到已經生成了很多生成deb包的規則文件,例如我的:
https://github.com/Playfish/cht10_node_release.git
大家可以到https://github.com/ros/rosdistro/pulls,查看發佈情況。
如果一切正常,ROS維護人員將合併當前請求,合併完成後。
到 討論論壇中https://discourse.ros.org/查看當前版本下的包迭代情況,一般爲一個月ROS包版本迭代一次。
迭代完成後,可以看到自己的包已經存放到了http://packages.ros.org下。
使用apt-get update 更新後,可以下載自己的包了,比如我的包可以用如下命令下載:
sudo apt-get install ros-kinetic-cht10-node
ROS包的發佈過程這一節告一段落,下一步講述如何編輯cht10_node生成的wiki文檔。
注意,如果要生成wiki文檔,需要在package.xml裏面添加url指向wiki。