1. 程式人生 > >學習9:rosed命令的簡單介紹 + 建立ROS訊息和ROS服務。

學習9:rosed命令的簡單介紹 + 建立ROS訊息和ROS服務。

肛了一波四級,希望這次能過把- -# 不想收集8張4級准考證啊……

用處不知道是幹嘛,主要可以直接編輯某個包裡的檔案。

1 rosed

1.1 介紹

使用方法如下

$ rosed [package_name] <tab>

舉個例子,假設我們想要編輯roscpp包裡的Logger.msg檔案,通常需要cd到這個裡面,然後再用vim開啟。這樣有時候很麻煩,這裡可以直接呼叫下面的程式碼完成同樣的功能

$ rosed roscpp Logger.msg
2 訊息msg 2.1 訊息的介紹 

msg檔案會再package的msg目錄下。

用ROS自己的語言定義一個msg的格式,主要的資料型別有

int8, int16, int32, int64 (plus uint*)
float32, float64
string
time, duration
other msg files
variable-length array[] and fixed-length array[C]

wiki上說,還有一個訊息型別是Header。

下面是一個msg檔案的例子

  Header header
  string child_frame_id
  geometry_msgs/PoseWithCovariance pose
  geometry_msgs/TwistWithCovariance twist
大致就是定義了一個Header型別的變數header,一個string型別的變數,child_frame_id

以及貌似是自定義類的2個變數(懷疑是msg型別巢狀,類似於C++中class中套class?)

2.2 建立一個msg

首先進入我們之前建立的src的begin_tutorials資料夾。

這裡應該包含launch,src等。現在我們建立一個msg資料夾。

然後在msg資料夾裡建立一個文字,叫Num.msg

文本里只有一行為

int64 num
當然也可以寫的複雜點,如wiki上給的
string first_name
string last_name
uint8 age
uint32 score

實際上msg檔案要被轉化為C++或者python程式碼,這樣可能就能做到跨語言跨平臺之類方便的作用了把。

所以在package.xml裡,要確保包含

  <build_depend>message_generation</build_depend>
  <run_depend>message_runtime</run_depend>
(一週過來,package.xml我都忘了是幹嘛了- -#)

一般預設的package.xml裡預設的是

  <buildtool_depend>catkin</buildtool_depend>
  <build_depend>roscpp</build_depend>
  <build_depend>rospy</build_depend>
  <build_depend>std_msgs</build_depend>
  <run_depend>roscpp</run_depend>
  <run_depend>rospy</run_depend>
  <run_depend>std_msgs</run_depend>

並沒有上面的message_generation和runtime。

具體這些是幹嘛的,我還沒徹底弄明白。

再看Cmakelist.txt,有一段程式碼是(下面排版出了點問題,請儲存程式碼為html格式,然後開啟即可正常閱讀QAQ)

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
)
我們需要新增一項message_generation。

也就是最後為

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
  message_generation
)

wiki上說,find_package不寫,有時候不出問題。但是還是要寫比較好。

還要設定執行依賴,找到並修改下面兩處程式碼

catkin_package(
  ...
  CATKIN_DEPENDS message_runtime ...
  ...)
add_message_files(
  FILES
  Num.msg
)

同時再檔案末尾新增一行。

generate_messages()

2.3 檢查剛剛做的成功沒有

執行下面的程式碼

$ rosmsg show beginner_tutorials/Num
這個很顯然,就是列印beginner_tutorials這個package的Num.msg的訊息。

當然直接rosmsg show Num也行。會顯示現有的所有的Num的訊息。

[email protected]:~/catkin_ws/src/beginner_tutorials$ rosmsg show Num
[beginner_tutorials/Num]:
int64 num

(等等!!我們對Cmakelist.txt做的操作呢???……就不檢查了?)

3 服務srv

3.1 服務的介紹

srv檔案分為請求和響應。我理解服務就是可呼叫的函式,請求就是輸入的引數型別,相應為返回的引數型別

一個srv的官方wiki例子

int64 A
int64 B
---
int64 Sum

輸入兩個int64型別,輸出一個int64型別。

3.2 建立一個srv

從這裡,猜都能猜的出來,和建立msg方法基本一樣。

