02.ROS 空間灶壶、文件系統(tǒng)以及小烏龜

安裝好了ROS過后就可以開始下面ROS的工作環(huán)境了

主要參考下面文檔:CSDN ROS入門教程(一)

一陕靠、ROS的工作環(huán)境

1.1 管理ROS環(huán)境

確保ROS的環(huán)境變量已經被設置

# bash 中輸入下面的信息喳坠,會輸出一大串關于ROS的環(huán)境信息
printenv | grep ROS

1.2 創(chuàng)建ROS工作空間

ROS Groovy發(fā)布于2012年鞠评,在這版本以及之后的都使用catkin進行創(chuàng)建ROS工作空間的工作。

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

在工作空間首次運行 catkin_make 命令后壕鹉,它會在 ./src 目錄下創(chuàng)建一個 CMakeLists.txt 文件剃幌。

jet@jet-vm:~/catkin_ws$ ls
# 輸出如下
build devel src

devel 文件夾中會有幾個 setup.sh* 文件。source 命令執(zhí)行其中的文件會覆蓋工作空間頂層的環(huán)境晾浴。

source devel/setup.bash   
# 因為我這里使用的是默認的bash環(huán)境负乡,如果是zsh則是另外一個

查看是否修改了環(huán)境變量:

$echo $ROS_PACKAGE_PATH

jet@jet-vm:~/catkin_ws$ printenv | grep ROS

通過對比輸出可以發(fā)現(xiàn)環(huán)境變量中 ROS_PACKAGE_PATHROSLISP_PACKAGE_DIRECTORIES 發(fā)生了變化。

二脊凰、ROS文件系統(tǒng)

因為一開始安裝ROS的時候選項是 ros-kinetic-desktop-full 所以下面需要的文件系統(tǒng)已經安裝完畢了抖棘。

2.1 文件系統(tǒng)的概念

  • Packages:Packages是ROS代碼的軟件單元的一種組織方式,每個Package可以包含庫狸涌,可執(zhí)行程序切省,腳本等。

  • Manifests(Package.xml):manifest是一個package的描述文件帕胆,它定義了包之間的依賴朝捆,并用來捕獲包的元信息(meta information,元數據是關于數據的組織懒豹、數據域及其關系的信息芙盘,簡言之,元數據就是關于數據的數據脸秽。)儒老,例如版本,維護者豹储,證書等等贷盲。

2.3 文件系統(tǒng)工具

ROS代碼有獨有的包管理命令

  • rospack = ros+package

    rospack 可以獲取有關packages的信息,幫助命令是 rospack help

    jet@jet-vm:~/catkin_ws$ rospack find roscpp
    # 會輸出相關信息
    
  • roscd = ros+cd

    roscd 是 rosbash 的一部分剥扣,此命令可以切換到包的相關目錄中巩剖。

    jet@jet-vm:~/catkin_ws$ roscd roscpp
    jet@jet-vm:~/catkin_ws$ pwd
    

    注:ROS工具只尋找 ROS_PACKAGE_PATH 所列出路徑,其中的每個路徑用 ”:“ 進行分隔钠怯。

  • roscd log

    此命令會進入ROS的log文件夾佳魔,如果之前沒有運行過ROS程序則會報錯。

  • rosls = ros+ls

ROS工具中很多都是 ROS+XX組合的命令晦炊。

三鞠鲜、創(chuàng)建ROS Package

此章節(jié)使用 roscreate-pkgcatkin 創(chuàng)建一個新的package宁脊,并用rospack列出包的依賴關系。

3.1 一個catkin package的組成

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

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

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

    最簡單的package如下:

    my_package/
        CMakeLists.txt
        package.xml
    

3.2 catkin工作空間中的package

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

