ROS基础(一)

一、ROS文件系统

rospack:获取软件包的有关信息

$ rospack find [包名称]

返回软件包的路径信息

roscd:直接切换工作目录到某个软件包或者软件包集当中

$ roscd [本地包名称[/子目录]]

注:就像ROS中的其它工具一样,roscd只能切换到那些路径已经包含在ROS_PACKAGE_PATH环境变量中的软件包,要查看ROS_PACKAGE_PATH中包含的路径可以输入:

$ echo $ROS_PACKAGE_PATH

(ROS_PACKAGE_PATH环境变量应该包含那些保存有ROS软件包的路径,并且每个路径之间用冒号分隔开来。一个典型的ROS_PACKAGE_PATH环境变量如下:
/opt/ros/indigo/base/install/share:/opt/ros/indigo/base/install/stacks)
跟其他路径环境变量类似,你可以在ROS_PACKAGE_PATH中添加更多其它路径,每条路径使用冒号’:'分隔。
另:
①使用roscd也可以切换到一个软件包或软件包集的子目录中。(如:$ roscd roscpp/cmake)
②使用roscd log可以切换到ROS保存日记文件的目录下。需要注意的是,如果你没有执行过任何ROS程序,系统会报错说该目录不存在。

rosls:直接按软件包的名称而不是绝对路径执行ls命令(罗列目录)

$ rosls [本地包名称[/子目录]]

ROS工具支持TAB自动完成输入的功能

二、创建ROS程序包

一个程序包要想称为catkin程序包必须符合以下要求:
①包含package.xml(提供有关程序包的元信息)
②包含CMakeLists.txt(metapackages必须包含对它的引用)
③每个目录下只能有一个程序包(即同一目录下不能嵌套或有多个包存在)

第一步:创建工作空间

1.$ mkdir -p catkin_ws/src
创建工作空间目录(也可以不叫catkin_ws)
2.$ cd ~/catkin_ws/
3.$ catkin_make(编译软件包)
4.通过$ source devel/setup.bash添加工作空间下的/devel/setup.bash文件的路径
注:为了不用每次打开终端都source这个软件包,我们可以修改整个环境:
$ gedit ~/.bashrc
②把编辑文本拉至最后,添加:$ source ~/catkin_ws/devel/setup.bas
5.要确保您的工作区被安装脚本正确覆盖,请确保ROS_PACKAGE_PATH环境变量包含您所在的目录。

$ echo $ROS_PACKAGE_PATH /home/youruser/catkin_ws/src:/opt/ros/indigo/share

第二步:创建软件包

软件包一般在工作空间的src下创建,否则ros无法定位。命名避免与指令名相同,不能以数字或者符号开头,且不允许有大写字母

创建软件包:$ catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
(package_name表示包名,depend各种依赖,依赖包保存在package.xml文件)

依赖分为一级依赖(创建软件包的过程添加的依赖)和间接依赖(各依赖项之间的关系)

命令 作用
$ rospack depends1 package_name 查看一级依赖
$ rospack depends package_name 查看所有依赖

删除软件包:直接使用rm指令,并重新编译

三、编译ROS程序包

$ cd ~/catkin_ws/
$ catkin_make

编译src文件夹下所有catkin工程
(若不在默认的src中,比如说存放在了my_src中,那么你可以这样来使用
$catkin_make:catkin_make --source my_src

编译之后在catkin_ws下生成build、devel和原有的src
build 目录是build space的默认所在位置,同时cmake 和 make也是在这里被调用来配置并编译你的程序包。devel 目录是devel space的默认所在位置, 同时也是在你安装程序包之前存放可执行文件和库文件的地方。

四、理解 ROS节点

roscore 是你在运行所有ROS程序前首先要运行的命令。

rosnode:显示当前运行的ROS节点信息
rosnode list :指令列出活跃的节点
rosnode info :返回的是关于一个特定节点的信息(如:$ rosnode info /rosout
可以通过ping来测试节点(如:$ rosnode ping my_turtle

rosrun:允许你使用包名直接运行一个包内的节点(而不需要知道这个包的路径)

五、理解ROS话题

rqt_graph:能够创建一个显示当前系统运行情况的动态图形。(查看node和它们之间的topic)

$ rosrun rqt_graph rqt_graph

rostopic命令工具能让你获取有关ROS话题的信息。
你可以使用帮助选项查看rostopic的子命令:

$ rostopic -h
rostopic bw    display bandwidth used by topic
rostopic echo    print messages to screen
rostopic hz     display publishing rate of topic
rostopic list     print information about active topics
rostopic pub    publish data to topic
rostopic type    print topic type

rostopic echo:可以显示在某个话题上发布的数据。

$ rostopic echo [topic]

rostopic list:能够列出所有当前订阅和发布的话题。
让我们查看一下list子命令需要的参数,在一个新终端中运行:

$ rostopic list -h
Usage: rostopic list [/topic]

Options:
  -h, --help          show this help message and exit
  -b BAGFILE, --bag=BAGFILE  list topics in .bag file
  -v, --verbose                  list full details about each topic
  -p                                  list only publishers
  -s                                  list only subscribers

rostopic type:查看所发布话题的消息类型。

$rostopic type [topic]

rosmsg:查看消息的详细情况。

$rosmsg show [topic]

rostopic pub:把数据发布到当前某个正在广播的话题上。

$ rostopic pub [topic] [msg_type] [args]

常用选项:
-l  使rostopic发布一条消息之后马上退出
如:$ rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
/turtle1/command_velocity:消息所发布到的话题名称。
turtlesim/Velocity:所发布消息的类型。
–(双破折号):这会告诉命令选项解析器接下来的参数部分都不是命令选项。这在参数里面包含有破折号-(比如负号)时是必须要添加的。
‘[2.0, 0.0, 0.0]’ ‘[0.0, 0.0, 1.8]’:相关信息。(可以用$rosmsg show [topic]查看)

另:$ rostopic pub -r命令来发布一个稳定的命令流
如:$ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
这条命令以1Hz的频率发布速度命令到速度话题上。

rostopic hz:查看数据发布的频率。

$ rostopic hz [topic]

rqt_plot:实时显示一个发布到某个话题上的数据变化图形。

$ rosrun rqt_plot rqt_plot

猜你喜欢

转载自blog.csdn.net/pomo16/article/details/82819650