【ROS1總結】使用bloom-generat打包ROS包生成debian安裝包

> 說明:<br><br>
> 本文首發於 Playfish Blog,轉載請保留鏈接。

 前言

在之前的博客中,介紹了ROS包的編寫,在本節中將講述如何將之前寫的ROS包打包成debian安裝包形式,打包成debian安裝包形式有很多,例如:

  1.   將ros包開源至github,利用ros自動生成到構建倉庫(buildform)
  2.   在本地將ros包打包成debian,不需要上傳到github

方法一在以前博客中已經描述過,大家可以查看博客發佈ROS1包到ROS版本,或者發佈ROS2到ROS版本

通常有時候爲了項目的安全性,有時候並不想發佈到ROS中,在此我們將講述第二中方法,也就是在本地將ROS打包成debian形式,方法二也有幾種方式:

  1.   將生成的install目錄按照debian格式放到DEBIAN目錄中,使用dpkg -b形式打包
  2.   使用checkinstall進行打包
  3.   使用ROS提供的bloom-generate進行打包
  4.  ...

 
方法不唯一,在此使用bloom-generate進行打包,方式很簡單,在此我們進行示例講解

 編寫例程

爲了使用bloom-generate,首先得有ROS包,在講解之前,首先進行聲明,有時候在項目或者個人代碼中,或多或少會用到自定義消息,而使用bloom-generate形式來打包包含自定義消息文件時,會提示出錯,因此,本教程將包含自定義消息來進行打包。

也就是說,教程中會打兩個ROS debian包,一個是自定義消息包,另一個是依賴自定義消息包的節點包。

之前寫的ROS包由於沒有包含自定義消息包,所以不使用以前教程節點包,在此重新編寫一個包含自定義消息包的節點包:
該例程應該有如下功能,改寫ROS教程talker,將talker包含自定義消息,說明如下:

  •   自定義消息包(test_msgs):該消息包爲自定義消息包,主要服務於測試節點
  •   測試節點(test_node):該節點寶依賴自定義消息包,提供包含自定義消息的話題。

 
該代碼已上傳至github,大家可以自行下載,鏈接爲:https://github.com/Playfish/test_msgs
該存儲庫包含兩個ROS包,也就是上面所說,自定義消息包(test_msgs)、測試節點(test_node)

在此就不在粘貼代碼,在catkin_ws/src下運行如下命令:
```
git clone https://github.com/Playfish/test_msgs
```

 編譯

下載完成後,運行如下命令,進行編譯:
```
cd ~/catkin_ws/src/
catkin_make
source devel/setup.bash
```

 安裝bloom-generate

運行如下命令進行安裝:
```
sudo apt-get install python-bloom fakeroot
```

 打包自定義消息

切換到```test_msgs```目錄下:
```
roscd test_msgs
bloom-generate rosdebian --os-name ubuntu --ros-distro kinetic
```


運行完以上命令後,你將在當前目錄下得到一個名爲```debian```目錄,該目錄包含創建debian所需的編譯文件以及規則,使用如下命令進行打包:
```
fakeroot debian/rules binary
```
完成後,將在上一級目錄得到安裝包,名爲```ros-kinetic-test-msgs_0.0.0-0xenial_amd64.deb ```

 

安裝該自定義消息包到ROS環境中,用於依賴該消息包的test_node包生成debian。
```
sudo dpkg -i ~/catkin_ws/src/test_msgs/ros-kinetic-test-msgs_0.0.0-0xenial_amd64.deb
```

 鏈接自定義消息到ROS依賴

在所以位置編寫rosdep.yaml,以本教程爲例,在~/.ros/目錄下創建rosdep.yaml,該文件內容如下:
```
test-msgs:
  ubuntu: [ros-kinetic-test-msgs]
```


注意: 該格式要求比較嚴格,應按照以上格式來。

編寫完成後,將該文件連接到rosdep索引中,即在```/etc/ros/rosdep/sources.list.d/```目錄下添加一個名爲``` 50-my-default.list ```文件,文件內容如下:
```
yaml file:///home/ubuntu/.ros/rosdep.yaml
```
其中,file指向的是以上編寫的rosdep.yaml路徑,ubuntu爲用戶名,替換成你自己的。

完成後,更新索引,將自定義消息加載到ros軟件列表:
```
rosdep update
```


 生成test_node安裝包

上幾步已經將自定義的消息安裝到ROS環境中,並向ROS軟件列表添加該包的索引,如果沒有進行以上操作,在運行以下步驟中,將會得到索引不到test_msgs包的位置,進而無法生成安裝包。
這樣,就可以將依賴該消息包的節點包進行打包操作:
```
roscd test_node
bloom-generate rosdebian --os-name ubuntu --ros-distro kinetic
fakeroot debian/rules binary
```
以上操作完成後,將會在上一級目錄生成名爲```ros-kinetic-test-node_0.0.0-0xenial_amd64.deb```

生成後,可以通過以下形式安裝ros包:
```
sudo dpkg -i ros-kinetic-test-node_0.0.0-0xenial_amd64.deb
```
這樣,就可以將安裝包發送給別人進行安裝,而不需要發佈到ROS構建工廠中,保證了私密性。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章