jet@jet-vm:~/catkin_ws$ tree
.
├── build
│   ├── atomic_configure
│   │   ├── env.sh
│   │   ├── local_setup.bash
│   │   ├── local_setup.sh
│   │   ├── local_setup.zsh
│   │   ├── setup.bash
│   │   ├── setup.sh
│   │   ├── _setup_util.py
│   │   └── setup.zsh
│   ├── catkin
│   │   └── catkin_generated
│   │       └── version
│   │           └── package.cmake
│   ├── catkin_generated
│   │   ├── env_cached.sh
│   │   ├── generate_cached_setup.py
│   │   ├── installspace
│   │   │   ├── env.sh
│   │   │   ├── local_setup.bash
│   │   │   ├── local_setup.sh
│   │   │   ├── local_setup.zsh
│   │   │   ├── setup.bash
│   │   │   ├── setup.sh
│   │   │   ├── _setup_util.py
│   │   │   └── setup.zsh
│   │   ├── order_packages.cmake
│   │   ├── order_packages.py
│   │   ├── setup_cached.sh
│   │   └── stamps
│   │       └── Project
│   │           ├── interrogate_setup_dot_py.py.stamp
│   │           ├── order_packages.cmake.em.stamp
│   │           ├── package.xml.stamp
│   │           └── _setup_util.py.stamp
│   ├── CATKIN_IGNORE
│   ├── catkin_make.cache
│   ├── CMakeCache.txt
│   ├── CMakeFiles
│   │   ├── 3.5.1
│   │   │   ├── CMakeCCompiler.cmake
│   │   │   ├── CMakeCXXCompiler.cmake
│   │   │   ├── CMakeDetermineCompilerABI_C.bin
│   │   │   ├── CMakeDetermineCompilerABI_CXX.bin
│   │   │   ├── CMakeSystem.cmake
│   │   │   ├── CompilerIdC
│   │   │   │   ├── a.out
│   │   │   │   └── CMakeCCompilerId.c
│   │   │   └── CompilerIdCXX
│   │   │       ├── a.out
│   │   │       └── CMakeCXXCompilerId.cpp
│   │   ├── clean_test_results.dir
│   │   │   ├── build.make
│   │   │   ├── cmake_clean.cmake
│   │   │   ├── DependInfo.cmake
│   │   │   └── progress.make
│   │   ├── cmake.check_cache
│   │   ├── CMakeDirectoryInformation.cmake
│   │   ├── CMakeError.log
│   │   ├── CMakeOutput.log
│   │   ├── CMakeRuleHashes.txt
│   │   ├── CMakeTmp
│   │   ├── download_extra_data.dir
│   │   │   ├── build.make
│   │   │   ├── cmake_clean.cmake
│   │   │   ├── DependInfo.cmake
│   │   │   └── progress.make
│   │   ├── doxygen.dir
│   │   │   ├── build.make
│   │   │   ├── cmake_clean.cmake
│   │   │   ├── DependInfo.cmake
│   │   │   └── progress.make
│   │   ├── feature_tests.bin
│   │   ├── feature_tests.c
│   │   ├── feature_tests.cxx
│   │   ├── Makefile2
│   │   ├── Makefile.cmake
│   │   ├── progress.marks
│   │   ├── run_tests.dir
│   │   │   ├── build.make
│   │   │   ├── cmake_clean.cmake
│   │   │   ├── DependInfo.cmake
│   │   │   └── progress.make
│   │   ├── TargetDirectories.txt
│   │   └── tests.dir
│   │       ├── build.make
│   │       ├── cmake_clean.cmake
│   │       ├── DependInfo.cmake
│   │       └── progress.make
│   ├── cmake_install.cmake
│   ├── CTestConfiguration.ini
│   ├── CTestCustom.cmake
│   ├── CTestTestfile.cmake
│   ├── gtest
│   │   ├── CMakeFiles
│   │   │   ├── CMakeDirectoryInformation.cmake
│   │   │   ├── gmock.dir
│   │   │   │   ├── build.make
│   │   │   │   ├── cmake_clean.cmake
│   │   │   │   ├── DependInfo.cmake
│   │   │   │   ├── depend.make
│   │   │   │   ├── flags.make
│   │   │   │   ├── link.txt
│   │   │   │   ├── progress.make
│   │   │   │   ├── src
│   │   │   │   └── usr
│   │   │   │       └── src
│   │   │   │           └── gtest
│   │   │   │               └── src
│   │   │   ├── gmock_main.dir
│   │   │   │   ├── build.make
│   │   │   │   ├── cmake_clean.cmake
│   │   │   │   ├── DependInfo.cmake
│   │   │   │   ├── depend.make
│   │   │   │   ├── flags.make
│   │   │   │   ├── link.txt
│   │   │   │   ├── progress.make
│   │   │   │   ├── src
│   │   │   │   └── usr
│   │   │   │       └── src
│   │   │   │           └── gtest
│   │   │   │               └── src
│   │   │   └── progress.marks
│   │   ├── cmake_install.cmake
│   │   ├── CTestTestfile.cmake
│   │   ├── gtest
│   │   │   ├── CMakeFiles
│   │   │   │   ├── CMakeDirectoryInformation.cmake
│   │   │   │   ├── gtest.dir
│   │   │   │   │   ├── build.make
│   │   │   │   │   ├── cmake_clean.cmake
│   │   │   │   │   ├── DependInfo.cmake
│   │   │   │   │   ├── depend.make
│   │   │   │   │   ├── flags.make
│   │   │   │   │   ├── link.txt
│   │   │   │   │   ├── progress.make
│   │   │   │   │   └── src
│   │   │   │   ├── gtest_main.dir
│   │   │   │   │   ├── build.make
│   │   │   │   │   ├── cmake_clean.cmake
│   │   │   │   │   ├── DependInfo.cmake
│   │   │   │   │   ├── depend.make
│   │   │   │   │   ├── flags.make
│   │   │   │   │   ├── link.txt
│   │   │   │   │   ├── progress.make
│   │   │   │   │   └── src
│   │   │   │   └── progress.marks
│   │   │   ├── cmake_install.cmake
│   │   │   ├── CTestTestfile.cmake
│   │   │   └── Makefile
│   │   └── Makefile
│   ├── Makefile
│   └── test_results
├── devel
│   ├── cmake.lock
│   ├── env.sh
│   ├── lib
│   ├── local_setup.bash
│   ├── local_setup.sh
│   ├── local_setup.zsh
│   ├── setup.bash
│   ├── setup.sh
│   ├── _setup_util.py
│   └── setup.zsh
└── src
    └── CMakeLists.txt -> /opt/ros/kinetic/share/catkin/cmake/toplevel.cmake

