亚洲欧洲国产欧美一区精品,激情五月亚洲色五月,最新精品国偷自产在线婷婷,欧美婷婷丁香五月天社区

      考試首頁 | 考試用書 | 培訓(xùn)課程 | 模擬考場 | 考試論壇  
        當(dāng)前位置:Linux認(rèn)證 > 綜合輔導(dǎo) > 文章內(nèi)容
        

      Linux教程:機(jī)器人操作系統(tǒng)ROS學(xué)習(xí)教程

      來源:robotos.net [ 2016年2月14日 ] 【

      描述:這篇教程涵蓋了如何生成并編譯msg和srv文件,及rosmsg,rossrv和roscp等命令工具的用法。

      1. msg和srv介紹

      •msg:msg文件是簡單的文本文件,用于描述ROS中消息(消息的各個參數(shù)項)。用于為不同的編程語言生成有關(guān)消息的源代碼。

      •srv:描述服務(wù)的文件,由兩部分組成:請求和反饋;

      msg文件放置在功能包的msg目錄下,srv文件放置在srv目錄下。

      msgs只是一些每行帶有類型和名字的文本文件,可以使用的類型如下:
      •        int8, int16, int32, int64 (plus uint*)
      •        float32, float64
      •        string
      •        time, duration
      •        other msg files
      •        variable-length array[] and fixed-length array[C]

      ROS中有一個比較特殊的類型:Header,它包含ROS系統(tǒng)中常用的時間戳和坐標(biāo)信息。一般在msg文件的第一行會指定為Header header。

      下面為msg的例子,這個例子使用了Header,string字符串及兩個其他類型的msgs。
        Header header
        string child_frame_id
        geometry_msgs/PoseWithCovariance pose
        geometry_msgs/TwistWithCovariance twist

      srv文件非常類似于msg文件,他們包含兩個部分,請求和反饋,這兩個部分被“---”分隔開,下面為srv的一個例子。
      int64 A
      int64 B
      ---
      int64 Sum

      在上面的例子中,A和B是用于請求的變量,而Sum是反饋的結(jié)果變量。

      2. Using msg
      2.1 Creating a msg

      我們在前面課程中創(chuàng)建的功能包里定義一個新的msg。

      $ cd ~/catkin_ws/src/beginner_tutorials
      $ mkdir msg
      $ echo "int64 num" > msg/Num.msg

      在上面例子中,*.msg文件只是簡單的包含一行(定義信息)。如果必要,可以如下所示添加多個元素來生成一個復(fù)雜的文件:
      string first_name
      string last_name
      uint8 age
      uint32 score

      還有一點(diǎn)需要確認(rèn)的是,msg文件需要轉(zhuǎn)換為C++,Python和其他編程語言的源代碼。

      打開package.xml文件,確保文件中存在下面兩行定義:

      message_generation
      message_runtime

      注意,在編譯時,需要依賴“message_generation”,而在運(yùn)行時,只需要依賴“message_runtime”。

      利用你喜歡的文本編輯器(前面課程學(xué)習(xí)的rosed是一個不錯的選擇)打開CMakeLists.txt文件。

      在CMakeLists.txt文件中添加message_generation到功能包查找項,以便于(節(jié)點(diǎn))調(diào)用它們生成消息。只需簡單的添加message_generation到COMPONENTS列表中即可,如下所示:
      # Do not just add this line to your CMakeLists.txt, modify the existing line
      find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation)

      你也許注意到即使沒有調(diào)用find_package中全部的依賴項,你的工程也可以正常編譯。這是因為catkin集成了所有的工程,也許前期別的工程調(diào)用了find_package,而你的工程使用了同樣的配置。但是如果單獨(dú)編譯時忘記添加,則將導(dǎo)致編譯失敗。

      同樣,需要確保運(yùn)行時的依賴項添加進(jìn)來:
      catkin_package(
        ...
        CATKIN_DEPENDS message_runtime ...
        ...)

      查找如下的代碼區(qū):
      # add_message_files(
      #  FILES
      #  Message1.msg
      #  Message2.msg
      # )

      去掉每行前面的注釋符號“#”,并用你自己的.msg替換Message*.msg文件,替換后如下所示:
      add_message_files(
        FILES
        Num.msg
      )

      通過手動添加.msg文件,確保了CMake在重新配置時知道這些新添加的.msg文件。

      2.2 Using rosmsg

      上面的介紹就可以產(chǎn)生一個msg文件了。借助于rosmsg show命令可以判斷ROS是否能檢測到它:

      用法:

      $ rosmsg show [message type]

      示例:

      [html] view plaincopyprint?$ rosmsg show beginner_tutorials/Num 

      $ rosmsg show beginner_tutorials/Num

      得到執(zhí)行結(jié)果:
      •        int64 num

      在前面的示例中,指令參數(shù)包含如下兩個部分:
      •        beginner_tutorials -- the package where the message is defined
      •        Num -- The name of the msg Num.

      如果你記不起msg文件存在于哪個功能包內(nèi),可以空缺功能包的名字:

      $ rosmsg show Num

      執(zhí)行結(jié)果如下所示:
      •        [beginner_tutorials/Num]:
      •        int64 num

      3. Using srv
      3.1 Creating a srv

      我們在剛剛創(chuàng)建的功能包中生成一個srv:

      $ roscd beginner_tutorials
      $mkdirsrv

      我們從另一個功能包中復(fù)制出一個srv,不必親自手動創(chuàng)建了。roscp是一個非常有用的命令行工具,用于從一個功能包拷貝文件到另一個功能包中。

      用法:

      $ roscp [package_name] [file_to_copy_path] [copy_path]

      現(xiàn)在我們拷貝rospy_tutorials功能包的服務(wù)

      $ roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv

      還有一步需要確認(rèn)的是,我們必須確保srv文件可以為C++,Python或其他語言轉(zhuǎn)換為源代碼。

      如果你在前面還沒有添加message_generation到CMakeLists.txt文件中,這里請確保把message_generation添加進(jìn)去,以便能夠生成消息:
      # Do not just add this line to your CMakeLists.txt, modify the existing line
      find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation)

      (沒錯,message_generation同時為msg和srv工作)

      同樣你也需要為消息和服務(wù)改變package.xml文件,查看上面附加的依賴項。

      去掉如下行前面的注釋符“#”
      # add_service_files(
      #  FILES
      #  Service1.srv
      #  Service2.srv
      # )

      把Service*.srv文件替換為自己的服務(wù)文件,替換后如下所示:
      add_service_files(
        FILES
        AddTwoInts.srv
      )

      3.2 Using rossrv

      上面的介紹就可以產(chǎn)生一個srv文件了。借助于rossrv show命令可以判斷ROS是否能檢測到它。

      用法:

      $ rossrv show

      示例:

      $ rossrv show beginner_tutorials/AddTwoInts

      將看到如下執(zhí)行結(jié)果:
      •        int64 a
      •        int64 b
      •        ---
      •        int64 sum

      與rosmsg類似,如下所示可以不指定功能包的名字來查找服務(wù)文件:

      $ rossrv show AddTwoInts

      [rospy_tutorials/AddTwoInts]:
      int64 a
      int64 b
      ---
      int64 sum

      4. Common step for msg and srv

      接下來在CMakeLists.txt中找到如下部分:
      # generate_messages(
      #  DEPENDENCIES
      # #  std_msgs  # Or other packages containing msgs
      # )

      去掉注釋并添加 .msg文件在生成消息時的所有依賴項(功能包),這里需要的是std_msg,添加后如下所示:
      generate_messages(
        DEPENDENCIES
        std_msgs
      )

      既然我們創(chuàng)建了一些新的消息,我們需要用make命令重新編譯這些功能包:
      # In your catkin workspace
      $ cd ../..
      $ catkin_make
      $ cd -

      在msg目錄下的所有.msg文件將會為我們支持的編程語言生成代碼。C++類型消息的頭文件會生成到~/catkin_ws/devel /include/beginner_tutorials/文件夾中;Python腳本文件將生成到~/catkin_ws/devel/lib /python2.7/dist-packages/beginner_tutorials/msg的文件夾中;Lisp語言文件生成到路徑~ /catkin_ws/devel/share/common-lisp/ros/beginner_tutorials/msg/內(nèi)。
      The full specification for the message format is available at the Message Description Language page.

      5. Getting Help

      我們已經(jīng)看到不少ROS命令工具了,如果記住每一個命令的參數(shù)將是非常困難的,幸運(yùn)的是,大部分ROS命令工具提供了幫助信息:

      如下所示:

      $ rosmsg -h

      •        You should see a list of different rosmsg subcommands.
      •        可以看到rosmsg中的各種二級命令(命令參數(shù)):
      •        Commands:
      •          rosmsg show Show message description
      •          rosmsg users  Find files that use message
      •          rosmsg md5  Display message md5sum
      •          rosmsg package  List messages in a package
        rosmsg packages List packages that contain messages

      也可以查看二級命令(命令參數(shù))的幫助信息:

      $ rosmsg show -h

      •        This shows the arguments that are needed for rosmsg show:
      •        下面顯示了rosmsg show所需的參數(shù)信息:
      •        Usage: rosmsg show [options]
      •       
      •        Options:
      •          -h, --help  show this help message and exit
        -r, --raw  show raw message text, including comments

      6. Review

      我們列舉出至今為止我們用到的命令工具:
      •        rospack = ros+pack(age) : provides information related to ROS packages
      •        rosstack = ros+stack : provides information related to ROS stacks
      •        roscd = ros+cd : changes directory to a ROS package or stack
      •        rosls = ros+ls : lists files in a ROS package
      •        roscp = ros+cp : copies files from/to a ROS package
      •        rosmsg = ros+msg : provides information related to ROS message definitions
      •        rossrv = ros+srv : provides information related to ROS service definitions
      •        rosmake = ros+make : makes (compiles) a ROS package

      7.Next Tutorial

      現(xiàn)在我們創(chuàng)建了一個新的msg和srv,下面我們簡單的編寫一個發(fā)布者及訂閱者(python及C++)。

      首頁 1 2 3 4 5 6 7 8 9 10 尾頁
      將考試網(wǎng)添加到收藏夾 | 每次上網(wǎng)自動訪問考試網(wǎng) | 復(fù)制本頁地址,傳給QQ/MSN上的好友 | 申請鏈接 | 意見留言 TOP
      關(guān)于本站  網(wǎng)站聲明  廣告服務(wù)  聯(lián)系方式  站內(nèi)導(dǎo)航  考試論壇
      Copyright © 2007-2013 中華考試網(wǎng)(Examw.com) All Rights Reserved