ros初步学习
1.学习文件系统工具的使用
1.0Tab补全
总是输入完整的软件包名称感觉比较繁琐,可以使用ROS工具的TAB补全的功能。
试着开始输入:
$ roscd roscpp_tut<<<按TAB键>>>
当按TAB键后,命令行应该会自动补充剩余部分:
$ roscd roscpp_tutorials/
现在试着输入:
$ roscd tur<<<按TAB键>>>
当按TAB键后,命令应该会尽可能地自动补充完整:
$ roscd turtle
然而,在这种情况下有许多软件包都以turtle开头。当再次按TAB键后会列出所有以turtle开头的ROS软件包:
-
turtle_actionlib/ turtlesim/ turtle_tf/
这时在命令行中仍然只输入了:
$ roscd turtle
现在在turtle后面输入s然后按TAB键:
$ roscd turtles<<<按TAB键>>>
因为只有一个软件包的名称以turtles开头,所以你应该会看到:
$ roscd turtlesim/
如果要查看当前安装的所有软件包的列表,你也可以利用TAB补全:
$ rosls <<<双击TAB键>>>
1.1使用rospack
rospack允许你获取软件包的有关信息。
用法:
$ rospack find [package_name]
比如:
$ rospack find roscpp
将会输出:
-
YOUR_INSTALL_PATH/share/roscpp
1.2使用roscd
roscd是rosbash命令集的一部分,它允许直接切换目录(cd)到某个软件包或者软件包集当中。
用法:
$ roscd [locationname[/subdir]]
示例:
$ roscd roscpp
使用Unix命令pwd输出工作目录:
$ pwd
会看到:
-
YOUR_INSTALL_PATH/share/roscpp
可以看到YOUR_INSTALL_PATH/share/roscpp和之前使用rospack find输出的路径是一样的。
注意,就像ROS中的其它工具一样,roscd只能切换到那些路径已经包含在ROS_PACKAGE_PATH环境变量中的软件包。要查看 ROS_PACKAGE_PATH中包含的路径,可以输入:
$ echo $ROS_PACKAGE_PATH
ROS_PACKAGE_PATH环境变量应该包含那些保存有ROS软件包的路径,并且每个路径之间用冒号(:)分隔开来。一个典型的ROS_PACKAGE_PATH环境变量如下:
-
/opt/ros/<distro>/base/install/share
跟其他环境变量路径类似,你可以在ROS_PACKAGE_PATH中添加更多的目录,每条路径使用冒号(:)分隔。
1.3子目录
roscd也可以切换到一个软件包或软件包集的子目录中。
执行:
$ roscd roscpp/cmake
$ pwd
应该会看到:
YOUR_INSTALL_PATH/share/roscpp/cmake
1.4roscd log
输入roscd log进入存储ROS日志文件的目录。
rosls 是rosbash命令集的一部分,它允许直接按软件包的名称执行 ls 命令(而不必输入绝对路径)。
用法:
$ rosls [locationname[/subdir]]
示例:
$ rosls roscpp_tutorials
应输出:
cmake launch package.xml srv
2.了解Catkin软件包
2.0package.xml文件:
这是一个包含软件包元信息的XML文件,提供关于软件包的描述、维护者信息、许可证信息以及依赖关系等。它必须符合Catkin规范。
2.1CMakeLists.txt文件:
这是一个用于构建软件包的CMake配置文件,它描述了如何编译、链接和安装软件包。Catkin软件包需要一个Catkin版本的CMakeLists.txt文件。
2.2目录结构:
每个Catkin软件包都应该有自己的目录,并且在同一个目录下不能有嵌套的或者多个软件包存在。通常,一个Catkin软件包的目录结构包括源代码、资源文件等。
在Catkin工作空间中,这些软件包通常会被组织在一个称为"src"的源文件空间目录中,并由一个顶级CMakeLists.txt文件来管理整个工作空间的构建过程。
要创建一个Catkin软件包,可以使用catkin_create_pkg命令,并指定软件包的名称和它的依赖项。然后,在Catkin工作空间中构建软件包,并确保配置文件已经生效。
总的来说,一个Catkin软件包由描述元信息的package.xml文件、构建配置的CMakeLists.txt文件和合适的目录结构组成。
3.了解如何构建Catkin软件包
要构建一个Catkin软件包,首先确保安装了该软件包的所有系统依赖项。然后,使用catkin_make命令来构建软件包。
- 进入Catkin工作空间的根目录:
$ cd ~/catkin_ws
2.使用source命令激活ROS环境(如果尚未设置):
$ source /opt/ros/<distro>/setup.bash
3.运行catkin_make命令:
$ catkin_make
这将会在Catkin工作空间中构建src目录下的所有Catkin软件包。在构建过程中,会看到一系列的CMake和make命令的输出信息。
在构建完成后,你可以在工作空间的build目录中找到构建过程的输出,而在devel目录中可以找到可执行文件和库文件。
总的来说,使用catkin_make命令可以方便地构建Catkin软件包,并生成构建所需的目录结构和文件。
4.理解ros节点
节点实际上只是ROS软件包中的一个可执行文件。ROS节点使用ROS客户端库与其他节点通信。节点可以发布或订阅话题,也可以提供或使用服务。
4.1roscore
roscore是在运行所有ROS程序前首先要运行的命令。
4.2rosnode
打开一个新终端,可以使用rosnode看看roscore运行时干了些什么( 记得要保持以前的终端开着,比如打开一个新的标签页,或者最小化之前的窗口)。
4.3rosrun
rosrun可以让你用包名直接运行软件包内的节点(而不需要知道包的路径)。
乌龟移动模型:
$ rosrun turtlesim turtlesim_node
通过键盘控制乌龟移动:
$ rosrun turtlesim turtle_teleop_key
5.ROS话题
turtlesim_node节点和turtle_teleop_key节点之间是通过一个ROS话题来相互通信的。turtle_teleop_key在话题上发布键盘按下的消息,turtlesim则订阅该话题以接收消息。
5.1rostopic
rostopic命令工具能获取ROS话题的信息。
5.2rostopic echo
rostopic echo可以显示在某个话题上发布的数据。
5.3rostopic list
rostopic list能够列出当前已被订阅和发布的所有话题。
5.4rostopic type
rostopic type命令用来查看所发布话题的消息类型。
5.5rostopic pub
rostopic pub可以把数据发布到当前某个正在广播的话题上。(可以控制乌龟以某种方式进行运动)
用法:
rostopic pub [topic] [msg_type] [args]
5.6rostopic hz
rostopic hz报告数据发布的速率。
5.7rqt_plot
rqt_plot命令可以在滚动时间图上显示发布到某个话题上的数据。这里我们将使用rqt_plot命令来绘制正被发布到/turtle1/pose话题上的数据。
6.理解ROS服务和参数
ROS服务:
服务(Services)是节点之间通讯的另一种方式。服务允许节点发送一个请求(request)并获得一个响应(response)。
6.1rosservice list
6.2rosservice type
6.3rosservice call
6.4rosparam list
6.5rosparam set和rosparam get
6.6rosparam dump和rosparam load
7.本周总结以及下周计划
7.1本周总结
本周初步了解ros的执行逻辑和原理,学习到了一些ros基本操作,了解如何使用ros创建一个软件包。
7.2下周计划
1. 搭建好地图,详细了解无人机上的已有代码,并在无人机上执行尝试。
2.继续学习ros相关操作,以便日后可以对ros代码进行调试与修改。
3.完成无人车省赛部分题目。