43 directories, 123 files
jet@jet-vm:~/catkin_ws$ 

3.3 創(chuàng)建一個catkin Package

  • 創(chuàng)建工作空間的方法在章節(jié):1.2 創(chuàng)建ROS的工作環(huán)境

  • 創(chuàng)建package代碼:

    # 示例
    catkin_create_pkg <package_name> [depend1][depend2][depend3]
    #具體命令
    $ cd ~/catkin_ws/src
    
    jet@jet-vm:~/catkin_ws/src$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
    Created file beginner_tutorials/package.xml
    Created file beginner_tutorials/CMakeLists.txt
    Created folder beginner_tutorials/include/beginner_tutorials
    Created folder beginner_tutorials/src
    Successfully created files in /home/jet/catkin_ws/src/beginner_tutorials. Please adjust the values in package.xml.
    jet@jet-vm:~/catkin_ws/src$ 
    

3.4 編譯catkin工作空間并source

//主要命令如下
$ cd ~/catkin_ws
$ catkin_make 
$ . ~/catkin_ws/devel/setup.bash
jet@jet-vm:~/catkin_ws/src$ cd ..
jet@jet-vm:~/catkin_ws$ catkin_make
Base path: /home/jet/catkin_ws
Source space: /home/jet/catkin_ws/src
Build space: /home/jet/catkin_ws/build
Devel space: /home/jet/catkin_ws/devel
Install space: /home/jet/catkin_ws/install
####
#### Running command: "cmake /home/jet/catkin_ws/src -DCATKIN_DEVEL_PREFIX=/home/jet/catkin_ws/devel -DCMAKE_INSTALL_PREFIX=/home/jet/catkin_ws/install -G Unix Makefiles" in "/home/jet/catkin_ws/build"
####
-- Using CATKIN_DEVEL_PREFIX: /home/jet/catkin_ws/devel
-- Using CMAKE_PREFIX_PATH: /opt/ros/kinetic
-- This workspace overlays: /opt/ros/kinetic
-- Using PYTHON_EXECUTABLE: /usr/bin/python
-- Using Debian Python package layout
-- Using empy: /usr/bin/empy
-- Using CATKIN_ENABLE_TESTING: ON
-- Call enable_testing()
-- Using CATKIN_TEST_RESULTS_DIR: /home/jet/catkin_ws/build/test_results
-- Found gmock sources under '/usr/src/gmock': gmock will be built
-- Found gtest sources under '/usr/src/gmock': gtests will be built
-- Using Python nosetests: /usr/bin/nosetests-2.7
-- catkin 0.7.18
-- BUILD_SHARED_LIBS is on
-- BUILD_SHARED_LIBS is on
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- ~~  traversing 1 packages in topological order:
-- ~~  - beginner_tutorials
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- +++ processing catkin package: 'beginner_tutorials'
-- ==> add_subdirectory(beginner_tutorials)
-- Configuring done
-- Generating done
-- Build files have been written to: /home/jet/catkin_ws/build
####
#### Running command: "make -j2 -l2" in "/home/jet/catkin_ws/build"
####
jet@jet-vm:~/catkin_ws$ . ~/catkin_ws/devel/setup.bash 
jet@jet-vm:~/catkin_ws$ 

