catkin 工作空间与编译系统
- carkin workplace
catkin
为ros定制的编译构建系统,对cmake的扩展catkin workplace
组织和管理功能包的文件夹,以catkin为工具编译catkin workplace
需要用指令来创建
catkin_make
初始化工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
编译
cd ~/catkin_ws/ #回到工作空间
catkin_make
source ~/catkin_ws/devel/setup.bash
#source用来刷新环境使之生效
我们的代码只在src
文件夹中编写,剩下两个是在catkin_make中自动生成。
因此,我们主要关注src
中的文件——功能包package
package
是carkin编译的基本单元
Package 组成
package
是ros的基本组织形式
carkin编译的基本单元
一个package可以包含多个可执行文件(节点)
最简package
CMakeList.txt
CMakeList.txt
指定catkin编译规则
比如:源文件、依赖项、目标文件
cmake_minimum_required()
指定catkin最低版本project()
指定软件包名find_package()
指定编译时需要的依赖项add_message_files()
/add_service_files()
/ add_action_files()
添加消息文件/服务文件/动作文件generate_messages()
生成消息服务动作catkin_package()
指定catkin信息给编译系统生成Cmake文件add_library
、add_executable()
指定生成库文件、可执行文件target_link_libraries()
指定可执行文件去链接哪些库catkin_add_gtest()
添加测试单元install()
生成可安装目标
package.xml
定义package属性,包名、版本号、作者、依赖项等
其模板类似于
#可能需要我们修改
#可能需要我们修改
manifest.xml
rosbuild编译系统使用的包清单,类似于catkin的package.xml
ros中可执行程序的来源——代码文件
脚本(shell、python);c++ 头文件、源文件
通信格式
除了上述文件,还可以放置一些自定义的通信格式
,如:
- 消息(
msg
) - 服务(
srv
) - 动作(
action
)
launch以及配置文件
launch文件(launch)
配置文件(yaml)
比如多个可执行文件,不用一个个执行,将其放入launch,其可一次性执行多个可执行文件
整体
常用包管理指令
1、rospack
查找某个pkg的地址rospack find package_name
列出本地所有pkg
rospack list
2、roscd
跳转到某个pkg路径下roscd package_name
3、rosls
列举某个pkg下的文件信息rosls package_name
4、rosed (vi)
编辑pkg中的文件rosed package_name file_name
5、catkin_create_pkg
创建一个pkgcatkin_create_pkg
\[deps] #包需要的依赖
6、rosdep
安装某个pkg所需要的依赖rosdep install \[plg_name]
sudo apt-get install tree
catkin_make
tree -L 1
catkin_create_pkg test1
再创建一个有依赖的包test2
catkin_create_pkg test2 roscpp rospy std_msgs nav_msgs
roscpp
ros中c++编程的APIrospy
ros中Python编程的APIstd_msgs
涉及通信nav_msgs
和导航相关
查看目录
可以发现,有依赖的包test2比没有依赖的test1多一个src文件夹
放头文件的include
再来看一下这两个包中的CMakeList.txt
和package.xml
有什么不同CMakeList.txt
- test1
find_package(catkin REQUIRED)
- test2
find_package(catkin REQUIRED COMPONENTS nav_msgs roscpp rospy rospystd_msgs )
package.xml
- test1
catkin
- test2
catkin nav_msgs roscpp rospy rospystd_msgs nav_msgs roscpp rospy rospystd_msgs nav_msgs roscpp rospy rospystd_msgs
执行课程提供的的demo,记得放到工作空间下的src中
git clone https://github.com/sychaichangkun/ROS-Academy-for-Beginners.git
下面为上述网页中remaind中介绍的常用包
软件包 | 内容 |
---|---|
robot_sim_demo | 机器人仿真程序,大部分示例会用到这个软件包 |
topic_demo | topic通信,自定义msg,包括C++和python两个版本实现 |
service_demo | service通信,自定义srv,分别以C++和python两种语言实现 |
action_demo | action通信,自定义action,C++和python两种语言实现 |
param_demo | param操作,分别以C++和python两种语言实现 |
msgs_demo | 演示msg、srv、action文件的格式规范 |
tf_demo | tf相关API操作演示,tf示例包括C++和python两个版本 |
name_demo | 演示全局命名空间和局部命名空间下参数的提取 |
tf_follower | 制作mybot机器人 实现mybot跟随xbot的功能 |
urdf_demo | 创建机器人urdf模型,在RViz中显示 |
navigation_sim_demo | 导航演示工具包,包括AMCL, Odometry Navigation等演示 |
slam_sim_demo | 同步定位与建图演示,包括Gmapping, Karto, Hector等SLAM演示 |
robot_orbslam2_demo | ORB_SLAM2的演示 |
ros_academy_for_beginners | Metapacakge示例,依赖了本仓库所有的pacakge |
然后在你创建的工作空间中运行,其会安装demo中所需要使用的依赖,也就是定义在每个package下的xml文件中的东西
rosdep install --from-paths src --ignore-src --rosdistro=kinetic -y
然后编译我们的工作空间
catkin_make
再用source 刷新一下
source ~/catkin_ws/devel/setup.bash
注意一下上面的catkin_ws
是官方定义的工作空间名,像我的是my_catkin_ws
,对应的命令也就是source ~/mooc/my_catkin_ws/devel/setup.bash
使用该命令可以查看已在我们工作空间的包(和Python有点相似,每个工作空间是独立的,可以配不同的包)
rospack list | grep my_catkin_ws
但是使用source命令只在一个命令框中有效,换了命令框又要再执行一次,为了解决这个问题,我们把它写入根目录下的.bashrc
文件
echo "source ~/mooc/my_catkin_ws/devel/setup.bash" >> ~/.bashrc
因为Linux每打开一个终端都会执行一次.bashrc
文件中的内容
我们可以查看一下.bashrc
文件中的内容
其最后两行都是我们添加的,倒数第二行是安装ros时候添加的,最后一行也就是刚才加的.
rospack find test2
定位包的路径
查看文件
rosls topic_demo/
定位到包中文件
rosed topic_demo CMakeList.txt
cd到工程包中
roscd robot_sim_demo/
这其中就是仿真程序
查看一下里面的文件结构
tree