ROS操作系统入门(https://www.bilibili.com/video/av24585414/?p=5)
一、系统工程目录图
1、catkin+工作空间
catkin是ros定制的编译构建系统,对cmake的扩展
所有代码都存在catkin workspace
catkin_make初始化工作空间 (编译)
在终端中
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/ #回到工作空间
catkin_make
source ~/catkin_ws/devel/setup.bash # 编译完成后要source刷新环境
1.2、在这三个文件中只有src是写代码的地方
package是编译的基本单元
catkin编译的对象就是在src目录下一个又一个递归的package包
2、package
ros软件的基本组织形式;catkin编译的基本单元;一个package可以包含个可执行文件(节点)
├── CMakeLists.txt #package的编译规则(必须)
├── package.xml #package的描述信息(必须)
├── src/ #源代码文件
├── include/ #C++头文件
├── scripts/ #可执行脚本
├── msg/ #自定义消息
├── srv/ #自定义服务
├── models/ #3D模型文件
├── urdf/ #urdf文件
├── launch/ #launch文件
CMakeLists.txt: 定义package的包名、依赖、源文件、目标文件等编译规则,是package
不可少的成分
package.xml: 描述package的包名、版本号、作者、依赖等信息,是package不可少的成
分
src/: 存放ROS的源代码,包括C++的源码和(.cpp)以及Python的module(.py)
include/: 存放C++源码对应的头文件
scripts/: 存放可执行脚本,例如shell脚本(.sh)、Python脚本(.py)
msg/: 存放自定义格式的消息(.msg)
srv/: 存放自定义格式的服务(.srv)
models/: 存放机器人或仿真场景的3D模型(.sda, .stl, .dae等)
urdf/: 存放机器人的模型描述(.urdf或.xacro)
launch/: 存放launch文件(.launch或.xml)
一个package必须要有这两个文件CMakeLists.txt和 package.xml
2.2、CMakeLists.txt和 package.xml
2.2.1CMakeLists.txt
规定catkin编译的规则;
例如:源文件、依赖项、目标文件
具体的写法:
cmake_minimum_required() #CMake的版本号
project() #项目名称
find_package() #找到编译需要的其他CMake/Catkin package
catkin_python_setup() #catkin新加宏,打开catkin的Python Module的支持
add_message_files() #catkin新加宏,添加自定义Message/Service/Action文件
add_service_files()
add_action_files()
generate_message() #catkin新加宏,生成不同语言版本的msg/srv/action接口
catkin_package() #catkin新加宏,生成当前package的cmake配置,供依赖本包的其他软件包调用
add_library() #生成库
add_executable() #生成可执行二进制文件
add_dependencies()#定义目标文件依赖于其他目标文件,确保其他目标已被构建
target_link_libraries() #链接
catkin_add_gtest() #catkin新加宏,生成测试
install() #安装至本机
//
一般编译出问题多是CMakeLists.txt和它所在的依赖包
2.2.2、package.xml
定义package的属性
例如:报名、版本号、作者、依赖等
具体的写法:
<pacakge> 根标记文件
<name> 包名
<version> 版本号
<description> 内容描述
<maintainer> 维护者
<license> 软件许可证
<buildtool_depend> 编译构建工具,通常为catkin
<build_depend> 编译依赖项,与Catkin中的
<run_depend> 运行依赖项
</package> 根标记文件
3、通常我们需要改的地方是build和run这两个文件;
有时,有的package包下有manifest.xml(它是rosbuild编译系统(比较旧的编译系统)采用的包信息清单,累次catkin的package.xml)。
ros可执行代码文件一般有两种来源脚本(shell、python)和C++(头文件、源文件)
scripts路径用来放可执行脚本的文件(*.py、*.sh)
include文件放头文件(*.h)
src文件放源文件(*.cpp),有时还会出现python的文件脚本
通常还可以放一些
自定义通信格式
消息(msg)、服务(srv)、动作(action)
package可以放代码、通信格式、launch以及配置文件
launch文件(launch)、配置文件(yaml)(参数、设置等),配置文件一般是什么内容什么格式;
常有指令:
认识catkin_ws文件
tree -L 1目录
build放置的是中间文件和缓存
devel放置的是生成的目标文件
创建package.xml文件catkin_create_pkg test1
若要创建文件并添加依赖包
catkin_create_pkg test roscpp rospy std_msgs nav_msgs
依赖 通信 导航
1、cd ~/catkin_ws/src
克隆github的文件
git clone https://github.com/DroidAITech/ROS-Academy-for-Begnners.git
2、克隆的文件有些依赖没装,需下载
安装教学包所需的依赖
$ cd ~/catkin_ws
$ rosdep install --from-paths src --ignore-src --rosdistro=kinetic -y
$ rosdep install --from-paths src --ignore-src --rosdistro=kinetic -y
3、编译并刷新环境
catkin_make
source ~/tutorial_ws/devel/setup.bash
(rospack list测试 )
rospack list | grep tutorial_ws(管道操作一下)
由于source生命周期很短,将这一段放到barshrc文件下
echo “source ~/tutorial_ws/devel/setup.bash” >> ~/.bashrc
vi .bashrc(查看bashrc文件)
/
4、rosls topic_demo/
可以直接定义到所要查看的目录
rosed topic_demo CMakeLists.txt
可以直接定义到包里面的文件
roscd robot_sim_demo/
可以直接cd到功能包底下
robot_sim_demos仿真程序
launch
models放置博物馆的场景
param放置参数
scripts放置python脚本
urdf存放机器人模型参数
5、Metapacakge
软件包管理(虚包),自身没有内容,却依赖了其他的软件包;
Metapacakge
名称 描述 链接
navigation
导航相关的功能包集 https://github.com/ros-planning/navigation
moveit
运动规划相关的(主要是机械臂)功能包集 https://github.com/ros-planning/moveit
image_pipeline
图像获取、处理相关的功能包集 https://github.com/ros-perception/image_common
vision_opencv
ROS与OpenCV交互的功能包集 https://github.com/ros-perception/vision_opencv
turtlebot Turtlebot
机器人相关的功能包集 https://github.com/turtlebot/turtlebot
pr2_robot pr2
机器人驱动功能包集 https://github.com/PR2/pr2_robot
软件包 |
内容 |
---|---|
robot_sim_demo |
机器人仿真程序,大部分示例会用到这个软件包 |
topic_demo |
topic通信,自定义msg,包括C++和python两个版本实现 |