3.5 package依賴

  • 一級依賴

    jet@jet-vm:~/catkin_ws$ rospack depends1 beginner_tutorials 
    roscpp
    rospy
    std_msgs
    jet@jet-vm:~/catkin_ws$ 
    # 此命令的輸出與創(chuàng)建package時傳入的參數一致坐漏,這些對packages的依賴存儲在package.xml 中
    
  • 間接依賴

    jet@jet-vm:~/catkin_ws$ rospack depends1 rospy
    genpy
    roscpp
    rosgraph
    rosgraph_msgs
    roslib
    std_msgs
    jet@jet-vm:~/catkin_ws$ 
    #一般情況下,一個依賴項目都有自己的依賴項碧信,rospack可以遞歸檢測所有的嵌套依賴赊琳。
    

3.6 定制package

  • 定制package.xml

    包括description,maintainer砰碴,lincense躏筏,dependencies(包括了 buildtool_depend,build_depend,exec_depend)

  • 定制CMakeLists.txt

四、編譯Package

4.1 編譯package

  • 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

五、ROS Nodes

本節(jié)引入ROS Graph的概念碴卧,并探討roscore弱卡,rosnode,rosrun的使用住册。

5.1 Graph的概念

  • Nodes:一個node表示一個使用ROS來與其他nodes進行通訊的可執(zhí)行程序婶博。

  • Messages:ROS的數據類型

  • Topics:Nodes可以向topic發(fā)布消息,也可以訂閱topic來接收消息荧飞。

  • Master:Name sevice for ROS(幫助節(jié)點找到彼此)

  • rosout:ROS下的stdout/stderr拍谐。

  • roscore:Master + rosout + parameter server

5.2 Nodes

在ROS package中狼速,一個Node實際上只不過是一個可執(zhí)行文件。ROS Nodes使用ROS client library與其他nodes進行通信。Nodes可以發(fā)布和訂閱一個Topic褒傅。Nodes也可以提供或使用一個sevice屹培。

5.3 Client Libraries

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

  • rospy = python client library

  • roscpp = C plus plus client library

5.4 roscore

roscore 是當你使用ROS時第一個應該運行的核心程序禁悠。

5.5 使用rosnode

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

# 列出活躍狀態(tài)的nodes
jet@jet-vm:~$ rosnode list
/rosout
jet@jet-vm:~$ rosnode info /rosout
--------------------------------------------------------------------------------
Node [/rosout]
Publications: 
 * /rosout_agg [rosgraph_msgs/Log]

Subscriptions: 
 * /rosout [unknown type]

Services: 
 * /rosout/get_loggers
 * /rosout/set_logger_level


contacting node http://jet-vm:41897/ ...
Pid: 2381

jet@jet-vm:~$ 

5.6 使用rosrun

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

# usage : rosrun [package_name] [nodename]
jet@jet-vm:~$ rosrun turtlesim turtlesim_node
[ INFO] [1565093878.731080946]: Starting turtlesim with node name /turtlesim
[ INFO] [1565093878.747198414]: Spawning turtle [turtle1] at x=[5.544445], y=[5.544445], theta=[0.000000]
# 彈出一個烏龜的窗口

