學習9:rosed命令的簡單介紹 + 建立ROS訊息和ROS服務。
肛了一波四級,希望這次能過把- -# 不想收集8張4級准考證啊……
用處不知道是幹嘛,主要可以直接編輯某個包裡的檔案。
1 rosed
1.1 介紹
使用方法如下
$ rosed [package_name] <tab>
舉個例子,假設我們想要編輯roscpp包裡的Logger.msg檔案,通常需要cd到這個裡面,然後再用vim開啟。這樣有時候很麻煩,這裡可以直接呼叫下面的程式碼完成同樣的功能
$ rosed roscpp Logger.msg2 訊息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
以及貌似是自定義類的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,並不需要。
相關推薦
學習9:rosed命令的簡單介紹 + 建立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