官方初学者教程太啰嗦了,精简压缩一下,便于使用查阅
1. 环境变量
- 打印ROS相关环境变量
$ printenv | grep ROS
- 更新ROS环境变量
$ source /opt/ros/<distro>/setup.bash
2. catkin工作空间
- 创建工作空间
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/
$ catkin_make
- 将工作空间加入环境变量
$ source devel/setup.bash
- 检查工作空间环境变量是否配置成功
$ echo $ROS_PACKAGE_PATH
/home/baby/catkin_ws/src:/opt/ros/noetic/share
3. ROS文件系统
- 基本概念
- Packages:包是ROS代码的基本组织单元,每个包可包含库、可执行文件、脚本及其他组件;
- Manifests(package.xml):包的描述信息,包含所需的依赖,包的基础信息,包括版本、描述、License等。
- 文件系统工具
- rospack find [package] :查找软件包;
- roscd <package-or-stack>[/subdir]: 去包的根目录或子目录下;
- roscd log: 去日志目录下;
- rosls <package>[/subdir]:显示包根目录或子目录的文件
注: 这些工具自对ROS_PACKAGE_PATH环境变量下的包有效
4. 包的创建
- 包的组成
- package.xml:提供包的基本信息
- CMakeList.txt: 用于catkin构建
- 单独的文件夹:一个目录不能包含多个包,也不能有嵌套包
- 包的创建: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
- 包的依赖
- 查看直接依赖:rospack depends1 <package_name>
- 查看所以依赖:rospack depends <package_name>
- 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
- 基本概念
- Node:ROS程序可执行单元,可提供服务或与其他Node通信;
- Message:发布/订阅Topic时使用的数据类型;
- rosout:等价于strout/stderr;
- Master:ROS的名称服务节点,帮助其他Node发现对方;
- Topic:Node可以发布或订阅Topic,实现彼此异步通信;
- roscore:Mater + rosout + paramaster server;
- roscore
roscore是使用ROS时第一个要运行的命令,会启动Master、rosout、parameter servcie; - rosnode
- rosnode list:列出所有node;
- rosnode info <node>: 查看node详情;
- rosnode ping <node>: 测试node是否up;
- rosrun
- rosrun [package_name] [node_name]:启动node节点
如:启动小乌龟程序:
$ rosrun turtlesim turtlesim_node
$ rosrun turtlesim turtle_teleop_key
启动时可以改变node的名称:
$ rosrun turtlesim turtlesim_node __name:=my_turtle
- rosrun [package_name] [node_name]:启动node节点
7. Topics
- rqt_graph
rqt_graph可以图像化展示Topic及发布订阅着信息,启动命令:
$ rosrun rqt_graph rqt_graph
- 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发布速率;
- rosmsg
- rosmsg show [msg_type]: 查询message类型
$ rostopic type /turtle1/cmd_vel geometry_msgs/Twist $ rosmsg show geometry_msgs/Twist
8. Service
- 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
- rosservice list: 列出可用的Service
- rosservice type [service]:查询Service的请求与相应参数类型
如果显示的是std_srvs/Empty,说明这个Service不需要入参。 - 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
- 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
- rosparam list: 列出参数服务的参数列表
- rosparam set [param_name] [value]: 设置参数
- rosparam get [param_name]: 获取参数值
- rosparam dump [file_name] [namespace]:导出参数到文件
$ rosparam dump params.yaml
- rosparam load [file_name] [namespace]:从文件中加载参数
$ rosparam load params.yaml copy_turtle
$ rosparam get /copy_turtle/turtlesim/background_b
10. rqt_console
- 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]
使用案例:
- 创建包:
$ cd ~/catkin_ws/src
$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
- 创建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>
- 启动
$ roslaunch beginner_tutorials turtlemimic.launch
12. rosed:编辑文件
使用方式:
$ rosed [package_name] [filename]
默认使用Vim编辑器,可通过环境变量设置使用的编辑器:
$ export EDITOR='nano -w'
可以将其加入~/.bashrc中。