ROS支持為node重新指定名字

$ rosrun turtlesim turtlesim_node __name:=my_turtle
jet@jet-vm: ~ $ rosnode list
/my_turtle
/rosout

可以使用 rosnode 的 ping 參數來測試是否node正常運行睛藻。

jet@jet-vm:~$ rosnode ping turtlesim
rosnode: node is [/turtlesim]
pinging /turtlesim with a timeout of 3.0s
xmlrpc reply from http://jet-vm:36863/  time=0.334024ms
xmlrpc reply from http://jet-vm:36863/  time=2.504826ms
xmlrpc reply from http://jet-vm:36863/  time=1.864910ms
xmlrpc reply from http://jet-vm:36863/  time=1.274824ms
xmlrpc reply from http://jet-vm:36863/  time=1.255035ms
^Cping average: 1.446724ms
jet@jet-vm:~$ 

如果出現(xiàn)上面的輸出代表已經成功運行了启上。

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

六、ROS Topics

本節(jié)引入ROS topics店印,與此同時使用rostopic和rqt_plot工具

6.1 準備工作

  • 確保roscore在運行冈在,在一個新打開的終端輸入roscore可進行測試。

  • 運行如下命令

    $ rosrun turtlesim turtlesim_node
    
  • 運行如下命令

    $ rosrun turtlesim turtle_teleop_key
    # 之后可以使用方向按鍵控制烏龜動起來了
    

6.2 ROS Topics

  • 使用 rqt-graph

    rqt-graph 創(chuàng)建系統(tǒng)的一個動態(tài)范圍按摘。rqt-graphrqt package 的一部分包券,安裝方法如下:

    # 按照正常安裝全部的方法都是已經安裝好了
    $ sudo apt-get install ros-kinetic-rqt
    $ sudo apt-get install ros-kinetic-rqt-common-plugins
    

    在終端中輸入以下命令會出現(xiàn)一個可視化窗口顯示nodes之間的關系纫谅。

    $ rosrun rqt_graph rqt_graph
    
  • 引入 rostopic

    rostopic 工具用來獲取 ROS topics。

  • 使用 rostopic echo

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

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

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

    jet@jet-vm:~$ rostopic list -v
    
    Published topics:
     * /turtle1/color_sensor [turtlesim/Color] 1 publisher
     * /turtle1/cmd_vel [geometry_msgs/Twist] 1 publisher
     * /rosout [rosgraph_msgs/Log] 3 publishers
     * /rosout_agg [rosgraph_msgs/Log] 1 publisher
     * /turtle1/pose [turtlesim/Pose] 1 publisher
    
    Subscribed topics:
     * /turtle1/cmd_vel [geometry_msgs/Twist] 2 subscribers
     * /rosout [rosgraph_msgs/Log] 1 subscriber
    
    jet@jet-vm:~$ 
    

6.3 ROS Messages

ropics上的通訊是通過在nodes之間發(fā)送 ROS messages進行的付秕。發(fā)布者和訂閱者必須發(fā)哦是那個和接收同種類型的消息。這意味著发魄,topic的類型是由發(fā)布在其上的message類型定義的盹牧。message的類型可通過 rostopic type [topic] 來查詢±祝可以使用 rosmsg show type 查看信息格式。

jet@jet-vm:~$ rostopic list -v

Published topics:
 * /turtle1/color_sensor [turtlesim/Color] 1 publisher
 * /turtle1/cmd_vel [geometry_msgs/Twist] 1 publisher
 * /rosout [rosgraph_msgs/Log] 3 publishers
 * /rosout_agg [rosgraph_msgs/Log] 1 publisher
 * /turtle1/pose [turtlesim/Pose] 1 publisher

Subscribed topics:
 * /turtle1/cmd_vel [geometry_msgs/Twist] 2 subscribers
 * /rosout [rosgraph_msgs/Log] 1 subscriber

jet@jet-vm:~$ rostopic type /turtle1/cmd_vel
geometry_msgs/Twist
jet@jet-vm:~$ rosmsg show geometry_msgs/Twist
geometry_msgs/Vector3 linear
  float64 x
  float64 y
  float64 z
geometry_msgs/Vector3 angular
  float64 x
  float64 y
  float64 z

