ROS初学者教程(一)(官方教程精简)

官方初学者教程太啰嗦了,精简压缩一下,便于使用查阅

1. 环境变量
  1. 打印ROS相关环境变量
    $ printenv | grep ROS
  2. 更新ROS环境变量
    $ source /opt/ros/<distro>/setup.bash
2. catkin工作空间
  1. 创建工作空间
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/
$ catkin_make
  1. 将工作空间加入环境变量
    $ source devel/setup.bash
  2. 检查工作空间环境变量是否配置成功
$ echo $ROS_PACKAGE_PATH
/home/baby/catkin_ws/src:/opt/ros/noetic/share
3. ROS文件系统
  1. 基本概念
    • Packages:包是ROS代码的基本组织单元,每个包可包含库、可执行文件、脚本及其他组件;
    • Manifests(package.xml):包的描述信息,包含所需的依赖,包的基础信息,包括版本、描述、License等。
  2. 文件系统工具
    • rospack find [package] :查找软件包;
    • roscd <package-or-stack>[/subdir]: 去包的根目录或子目录下;
    • roscd log: 去日志目录下;
    • rosls <package>[/subdir]:显示包根目录或子目录的文件

注: 这些工具自对ROS_PACKAGE_PATH环境变量下的包有效

4. 包的创建
  1. 包的组成
    • package.xml:提供包的基本信息
    • CMakeList.txt: 用于catkin构建
    • 单独的文件夹:一个目录不能包含多个包,也不能有嵌套包
  2. 包的创建:catkin_create_pkg
    需要先去src目录下:
$ cd ~/catkin_ws/src
$ catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
  1. 包的依赖
    • 查看直接依赖:rospack depends1 <package_name>
    • 查看所以依赖:rospack depends <package_name>
  2. package.xml文件详解
<?xml version="1.0"?>
      <package format="2">
      <name>beginner_tutorials</name>   <!-- 名称  -->
      <version>0.1.0</version>                  <!-- 版本 -->
      <description>The beginner_tutorials package</description> <!-- 描述 -->
    
      <maintainer email="you@yourdomain.tld">Your Name</maintainer> <!-- 维护者 -->
      <license>BSD</license> <!-- License -->
      <url type="website">http://wiki.ros.org/beginner_tutorials</url>
     <author email="you@yourdomain.tld">Jane Doe</author>
   
     <buildtool_depend>catkin</buildtool_depend>  <!-- 构建工具 -->
   
     <!-- 依赖列表 -->
     <build_depend>roscpp</build_depend>
     <build_depend>rospy</build_depend>
     <build_depend>std_msgs</build_depend>
   
     <!-- 运行时依赖 -->
     <exec_depend>roscpp</exec_depend>
     <exec_depend>rospy</exec_depend>
     <exec_depend>std_msgs</exec_depend>
   
  </package>
5. 包的编译

需要在工作空间根目录下, 然后将工作空间加入到ROS环境变量中。

$ cd ~/catkin_ws
$ catkin_make  # 会构建src目录
$ catkin_make install  # 可选步骤
$ . ~/catkin_ws/devel/setup.bash
6. ROS Node
  1. 基本概念
    • Node:ROS程序可执行单元,可提供服务或与其他Node通信;
    • Message:发布/订阅Topic时使用的数据类型;
    • rosout:等价于strout/stderr;
    • Master:ROS的名称服务节点,帮助其他Node发现对方;
    • Topic:Node可以发布或订阅Topic,实现彼此异步通信;
    • roscore:Mater + rosout + paramaster server;
  2. roscore
    roscore是使用ROS时第一个要运行的命令,会启动Master、rosout、parameter servcie;
  3. rosnode
    • rosnode list:列出所有node;
    • rosnode info <node>: 查看node详情;
    • rosnode ping <node>: 测试node是否up;
  4. rosrun
    • rosrun [package_name] [node_name]:启动node节点
      如:启动小乌龟程序:
      $ rosrun turtlesim turtlesim_node
      $ rosrun turtlesim turtle_teleop_key
      启动时可以改变node的名称:
      $ rosrun turtlesim turtlesim_node __name:=my_turtle
7. Topics
  1. rqt_graph
    rqt_graph可以图像化展示Topic及发布订阅着信息,启动命令:
    $ rosrun rqt_graph rqt_graph
  2. rostopic
    • rostopic echo [topic]: 打印Topic中的Msg
    • rostopic list -v: 列出所有的Topic
    • rostopic type [topic]: 查询Topic的Message类型
    • 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 pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 0.0}}'
    • rostopic hz [topic]: 统计Topic发布速率;
  3. rosmsg
    • rosmsg show [msg_type]: 查询message类型
    $ rostopic type /turtle1/cmd_vel
          geometry_msgs/Twist
    $ rosmsg show geometry_msgs/Twist
    

8. Service

  1. rosservice

rosservice list print information about active services
rosservice call call the service with the provided args
rosservice type print service type
rosservice find find services by service type
rosservice uri print service ROSRPC uri

  1. rosservice list: 列出可用的Service
  2. rosservice type [service]:查询Service的请求与相应参数类型
    如果显示的是std_srvs/Empty,说明这个Service不需要入参。
  3. rosservice call [service] [args]:调用一个Service
    先查询Service的入参及出参,再来调用,如:
$ rosservice type /spawn | rossrv show
  float32 x
  float32 y
  float32 theta
  string name
  ---
  string name
$ rosservice call /spawn 2 2 0.2 ""
9. Parameter Service
  1. rosparam可用于操作参数服务器

rosparam set set parameter
rosparam get get parameter
rosparam load load parameters from file
rosparam dump dump parameters to file
rosparam delete delete parameter
rosparam list list parameter names

  1. rosparam list: 列出参数服务的参数列表
  2. rosparam set [param_name] [value]: 设置参数
  3. rosparam get [param_name]: 获取参数值
  4. rosparam dump [file_name] [namespace]:导出参数到文件
    $ rosparam dump params.yaml
  5. rosparam load [file_name] [namespace]:从文件中加载参数
$ rosparam load params.yaml copy_turtle
$ rosparam get /copy_turtle/turtlesim/background_b

10. rqt_console

  1. rqt_console 和 rqt_logger_level
    启动:
$ rosrun rqt_console rqt_console
$ rosrun rqt_logger_level rqt_logger_level
11. roslaunch

roslauch可以一次启动多个Node,这些Node定义在launch文件中。
使用方式:$ roslaunch [package] [filename.launch]
使用案例:

  1. 创建包:
$ cd ~/catkin_ws/src
$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
  1. 创建launch文件
$ roscd beginner_tutorials
$ mkdir launch
$ cd launch

创建turtlemimic.launch文件,并粘贴以下内容:

<launch>  <!-- 标记这是launch文件 -->

  <group ns="turtlesim1"> <!-- 定义两个namespace,每个启动节点turtlesim -->
    <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
  </group>

  <group ns="turtlesim2">
    <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
  </group>

  <node pkg="turtlesim" name="mimic" type="mimic">  <!-- 启动Node -->
    <remap from="input" to="turtlesim1/turtle1"/>
    <remap from="output" to="turtlesim2/turtle1"/>
  </node>

</launch>

  1. 启动
    $ roslaunch beginner_tutorials turtlemimic.launch
12. rosed:编辑文件

使用方式:
$ rosed [package_name] [filename]
默认使用Vim编辑器,可通过环境变量设置使用的编辑器:
$ export EDITOR='nano -w'
可以将其加入~/.bashrc中。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容