ROS工程结构
catkin工作空间
catkin wprkspace
|--build
|--devel //开发空间,
|--src //由src文件夹递归向下查找功能表
| |--package1 //功能包,最基本的功能包只要有下面两个文件,其他根据需要添加
| | |--CMakeLists.txt //规定catkin的编译规则
| | |--package.xml //定义package的属性
| |--package2
| |--folder
| | |--package3
| | |--package4
#catkin_make 建立工作空间,在spacename文件夹下,必须要有src文件夹
$ mkdir -p ~/<spacename>/src
$ cd ~/<spacename>
$ catkin_make
#编译
$ cd ~/<spacename> #回到工作空间
$ catkin_make
$ source ~/<spacename>/devel/setup.bash #编译完后要source刷新环境
配置ROS环境
一般而言都会遇见一种ROS环境问题,即VScode无法识别ros.h头文件、无法实现Tab键补全、跳转等问题。我用以下方法解决问题。参考原文章1,参考原文章2
1. 官网安装deb版VScode
大家一般都会在ubuntu的软件商店下载VScode,但是用这种方法下载的VScode会出现无法输入中文等问题,建议大家去官网安装deb文件,可以解决这个问题,我就是用官网的deb版。
安装下载好的deb文件包
$ sudo dpkg -i <deb文件名>
2.安装VScode插件
在VScode 的插件栏安装以下插件
Code Runner;
ROS(Software);
ROS(Develop);
XML Tools。
3.生成compile_commands.json文件
在build文件夹下生成compile_commands.json
1)用catkin_make编译方式
$ catkin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=1
2)用catkin build编译方式
$ catkin config --cmake-args -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
$ catkin build
现在可以在VScode内识别ros.h文件并自动补全了。如果你的还不可以就参考那两篇文章,那两篇文章都需要配置json文件,比较麻烦。
ros指令
1、 rospack
查找某个pkg的地址
$ rospack find package_name
列出本地所有pkg
$ rospack list
2、 roscd
跳转到某个pkg路径下
$ roscd package_name
3、 rosls
列举某个pkg下的文件夹信息
$ rosls package_name
4、 rosed
编辑pkg中的 文件
$ rosed package_name file_name
5、catkin_create_pkg
创建一个pkg
$ catkin_create_pkg <pkg_name> [deps]
6、rosdep
安装某个pkg所需的依赖,当你从别处下载pkg时用这条命令来安装这个pkg所需的依赖包
$ rosdep install [pkg_name]
7、rosnode
查看节点信息
list;查看当前运行的节点
#显示当前正在运行的ROS节点
$ rosnode list
info;命令返回的是某个指定节点的信息
#查看rosout节点的详细信息
$ rosnode info /rosout
ping;测试节点是否正常
#测试rosout节点是否正常工作
$ rosnode ping rosout
8、rosrun
rosrun可以在不需要知道包的路径,而直接运行软件功能包的节点。用法如下
$ rosrun [package_name] [node_name]
rosrun可以重映射节点名词
#将节点名turtlesim_node改变为my_turtle
$ rosrun turtlesim turtlesim_node __name:=my_turtle
rqt_graph图形化界面观看当前运行的所有ros节点之间的关系,使用前必须先安装rqt_graph。
使用方法
#安装rqt_graph
#将<distro>替换成你安装的ROS发行版简称(比如kinetic或noetic等)
$ sudo apt-get install ros-<distro>-rqt
$ sudo apt-get install ros-<distro>-rqt-common-plugins
#运行rqt_graph查看节点关系
$ rosrun rqt_graph rqt_graph
9、roslaunch
$ roslaunch <pack_name> <*.launch>
10、rosbag record
记录当前发布的话题的内容
#-a 参数表明所有的话题都积累在同一个bag文件中
$ rosbag record -a
#记录指定话题数据到特定的bag文件中。将 topic1和topic2的数据记录到<bagfile name>文件中
$ rosbag record -o <bagfile name> <topic1 name> <topic2 name>
# 用info命令检测<bagfile name>的文件内容
$ rosbag info <bagfile name>
# 回放<bagfile name>中话题的运行过程
$ rosbag play <bagfile name>
# 从第20s开始回放<bagfile name>
$ rosbag play -20 <bagfile name>