[笔记]MOOC 机器人操作系统入门 ROS

catkin 工作空间与编译系统

[笔记]MOOC 机器人操作系统入门 ROS_第1张图片

  • 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用来刷新环境使之生效

执行完以上步骤
[笔记]MOOC 机器人操作系统入门 ROS_第2张图片

我们的代码只在src文件夹中编写,剩下两个是在catkin_make中自动生成。
因此,我们主要关注src中的文件——功能包package
[笔记]MOOC 机器人操作系统入门 ROS_第3张图片
package是carkin编译的基本单元

Package 组成

package是ros的基本组织形式
carkin编译的基本单元
一个package可以包含多个可执行文件(节点)
[笔记]MOOC 机器人操作系统入门 ROS_第4张图片

最简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_libraryadd_executable() 指定生成库文件、可执行文件
target_link_libraries() 指定可执行文件去链接哪些库
catkin_add_gtest() 添加测试单元
install() 生成可安装目标

package.xml

定义package属性,包名、版本号、作者、依赖项等
其模板类似于

   
                   
                
            
             
                
       
            #可能需要我们修改
              #可能需要我们修改
      
    

manifest.xml

rosbuild编译系统使用的包清单,类似于catkin的package.xml

ros中可执行程序的来源——代码文件

脚本(shell、python);c++ 头文件、源文件

[笔记]MOOC 机器人操作系统入门 ROS_第5张图片

通信格式

除了上述文件,还可以放置一些自定义的通信格式,如:

  • 消息(msg)
  • 服务(srv)
  • 动作(action)

[笔记]MOOC 机器人操作系统入门 ROS_第6张图片

launch以及配置文件

launch文件(launch)
配置文件(yaml)
比如多个可执行文件,不用一个个执行,将其放入launch,其可一次性执行多个可执行文件
[笔记]MOOC 机器人操作系统入门 ROS_第7张图片

整体

[笔记]MOOC 机器人操作系统入门 ROS_第8张图片

常用包管理指令

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
创建一个pkg

catkin_create_pkg  \[deps] #包需要的依赖

6、rosdep
安装某个pkg所需要的依赖

rosdep install \[plg_name]
sudo apt-get install tree

可以图形化显示工程结构目录
然后,创建ROS工作空间
[笔记]MOOC 机器人操作系统入门 ROS_第9张图片
初始化

catkin_make

[笔记]MOOC 机器人操作系统入门 ROS_第10张图片
只看一级目录

tree -L 1

7.png
先创建一个test1

catkin_create_pkg test1

[笔记]MOOC 机器人操作系统入门 ROS_第11张图片

再创建一个有依赖的包test2

catkin_create_pkg test2 roscpp rospy std_msgs nav_msgs

roscpp ros中c++编程的API
rospy ros中Python编程的API
std_msgs 涉及通信
nav_msgs 和导航相关

查看目录
[笔记]MOOC 机器人操作系统入门 ROS_第12张图片
可以发现,有依赖的包test2比没有依赖的test1多一个src文件夹
放头文件的include

再来看一下这两个包中的CMakeList.txtpackage.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

[笔记]MOOC 机器人操作系统入门 ROS_第13张图片

但是使用source命令只在一个命令框中有效,换了命令框又要再执行一次,为了解决这个问题,我们把它写入根目录下的.bashrc文件

echo "source ~/mooc/my_catkin_ws/devel/setup.bash" >> ~/.bashrc

因为Linux每打开一个终端都会执行一次.bashrc文件中的内容
我们可以查看一下.bashrc文件中的内容
[笔记]MOOC 机器人操作系统入门 ROS_第14张图片
其最后两行都是我们添加的,倒数第二行是安装ros时候添加的,最后一行也就是刚才加的.

rospack find test2

定位包的路径

查看文件

rosls topic_demo/

定位到包中文件

rosed topic_demo CMakeList.txt

cd到工程包中

roscd robot_sim_demo/

这其中就是仿真程序

查看一下里面的文件结构

tree

[笔记]MOOC 机器人操作系统入门 ROS_第15张图片
param 通常储存一些参数
scriptsPython脚本
urdf机器人模型参数

你可能感兴趣的:(机器人,linux)