[笔记]MOOC 机器人操作系统入门 ROS --(二)Workplace

in 网站建设
关注公众号【好便宜】( ID:haopianyi222 ),领红包啦~
阿里云,国内最大的云服务商,注册就送数千元优惠券:https://t.cn/AiQe5A0g
腾讯云,良心云,价格优惠: https://t.cn/AieHwwKl
搬瓦工,CN2 GIA 优质线路,搭梯子、海外建站推荐: https://t.cn/AieHwfX9

catkin 工作空间与编译系统

1.PNG

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

执行完以上步骤
2.PNG

我们的代码只在src文件夹中编写,剩下两个是在catkin_make中自动生成。
因此,我们主要关注src中的文件——功能包package
3.PNG
package是carkin编译的基本单元

Package 组成

package是ros的基本组织形式
carkin编译的基本单元
一个package可以包含多个可执行文件(节点)
4.PNG

最简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属性,包名、版本号、作者、依赖项等
其模板类似于

<package>   <!--根标签-->
    <name>               <!--包名-->
    <version>            <!--版本号-->
    <description>        <!--包描述-->
    <maintainer>         <!--维护者-->
    <license>            <!--软件许可-->
    <buildtool_depend>   <!--编译工具-->
    <build_depend>       <!--编译时的依赖--> #可能需要我们修改
    <run_depend>         <!--运行时的依赖--> #可能需要我们修改
<package>      <!--根标签-->
    

manifest.xml

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

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

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

5.PNG

通信格式

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

6.PNG

launch以及配置文件

launch文件(launch)
配置文件(yaml)
比如多个可执行文件,不用一个个执行,将其放入launch,其可一次性执行多个可执行文件
7.PNG

整体

8.PNG

常用包管理指令

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 <pkg_name> \[deps] #包需要的依赖


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

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

可以图形化显示工程结构目录
然后,创建ROS工作空间
Screenshot from 2019-12-22 10-29-34.png
初始化

catkin_make

5.png
再查看一下目录
9.png
Screenshot from 2019-12-22 10-35-58.png
只看一级目录

tree -L 1

7.png
先创建一个test1

catkin_create_pkg test1

8.png

再创建一个有依赖的包test2

catkin_create_pkg test2 roscpp rospy std_msgs nav_msgs

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

查看目录
9.png
可以发现,有依赖的包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
<buildtool_depend>catkin</buildtool_depend>
  • test2
<buildtool_depend>catkin</buildtool_depend>
<build_depend>nav_msgs</build_depend>
<build_depend>roscpp</build_depend>
<build_depend>rospy</build_depend>
<build_depend>rospystd_msgs</build_depend>
<build_export_depend>nav_msgs</build_export_depend>
<build_export_depend>roscpp</build_export_depend>
<build_export_depend>rospy</build_export_depend>
<build_export_depend>rospystd_msgs</build_export_depend>
<exec_depend>nav_msgs</exec_depend>
<exec_depend>roscpp</exec_depend>
<exec_depend>rospy</exec_depend>
<exec_depend>rospystd_msgs</exec_depend>

执行课程提供的的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

10.png

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

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

因为Linux每打开一个终端都会执行一次.bashrc文件中的内容
我们可以查看一下.bashrc文件中的内容
Screenshot from 2019-12-22 12-48-01.png
其最后两行都是我们添加的,倒数第二行是安装ros时候添加的,最后一行也就是刚才加的.

rospack find test2

定位包的路径

查看文件

rosls topic_demo/

定位到包中文件

rosed topic_demo CMakeList.txt

cd到工程包中

roscd robot_sim_demo/

这其中就是仿真程序

查看一下里面的文件结构

tree

Screenshot from 2019-12-22 12-56-22.png
param 通常储存一些参数
scriptsPython脚本
urdf机器人模型参数

Metapacakge

sudo apt-get install ros-kinetic-desktop-full

ros-kinetic-desktop-full就是Metapacakge
虚包,依赖许多组件
stack 软件包集

其中的CMakeList.txt

cmake_minimum_required(VERSION 2.8.3)
project(robot_navigation)
find_package(catkin REQUIRED)
catkin_metapackage() #声明当前包是metapackage

其依赖包在.xml文件中
将具有相似功能的安装包组合起来

metapackage名 描述 连接
moveit 运动规划相关(主要是机械臂) github网址
navigation 导航相关 github网址
image_pipeline 图形获取、处理等 github网址
vision_opencv ROS与OpenCV交互 github网址
turtlebot Turtlebot机器人相关 github网址
pr2_robot pr2机器人驱动 github网址
关注公众号【好便宜】( ID:haopianyi222 ),领红包啦~
阿里云,国内最大的云服务商,注册就送数千元优惠券:https://t.cn/AiQe5A0g
腾讯云,良心云,价格优惠: https://t.cn/AieHwwKl
搬瓦工,CN2 GIA 优质线路,搭梯子、海外建站推荐: https://t.cn/AieHwfX9
扫一扫关注公众号添加购物返利助手,领红包
Comments are closed.

推荐使用阿里云服务器

超多优惠券

服务器最低一折,一年不到100!

朕已阅去看看