jet@jet-vm:~$ 

6.4 rostopic 續(xù)

  • rostopic pub可以在一個topic上發(fā)布數據

    # Usage: rostopic pub [topic] [msg_type] [args]
    # 雙短線表示后邊的不是命令選項而是參數
    jet@jet-vm:~$ rostopic pub -l /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0,0.0,0.0]' '[0.0,0.0,1.0]'
    publishing and latching message. Press ctrl-C to terminate
    
    # 此時可以看到烏龜動了口柳,幾次執(zhí)行下來可以看到烏龜走了一個純圓苹粟。
    
1565098084483.png
  • rostopic hz 報告數據發(fā)布速率: $ rostopic hz [topic]
jet@jet-vm:~$ rostopic hz /turtle1/cmd_vel 
subscribed to [/turtle1/cmd_vel]
no new messages
no new messages
average rate: 4.828
    min: 0.144s max: 0.288s std dev: 0.04833s window: 6
average rate: 5.999
    min: 0.099s max: 0.288s std dev: 0.04975s window: 13
average rate: 7.209
    min: 0.042s max: 0.298s std dev: 0.06797s window: 23

當有數據變動的時候也就是有數據傳輸。

6.5 使用 rqt_plot

使用指令 $ rosrun rqt_plot rqt_plot 跃闹,添加需要查看的topic嵌削。

七、ROS Services and Parameters

本節(jié)介紹ROS Services and Parameters望艺,與此同時使用使用 rosservicerosparam 命令行工具苛秕。services 是nodes間進行通信的另一種方式,services 允許nodes發(fā)送一個請求(request)和接收一個響應(response)找默。

#Usage:
$ rosservice list [topic] #列出[topic]鎖提供的服務
$ rosservice type [service] # 顯示服務類型
$ rosservice call [service] [args] # 調用服務

# 查看帶參數的示例
rosservice find #find service by service type
rosservice uri  #print service ROSRPC uri
jet@jet-vm:~/work$ rosservice type /spawn | rossrv show
float32 x
float32 y
float32 theta
string name
---
string name

jet@jet-vm:~/work$ rosservice call /spawn 2 2 0.2 "" # name field is optional
name: "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 parameter 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
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市骡技,隨后出現(xiàn)的幾起案子鸣个,更是在濱河造成了極大的恐慌,老刑警劉巖布朦,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件囤萤,死亡現(xiàn)場離奇詭異,居然都是意外死亡喝滞,警方通過查閱死者的電腦和手機阁将,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來右遭,“玉大人做盅,你說我怎么就攤上這事缤削。” “怎么了吹榴?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵亭敢,是天一觀的道長。 經常有香客問我图筹,道長帅刀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任远剩,我火速辦了婚禮扣溺,結果婚禮上,老公的妹妹穿的比我還像新娘瓜晤。我一直安慰自己锥余,他們只是感情好,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布痢掠。 她就那樣靜靜地躺著驱犹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪足画。 梳的紋絲不亂的頭發(fā)上雄驹,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機與錄音淹辞,去河邊找鬼医舆。 笑死,一個胖子當著我的面吹牛桑涎,可吹牛的內容都是我干的彬向。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼攻冷,長吁一口氣:“原來是場噩夢啊……” “哼娃胆!你這毒婦竟也來了?” 一聲冷哼從身側響起等曼,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤里烦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后禁谦,有當地人在樹林里發(fā)現(xiàn)了一具尸體胁黑,經...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年州泊,在試婚紗的時候發(fā)現(xiàn)自己被綠了丧蘸。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡遥皂,死狀恐怖力喷,靈堂內的尸體忽然破棺而出刽漂,到底是詐尸還是另有隱情,我是刑警寧澤弟孟,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布贝咙,位于F島的核電站,受9級特大地震影響拂募,放射性物質發(fā)生泄漏庭猩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一陈症、第九天 我趴在偏房一處隱蔽的房頂上張望蔼水。 院中可真熱鬧,春花似錦录肯、人聲如沸徙缴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至疏叨,卻和暖如春潘靖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蚤蔓。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工卦溢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人秀又。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓单寂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親吐辙。 傳聞我的和親對象是個殘疾皇子宣决,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內容