日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ROS入门教程(一)

發布時間:2024/8/1 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ROS入门教程(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文為原創博客, 轉載請注明出處:https://blog.csdn.net/q_z_r_s

機器感知
一個專注于SLAM、三維重建、機器視覺等相關技術文章分享的公眾號

開源地址:點擊該鏈接


參考自:http://wiki.ros.org/ROS/Tutorials
【Beginner Level】ROS入門教程(一)
【Beginner Level】ROS入門教程(二)
【Beginner Level】ROS入門教程(三)
【Beginner Level】ROS入門教程(四)
【Beginner Level】ROS入門教程(五)

Core ROS 教程(新手)

1. 安裝和配置ROS環境

安裝ROS: 詳見ROS安裝教程

1.1 管理ROS環境

確保ROS環境變量已被設置

printenv | grep ROS #輸出如下 linux@linux:~$ printenv | grep ROS ROS_ROOT=/opt/ros/indigo/share/ros ROS_PACKAGE_PATH=/opt/ros/indigo/share:/opt/ros/indigo/stacks ROS_MASTER_URI=http://localhost:11311 ROSLISP_PACKAGE_DIRECTORIES= ROS_DISTRO=indigo ROS_ETC_DIR=/opt/ros/indigo/etc/ros
1.2 創建ROS工作空間

關于catkin和rosbuild的選擇

ROS Indigo發布于2014年, ROS Groovy發布于2012, 根據官網說明, ROS Groovy及其之后的版本使用catkin, ROS Fuerte及更老的版本使用rosbuild, 因此, 我這里使用catkin

$ mkdir -p ~/catkin_ws/src $ cd ~/catkin_ws/ $ catkin_make

在工作空間中首次運行catkin_make命令后, 它會在./src目錄下創建一個CMakeLists.txt.

linux@linux:~/catkin_ws$ ls build devel src

在devel文件夾中, 有幾個setup.*sh的文件, source任何一個, 都將覆蓋工作空間頂層環境

$ source devel/setup.bash

輸入以下命令, 確保ROS_PACKAGE_PATH環境變量包含了當前路徑

$ echo $ROS_PACKAGE_PATH /home/youruser/catkin_ws/src:/opt/ros/kinetic/share #自己添加的, 非官網 linux@linux:~/catkin_ws$ printenv | grep ROS ROS_ROOT=/opt/ros/indigo/share/ros ROS_PACKAGE_PATH=/home/linux/catkin_ws/src:/opt/ros/indigo/share:/opt/ros/indigo/stacks ROS_MASTER_URI=http://localhost:11311 ROSLISP_PACKAGE_DIRECTORIES=/home/linux/catkin_ws/devel/share/common-lisp ROS_DISTRO=indigo ROS_ETC_DIR=/opt/ros/indigo/etc/ros

通過對比, 僅有ROS_PACKAGE_PATH和ROSLISP_PACKAGE_DIRECTORIES發生了變化

2. ROS文件系統
2.1 安裝ros-indigo-ros-turorials(安裝ROS時已經安裝過了)
sudo apt-get install ros-indigo-ros-tutorials
2.2 文件系統概念
  • Packages: Packages是ROS代碼的軟件單元的一種組織方式, 每個Package可以包含庫, 可執行程序, 腳本等.
  • Manifests(package.xml): manifest(中文: 清單)是一個package的描述文件. 它定義了包之間的依賴, 并用來捕獲包的元信息(meta information, 元數據是關于數據的組織、數據域及其關系的信息,簡言之,元數據就是關于數據的數據。), 例如版本, 維護者, 證書等等.
2.3 文件系統工具

ROS代碼分布于很多packages中, 使用諸如ls和cd這樣命令行來進行文件導航是及其繁瑣乏味的, 因此ROS提供了相關的工具來使用

  • 使用rospack

    rospack可以獲得有關packages的信息, 此處展示find命令, 幫助命令為rospack help

    linux@linux:~/catkin_ws$ rospack find roscpp /opt/ros/indigo/share/roscpp
  • 使用roscd

    roscd是rosbash的一部分, 此命令可以讓你直接把目錄改變到一個package中或一個stack中

    #語法, 可以直接進入某個package文件夾中 roscd [locationname[/subdir]] linux@linux:~/catkin_ws$ roscd roscpp linux@linux:/opt/ros/indigo/share/roscpp$ pwd /opt/ros/indigo/share/roscpp

    注: 和其他ROS工具類似, roscd只尋找ROS_PACKAGE_PATH所列出路徑, 其中的每個路徑用:來分隔.

  • roscd log

    此命令會進入ROS存儲log的文件夾, 如果執行此命令之前名優運行過ROS程序, 此命令會報錯, 找不到此文件夾.

    linux@linux:/opt/ros/indigo/share/roscpp$ roscd log No active roscore bash: cd: /home/linux/.ros/log: 沒有那個文件或目錄
  • 使用rosls

    rosls與roscd類似, 不多介紹.

  • Tab補全

    rosls, roscd, TAB都與Linux shell提供了同樣的功能, 不多介紹

2.4 總結
  • rospack = ros + pack(age)
  • roscd = ros + cd
  • rosls = ros + ls

此類書寫風格在ROS工具中很常用.

3. 創建ROS Package

此章節使用roscreate-pkg或catkin創建一個新的package, 并用rospack列出包的的依賴關系.

3.1 一個catkin package的組成
  • 必須包含一個catkin兼容的package.xml文件

  • 必須包含一個使用catkin的CMakeLists.txt

  • 每個package必須有自己的文件夾: 這意味著沒有嵌套的包,也沒有共享同一目錄的多個包.

    最簡單的package如下:

    my_package/CMakeLists.txtpackage.xml
3.2 catkin工作空間中的package

使用catkin packages工作的推薦方式是使用catkin工作空間, 當然也可以單獨建立一個catkin package. 一個普通的工作空間大概如下:

workspace_folder/ -- WORKSPACEsrc/ -- SOURCE SPACECMakeLists.txt -- 'Toplevel' CMake file, provided by catkinpackage_1/CMakeLists.txt -- CMakeLists.txt file for package_1package.xml -- Package manifest for package_1...package_n/CMakeLists.txt -- CMakeLists.txt file for package_npackage.xml -- Package manifest for package_n
3.3 創建一個catkin Package
  • 創建工作空間的方法見: 1.2 創建ROS工作空間

  • catkin_create_pkg <package_name> [depend1][depend2] [depend3]

    $ cd ~/catkin_ws/src $ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
3.4 編譯catkin工作空間并source
$ cd ~/catkin_ws $ catkin_make $ . ~/catkin_ws/devel/setup.bash
3.5 package依賴
  • 一級依賴: $ rospack depends1 beginner_tutorials

    此命令的輸出與穿件package時傳入的參數一致, 這些對packages的依賴存儲在package.xml中.

  • 間接依賴: $ rospack depends1 rospy

    大多數情況下, 一個依賴項都會有它自己的依賴. rospack可以遞歸檢測所有的嵌套依賴.

3.6 定制Package
  • 定制package.xml

    包括description, maintainer, license, dependencies(包括了buildtool_depend, build_depend, exec_depend)

  • 定制CMakeLists.txt

4. 編譯ROS Package
4.1 編譯Packages
  • catkin_make可以看做是組合調用了標準Cmake工作流: cmake, make

    # In a CMake project $ mkdir build $ cd build $ cmake .. $ make $ make install # (optionally) # In a catkin workspace $ catkin_make $ catkin_make install # (optionally)

    catkin_make命令將編譯src目錄下的所有工程. 對于源碼不在當前目錄下的使用方法為:

    # In a catkin workspace $ catkin_make --source my_src $ catkin_make install --source my_src # (optionally)
  • 編譯Package

    在當前工作空間中(~/catkin_ws/): catkin_make.

5. ROS Nodes

本節引入ROS graph的概念, 并探討roscore, rosnode, rosrun的使用.

5.1 Graph概念概覽
  • Nodes: 一個node表示一個使用ROS來與其他nodes進行通信的可執行程序.
  • Messages: ROS數據類型.
  • Topics: Nodes可以向topic發布消息,也可以訂閱topic來接收消息.
  • Master: Name service for ROS(即幫助節點找到彼此).
  • rosout: ROS下的stdout/stderr.
  • roscore: Master + rosout + parameter server
5.2 Nodes

在ROS package中, 一個node實際上只不過是一個可執行文件. ROS nodes使用ROS client library與其他nodes進行通信. Nodes可以發布和訂閱一個Topic. Nodes也可以提供或使用一個Service.

5.3 Client Libraries

ROS client library允許使用不同編程語言寫出來的nodes進行通信

  • rospy = python client library
  • roscpp = c++ client library
5.4 roscore

roscore是當你使用ROS時第一個應該運行的東西

5.5 使用rosnode

rosnode顯示當前正在運行的有關ROS nodes的信息

#列出活躍狀態的nodes $ rosnode list #顯示有關指定node的信息 $ rosnode info /rosout
5.6 使用rosrun

rosrun允許使用package名來直接運行一個package中的node(不用非得知道package的路徑).

#Usage: $ rosrun [package_name] [node_name] #run the turtlesim_node in the turtlesim package $ rosrun turtlesim turtlesim_node

ROS支持為node重新指定名字

$ rosrun turtlesim turtlesim_node __name:=my_turtle linux@linux:~$ rosnode list /my_turtle /rosout

可以使用$ rosnode ping my_turtle來測試是否真的跑起來了.

5.7 總結
  • roscore = ros + core: master(prodives name service for ROS) + rosout(stdout/stderr) + parameter server.
  • rosnode = ros + node: ROS tool to get information about a node.
  • rosrun = ros + run: runs a node from a given package.
6. ROS Topics

本節引入ROS topics, 與此同時使用rostopic和rqt_plot工具.

6.1 準備工作
  • 確保roscore在運行, 在一個新打開終端輸入roscore可進行測試
  • 運行$ rosrun turtlesim turtlesim_node
  • 運行$ rosrun turtlesim turtle_teleop_key, 使用方向鍵控制turtle移動
6.2 ROS Topics
  • 使用rqt-graph

    rqt-graph創建系統的一個動態圖. rtq-graph是rqt package的一部分, 安裝方法如下:

    $ sudo apt-get install ros-<distro>-rqt $ sudo apt-get install ros-<distro>-rqt-common-plugins

    在新終端中輸入:$ rosrun rqt_graph rqt_graph會出現一個可視化窗口, 顯示nodes之間的關系.

  • 引入rostopic

    rostopic工具用來獲取ROS topics.

  • 使用rostopic echo

    rostopic echo顯示發布在一個topic上的數據, 只有在運行之后有新的消息發布到topic上時才會有輸出.

    #Usage: $ rostopic echo [topic] $ rostopic echo /turtle1/cmd_vel
  • 使用rostopic list

    使用$ rostopic list -v列出所有的topics

6.3 ROS Messages

topics上的通信是通過在nodes之間發送ROS messages進行的. 發布者和訂閱者必須發送和接收同種類型的消息. 這意味著, topic的類型是由發布在其上的message類型定義的. message的類型可通過rostopic type [topic]來查詢. 可以使用rosmsg show type查看信息格式.

6.4 rostopic續
  • rostopic pub可以在一個topic上發布數據

    #Usage: $ rostopic pub [topic] [msg_type] [args] #雙短線表示后邊的不是命令選項 $ rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
  • rostopic hz報告數據發布速率: $ rostopic hz [topic]

6.5 使用rqt_plot

使用指令: $ rosrun rqt_plot rqt_plot, 添加需要查看的topic即可.

7. ROS Services and Parameters

本節介紹ROS Services and Parameters, 與此同時使用rosservice和rosparam命令行工具. Services是nodes間進行通信的另一種方式, Services允許nodes發送一個請求(request和接收一個響應(response).

#Usage: rosservice list [topic]#列出[topic]所提供的服務 rosservice type [service]#顯示服務類型 rosservice call [service] [args]#調用服務 #查看帶參數的示例 rosservice find #find services by service type rosservice uri #print service ROSRPC uri $ rosservice type /spawn | rossrv showfloat32 xfloat32 yfloat32 thetastring name---string name $ rosservice call /spawn 2 2 0.2 ""#name field is optionalname: turtle2

rosparam循序我們存儲和操作ROS Parameter Server上的數據, Parameter Server可以存儲整型, 浮點型, 布爾型, 字典, 列表. rosparam使用YAML標記語言語法.

#Usage: rosparam set [param_name] #set parameter #設置參數之后使用/clear服務刷新操作 $ rosservice call /clear rosparam get [param_name] #get parameter rosparam load #load parameters from file rosparam dump #dump parameters to file rosparam delete #delete parameter rosparam list #list parameter names #Usage: rosparam dump [file_name] [namespace] rosparam load [file_name] [namespace] #write all the parameters to the file params.yaml $ rosparam dump params.yaml # load these yaml files into new namespaces, e.g. copy $ rosparam load params.yaml copy $ rosparam get /copy/background_b

總結

以上是生活随笔為你收集整理的ROS入门教程(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。