去src目錄下新建資料夾srv

再裡面建的方法類似。

官方wiki給的。。讓我們複製一個srv過來……

用roscp命令,

roscp [從這裡] [的這個檔案] [複製到這裡]


$ roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv
當然, 開啟這個srv檔案,看到的程式碼如下
int64 a
int64 b
---
int64 sum


顯然,又需要去package.xml裡找到東西來改一下。 找到add_service_files,新增AddTwoInts.srv 為了確保srv檔案也能被轉化為C++或者python程式碼,我們需要在CmakeList.txt裡的find_package裡新增對message_generation的依賴。
find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation)
這裡有很多細節,比如回車換行的問題。

除了編譯依賴外,找到add_service_files,新增

AddTwoInts.srv

類似的,可以用rossrv show命令來檢視是否新增成功。(自動補全不智慧了這裡!)

4 新增srv和msg都需要的步驟

在CMakeList.txt裡找到generate_message,新增依賴std_msg。(wiki說不需要新增對roscpp和rospy的依賴,多新增會出問題嘛?)

回到工作空間,也就是catkin工作最高層目錄,執行catkin_make。

編譯失敗QAQ

他說generate_message()只能被呼叫一次,但是我貌似也就只調用了一次啊??這怎麼回事。

看了wiki的英文原文……

好吧,根本不需要新增generate_message()...

對於早期ros版本需要新增這個,對於我們的indigo,並不需要。


相關推薦

學習9rosed命令簡單介紹 + 建立ROS訊息ROS服務

肛了一波四級,希望這次能過把- -# 不想收集8張4級准考證啊…… 用處不知道是幹嘛,主要可以直接編輯某個包裡的檔案。 1 rosed 1.1 介紹 使用方法如下 $ rosed [package_name] <tab> 舉個例子,假設我們想要編輯ros

tornado學習筆記wtforms-tornado簡單介紹

由於專案需要使用tornado做開發,文魚這幾天認真看了下tornado的文件和之前專案現在的程式碼,但我看到之前專案裡對post的驗證邏輯,文魚表示蛋很疼也表示理解。眾所周知,tornado和django的理念完全不同:一個精悍,一個大而全。不想django中

Ros學習——建立ROS訊息ROS服務

1.rosed rosed 是 rosbash 的一部分。利用它可以直接通過package名來獲取到待編輯的檔案而無需指定該檔案的儲存路徑了。 rosed預設的編輯器是vim。修改其他的,開啟~/.bashrc 檔案,增加: export EDITOR='emacs

ROS教程(十)建立ROS訊息ROS服務

建立ROS訊息和ROS服務 Description: 本教程詳細介紹如何建立並編譯ROS訊息和服務,以及rosmsg, rossrv和roscp命令列工具的使用。Tutorial Level: BEGINNERNext Tutorial: 寫一個簡單的訊息釋出器和訂

ROS Learning-012 beginner_Tutorials (程式設計) 建立自定義的ROS訊息ROS服務

ROS Indigo beginner_Tutorials-11 建立自定義的ROS訊息和ROS服務 我使用的虛擬機器軟體:VMware Workstation 11 使用的Ubuntu系統:Ubuntu 14.04.4 LTS ROS 版本:ROS In

ROS入門_1.13 建立ROS訊息ROS服務

1. 訊息(msg)和服務(srv)介紹 訊息(msg): msg檔案就是一個描述ROS中所使用訊息型別的簡單文字。它們會被用來生成不同語言的原始碼。 服務(srv): 一個srv檔案描述一項服務。它包含兩個部分:請求和響應。 msg檔案存放在package的msg目錄下,srv檔案則存放在s

redis命令info 的簡單介紹

1.背景 如果客戶端連線redis後,執行緩慢,那麼可以通過redis的 INFO commandstats命令來了解下下命令執行的的一些統計資訊; 2.具體 通過redis-cli連線一個redis 節點,然後執行如下命令: INFO com

Golang學習-第一篇 Golang的簡單介紹及Windows環境下安裝、部署

