ROS 学习随笔
ROS框架安装
- ROS有许多不同版本,不同版本支持不同系统
- 我的ROS版本是 ROS Kinetic,它支持unbuntu15.10/16.04
ROS文件系统
- Packages:软件包,ROS应用代码的组织单元
- package.xml 软件包信息描述,定义软件包间的依赖关系
-
rospack
获取包相关信息rospack find [包名]
获取包名的路径 -
roscd [包名]
将工作目录切到包名中os只能切换到包含在
ROS_PACKAGE_PATH
环境变量中的包
log包保存了ROS的日志文件 rosls [包名]
对这个包名执行ls命令显示其中包含内容roscp [package_name] [file_to_copy_path] [copy_path]
复制文件从一个package到另一个错误检查工具
- 在/opt/ros/kinetic目录下用
roswtf
工具自检错误建立 catkin workspace工作空间
-
新建 catkin workspace
$ mkdir -p ~/catkin_ws/src $ cd ~/catkin_ws/ $ catkin_make 获得文件结构如
-
workspace结构:workspaceFile包含编译空间 开发空间 源空间 1 编译空间是编译用空间,在buid文件夹内
2 源空间在src文件夹内内部包含一个或多个catkin oackage包,用来存储源代码.
src中的CMakeLists.txt3 开发空间,在devel文件夹内
存储可执行文件与库文件
devel中的setup.sh中的一系列指令用来初始设置,可使用$ source devel/setup.bash 进行初始化(如将catkin包加入ROS_PACKAGE_PATH环境变量) ## ROS工作环境脚本
- 全局环境位于
/opt/ros/kinetic/setup.bash
- 每个工作空间环境在
空间目录/deve/setup.bash
建立ROS package程序包
-
程序包组成结构
my_package/ CMakeLists.txt package.xml 程序包元信息
-
程序包可放在catkin workspace中,结构如
workspace_folder/ -- WORKSPACE src/ -- SOURCE SPACE CMakeLists.txt -- 'Toplevel' CMake file, provided by catkin package_1/ CMakeLists.txt package.xml 包1清单 ... package_n/ CMakeLists.txt package.xml 包n清单
-
catkin_create_pkg [包名] [依赖名1]...[依赖名n]
创建程序包,可设置依赖包包应当创建在 workspace/src/目录下
将会自动生成CmakeLists.txt与package.xml
常用的依赖包有roscpp std_msgs rospy - package.xml结构
<description>The beginner_tutorials package</description> **描述标签** <maintainer email="user@todo.todo">user</maintainer> **维护者标签** <license>BSD</license> **许可标签** <buildtool_depend>catkin</buildtool_depend> <build_depend>roscpp</build_depend> **依赖标签**
程序包依赖关系
-
rospack depends1 [包名]
查看包名的一级依赖关系依赖关系保存在…/包名/package.xml中
rospack depends [包名]
递归检测所有依赖rosdep install --from-paths /path/to/your/catkin_ws/src --ignore-src
安装依赖
编译ROS程序包
-
前置条件是,系统安装了所需依赖,source环境配置(setup)
$ source /opt/ros/groovy/setup.bash
-
catkin_make
cmake+make 生成makefile.txt并编译在工作空间目录下,默认编译…/src中代码.
如该源码不再src中,则应该用
catkin_make --source [my_src]
输出编译信息到/build/c_cpp_properties.json
catkin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=Yes
-
使用
rosed [package_name] [filename]
编辑包下文件设置
$EDITOR
可修改rosed
的默认编辑器ROS Node节点
- 节点是使用ROS与其他Node通信的可执行文件
- Node节点可以publish or subscribe Topic主题
- Node 可以 provide or use Service服务
- 节点用/划分层次的方式命名,
-
rosnode list
列出当前活动节点使用
rosnode cleanup
来更新活动列表 rosnode info [节点名]
获取具体节点信息rosnode ping [节点名]
测试节点运行是否正常-
rosrun [包名] [节点名]
运行节点使用
rosrun [包名] [节点名] __name=[自定义名称]
自定义节点名,并启动
ROS launch 批量启动节点
roslaunch [package] [filename.launch]
filename.launch
是一个xml文件结构如下 ```xml
* 设置参数(setting parameters)
```xml
<launch>
<param name="somestring1" value="bar" />
<!-- force to string instead of integer -->
<param name="somestring2" value="10" type="str" />
<param name="someinteger1" value="1" type="int" />
<param name="someinteger2" value="2" />
<param name="somefloat1" value="3.14159" type="double" />
<param name="somefloat2" value="3.0" />
<!-- you can set parameters in child namespaces -->
<param name="wg/childparam" value="a child namespace parameter" />
<!-- upload the contents of a file to the server -->
<param name="configfile" textfile="$(find roslaunch)/example.xml" />
<!-- upload the contents of a file as base64 binary to the server -->
<param name="binaryfile" binfile="$(find roslaunch)/example.xml" />
</launch>
ROS master 帮助节点找到互相
*roscore
启动ROS master
ROS Topics主题(话题)
- ROS节点通过主题相互通信(主题即是订阅与发布的内容)
-
rostopic
显示topic主题的信息rostopic bw [主题名]
显示主题使用的带宽rostopic echo [主题名]
打印消息到屏幕rostopic hz [主题名]
显示主题的发布率
rostopic [主题名]
列表打印有关活动主题的信息rostopic pub [主题名]
将数据发布到主题rostopic [主题名]
类型的打印主题类型 rostopic list
列出当前所有主题-
rostopic type [主题名]
显示主题类型也是主题发送消息的类型类型名不以/开头 比如geometry_msgs/Twist
rosmsg show[主题类型名]
显示该类型的详细信息(数据结构)rostopic pub [主题名] [信息类型] [信息内容1 详细内容2 ....]
发布信息到主题
例如:
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -1 -- '{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0,y: 0.0,z: 0.0}}'
对应类型结构为
geometry_msgs/Vector3 linear
float64 x
float64 y
float64 z
geometry_msgs/Vector3 angular
float64 x
float64 y
float64 z
##主题录制与回放
-
rosbag record -a
录制当前发布的所有话题rostopic list -v 可查看当前发布的所有话题
rosbag info [bagfile]
查看录制文件信息rosbag play [bagfile]
公告后开始回放bagfile内容-d
设置等待时间-r
设置发布速率-O [outfile]
设置输出文件rosbagrecord [topicname]
设置录制话题消息(msg)
- msg文件是描述ROS中所使用消息类型的文本,会被用来生成不同语言的代码
- 存放在…/package/msg目录下
-
可使用的数据类型如下:
int8, int16, int32, int64 (plus uint*)
float32, float64
string
time, duration
other msg files
variable-length array[] 变长数组
fixed-length array[C] 定长数组
Header 特殊的类型含有时间戳和坐标系信息在std_msgs/msg/Header.msg中定义 - 配置步骤:
- 1.确保package.xml包含,用来转换为语言源码:
<build_depend>message_generation</build_depend> <exec_depend>message_runtime</exec_depend>
- 1.5 若有依赖包在package.xml中添加
<build_depend>std_msgs</build_depend> <build_depend>actionlib_msgs</build_depend>
-
2.在CMakeLists.txt中添加对message_generation的构建时依赖
利用find_package函数,在COMPONENTS列表里直接添加 message_generation
find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation }
- 3.运行时依赖 ``` catkin_package{ … CATKIN_DEPENDS message_runtime … }
- 4.添加msg文件表
add_message_files( FILES Message1.msg Message2.msg )
- 5.重新配置
generate_messages() 需要在添加msg\src文件后进行
- 6.配置消息文件依赖的含有.msg的package
generate_messages( DEPENDENCIES std_msgs )
-
重新编译后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/
服务(srv)
- 在srv文件夹下.srv文件描述一项服务
-
有请求与相应两部分构成以—分隔,如:
int64 A int64 B --- int64 Sum
- 配置步骤:
- 1.在CMakeLists.txt中添加对message_generation的构建时依赖
利用find_package函数,在COMPONENTS列表里直接添加 message_generation
find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation }
对message_generation对msg和srv都起作用
- 2.添加ser文件表
add_service_files( FILES Service1.srv Service2.srv )
- 3.重新配置并添加依赖
# generate_messages( # DEPENDENCIES # # std_msgs # Or other packages containing msgs # )
rqt 可视化查看节点交互情况
- rqt 中有许多ROS package 提供了不同的可视化功能
- 使用
rosrun [包名] [节点名]
启动 rqt_graph
包的rqt_graph
节点可以显示系统中节点通讯的结构rqt_plot
包的rqt_plot
节点可画出发布数据图rqt_console
包的rqt_console
节点是ROS日志框架的一部分,用来显示node节点输出信息-
rqt_logger_level
包的rqt_logger_level
可以修改日志等级说明日志等级由高至低
Fatal 毁灭性的
Error
Warn
Info
Debug rqt_tf_tree
包中的rqt_tf_tree
节点可以显示由tf广播的不同框架
ROS service服务
- 服务允许节点发送 request 并接收 response
rosservice list
显示活动中的服务列表rosservice type [服务名]
获得服务类型(输入输出数据结构)rosservice call [服务名] [args]
调用服务rossrv show [服务类型名]
显示该服务类型详细信息(数据结构)
ROS parameter server(参数服务)
- 使用YAML标记语言的语法:整数1 浮点数1.1 字符串one 布尔值true 列表[1,2,3] 字典{a: b,c: d}
-
rosparam
参数相关rosparam set [参数名] [值] 设置参数 rosparam get [参数名] 获取参数 rosparam get / 显示服务器上所有参数 rosparam load [加载文件] [命名空间] 从文件读取参数 rosparam dump [写入文件.yaml] 向文件中写入参数 rosparam delete 删除参数 rosparam list 列出参数名