需要 簡單 電腦 pan 生成文件 多核 -- pear () 序言 這是本人博客園第一篇文章,寫的不到位之處,希望各位看客們諒解。 本人一直從事.NET的開發工作,最近在學習Golang,所以想著之前學習的過程中都沒怎麽好好的將學習過程記錄下來。深感惋惜! 現在將Gola

[轉]JMeter學習(一)工具簡單介紹

正在 包含 定義 寫入文件 線程組 element 層級 工作臺 roc 一、JMeter 介紹 Apache JMeter是100%純JAVA桌面應用程序,被設計為用於測試客戶端/服務端結構的軟件(例如web應用程序)。它可以用來測試靜態和動態資源的性能,例如:

Https系列之一https的簡單介紹及SSL證書的生成

secret 兩種 人工 bin www out ext 隱私 發現 一:本文的主要內容介紹 https的介紹 SSL證書的介紹 自簽名SSL證書介紹及生成方法 CA證書介紹及申請 二:https的簡單介紹 HTTPS(全稱:Hyper Text Transfer P

LInux初始學習基本命令使用

基礎1、type、file命令的區別:(1)type :用於查看一條命令是內置命令還是外部命令使用格式:type command若是內部命令,顯示 builtin若是外部命令,顯示為命令文件路徑;例子:[root@VM_0_2_centos /]# type cdcd is a shell builti

linux每日命令(9)cp命令

一.命令格式: cp [引數] source dest 或 cp [引數] source... directory 二.命令功能: 將原始檔複製至目標檔案,或將多個原始檔複製至目標目錄。 三. 命令引數: 引數 描述 -a

GreenPlum學習筆記create or replace function建立函式

  原始表資料如下:   需求:現要求按分號“;”將rate_item列進行分割後插入到新的資料表中。 CREATE OR REPLACE FUNCTION fun_gp_test_xxx_20181026(v_month int) RETURNS INT AS $BODY$ declare

Docker 學習 (2) 常用命令

日誌 映射 bash 自動退出 主機 run 做了 標簽 端口 Docker 學習 (2): 常用命令 命令行操作前提: systemctl start docker 啟動docker sudo -i 進去root模式 一、幫助命令 docker version

STM32CUBEMX使用經驗分享1軟體的簡單介紹

STM32CUBEMX是ST公司設計的一款免費軟體,軟體可以通過其官網下載。現在已經下載到。通過STM32CUBEMX可以完成從微控制器選型,程式初始化,中斷配置……工作。並生成對應的"HAL庫程式",其目前支援的編譯器包括EWARM,MDK-ARM V4,MDK-ARM V5,TreeSTUDIO,SW4S

JMeter學習(一)工具簡單介紹

一、JMeter 介紹      Apache JMeter是100%純JAVA桌面應用程式,被設計為用於測試客戶端/服務端結構的軟體(例如web應用程式)。它可以用來測試靜態和動態資源的效能,例如:靜態檔案,Java Servlet,CGI S

機器學習9“Hello World” of deep learning

一、框架 1、TensorFlow或者theano比較靈活,可以理解成微分器,你可以用來實現Gradient Decent,但用起來實際上是有難度的; 2、keras其實是TensorFlow或theano的API介面,可以幫助你快速做一個模型,現在TensorFlow預設使用Keras介面

Linux 命令簡單介紹第一課筆記

第一: 相對路徑和絕對路徑 相對路徑:從當前路徑開始進入blog資料夾 cd blog 絕對路徑:從跟目錄開始進入blog資料夾 cd /home/yq/Desktop/blog 全稱:根目錄下home檔案下的yq檔案下的Desktop檔案下的blog資料夾

Linux 命令簡單介紹第二課筆記

第一:touch touch 1.txt 建立檔案 第二:ls ls 用來檢視當前檔案中的內容,其中加上不同引數-a,-h,-l可以有不同的顯示,同事也可以將一個具體內容從定向到一個TXT檔案中:具體如下 第三:grep搜尋 grep:文字搜尋

Kafka學習筆記Kafka命令列工具

Kafka命令列工具 啟動Kafka kafka-server-start.sh /opt/software/kafka_2.11-1.1.0/config/server.properties & 檢視所有Topic列表 kafka-topics.sh --z