1. ROS文件系统和软件包简介

1、ROS文件系统

(1)功能包集(stack)

         将几个具有某种功能的包组织在一起,就是一个功能包集,在ROS 系统中,存在大量不同用途的功能包集,例如导航功能包集。

(2) 软件包(Packages)

         ROS应用程序代码组织单元,每个软件包都可以包含程序库、可执行文件、脚本、或其他手动创建的东西。

(3) 清单文件(package.xml)

         关于“软件包”相关信息的描述,用于定义软件包相关元信息之间的依赖关系,这些信息包括版本、维护者和许可协议等。

 (4)编译配置文件(CMakeLists.txt)

      使用cmake进行程序编译时,会根据CMakeLists.txt这个文件进行一步步处理,然后形成一个MakeFile文件,系统再通过这个文件设置进行程序编译。

2、文件系统工具

rospack:获取软件包的有关信息

rospack list:列出软件包以及路径

rospack list|grep cpp:过滤查找关键字的软件包并列出路径

roscd:直接切换到某个软件包或者软件包集中

rosls:直接按软件包名称而不是绝对路径执行ls命令

Tab补全

rosed:直接编辑某个软件包中的可编辑的文件//软件包得直接包含可执行文件

$rosed grid_map_visualization  GridMapVisualizationHelpers.cpp

roscp:直接从某个软件包中复制某个文件到指定目录下

$roscp  voice_system xf_tts.cpp .

$cp catkin_ws/src/voice _system/src/xf_tts.cpp .

把voice_system软件包下的xf_tts.cpp复制到当前目录下

3、创建和编辑ROS 软件包

(1)创建软件包

 在我们写任何程序之前,第一步是创建一个容纳我们的软件包工作区,然后再创建软件包本身。

   a、创建工作空间

 创建的工作区是一个文件夹,用于存储我们的软件包,可以任意命名,任意选择存储在home目录下。

$ mkdir  -p ros_workspace/src
  $tree   ros_workspace
  $tree rosworkspace/

 注:即使没有软件包,空的工作空间也可以编译,会在当前目录下生成build和level目录

$cd rosworkspace
$catkin_make

  对于很多用户,没必要使用多个ROS 工作区,但是ROS下的catkin编译系统,试图一次性编译同一工作区的所有功能包,因此涉及大量功能包或者独立项目时。维护多个工作区是必要的。

    b、创建软件包

    创建一个新的ROS软件包的命令应该再你的工作区的src目录下运行。   

$cd  rosworkspace/src
$catkin_create_pkg  test_pkg  std_msgs  rospy  roscpp

  (2)程序包的依赖关系

       a、一级依赖:在使用catkin_create_pkg命令时提供了几个程序包作为依赖包,现在我们可以使用rospack命令工具来查看一级依赖包。  

 $ rospack depends1 test_pkg
 package src
wtj@wtj:~/rosworkspace$ source devel/setup.bash
wtj@wtj:~/rosworkspace$ rospack depends1 test_pkg
roscpp
rospy
std_msgs

   

当新创建了工作空间时,ROS知道该空间的环境变量才能定位到该空间下的软件包,因此,为了方便每次打开终端都自动配置环境,需要再home目录下的.bashrc文件最下面添加如下信息:

source /opt/ros/kinetic/setup.bash    //系统空间下的环境变量

source   ~/rosworkspack/devel/setup.bash  //工作空间下的环境变量

rospack列出了运行在catkin_create_pkg命令时作为参数的依赖包,这些依赖包随后保存再package.xml文件中。

 b、间接依赖:在很多情况下,一个依赖包还会有它自己的依赖包,比如,rospy还有其他依赖包。

$ rospack  depends  test_pkg
wtj@wtj:~/rosworkspace$ rospack depends test_pkg
cpp_common
rostime
roscpp_traits
roscpp_serialization
catkin
genmsg
genpy
message_runtime
gencpp
geneus
gennodejs
genlisp
message_generation
rosbuild
rosconsole
std_msgs
rosgraph_msgs
xmlrpcpp
roscpp
rosgraph
rospack

注意:ROS包的命名遵循一个命名规范,只允许使用小写字母、数字和下划线,而且首字符必须是一个小写字母,一些ROS工具,包括catkin,不支持不遵循此命名规范的包。

(3)删除工作空间的软件包

删除不想要的工作空间的软件包,直接rm  -rf整个软件包目录即可,然后重新编译整个工作空间。

wtj@wtj:~/rosworkspace/src$ rm -rf test_pkg   //删除软件包

wtj@wtj:~/rosworkspace/src$ ls

CmakeLists.txt

wtj@wtj:~/rosworkspace/src$ cd ..

wtj@wtj:~/rosworkspace$ catkin_make     //重新编译

(4)编写测试代码

为了演示如何正确的编译软件包,我们需要在测试软件包test_pkg中编写一个测试代码才能演示如何编译软件包。

在test_pkg 包下的src中新建test.cpp并编辑

测试代码含义,创建一个话题,并向其中发送hello world字段。

$cd src

$touch test.cpp

$vim  test.cpp

#include"ros/ros.h"
#include"std_msgs/String.h"
#include"sstream"

int main(int argc,char **argv)
{
   ros::init(argc,argv,"talker");
   ros::NodeHandle n;

   ros::Publisher chatter_pub=n.advertise<std_msgs::String>("chatter",1000);
   ros::Rate loop_rate(10);
   int count =0;

   while(ros::ok())
   {
     std_msgs::String msg;
     std::stringstream ss;

     ss<<"hello word"<< count;
     msg.data=ss.str();

     ROS_INFO("%s",msg.data.c_str());
     chatter_pub.publish(msg);

     ros::spinOnce();
     loop_rate.sleep();
     ++count;
   }

return 0;
}

(5)编译软件包

主要修改CMakeList.txt这个配置文件。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目錄 前言 第一章 ROS简介 机器人时代的到来 ROS发展历程 什么是ROS 安装ROS 安装ROS-Academy-for-Beginners教学包 二进制与源码包 安装RoboWare Studio 单元测试一 第二章 ROS文件系统 Catkin编译系统 Catkin工作空间 Package软件包 CMakeLists.txt package.xml Metapacakge软件元包 其他常见文件类型 单元测试二 第三章 ROS通信架构(一) Node & Master Launch文件 Topic Msg 常见msg类型 单元测试三 第四章 ROS通信架构(二) Service Srv Parameter server 11.5.4 1.5.5 1.5.6 1.5.7 1.6 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.7 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 1.7.7 1.8 1.8.1 1.8.2 1.8.3 1.8.4 1.9 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.6.1 1.9.6.2 Action 常见srv类型 常见action类型 单元测试四 第五章 常用工具 Gazebo RViz Rqt Rosbag Rosbridge moveit! 单元测试五 第六章 roscpp Client Library与roscpp 节点初始、关闭与NodeHandle Topic in roscpp Service in roscpp Param in roscpp 时钟 日志与异常 第七章 rospy Rospy与主要接口 Topic in rospy Service in rospy Param与Time 第八章 TF与URDF 认识TF TF消息 tf in c++ tf in python 统一机器人描述格式 附录:TF数学基础 三维空间刚体运动---旋转矩阵 三维空间刚体运动---欧拉角 21.9.6.3 1.10 1.10.1 1.10.2 1.10.3 1.10.4 1.11 1.11.1 1.11.2 1.11.3 1.11.4 1.12 1.12.1 1.12.2 1.12.3 1.12.4 1.12.5 1.12.6 1.12.7 1.12.8 1.12.9 1.12.10 1.12.11 1.12.12 1.12.13 1.12.14 1.12.15 1.12.16 三维空间刚体运动---四元数 第九章 SLAM 地图 Gmapping Karto Hector 第十章 Navigation Navigation Stack move_base costmap Map_server & Amcl 附录:Navigation工具包说明 amcl local_base_planner carrot_planner clear_costmap_recovery costmap_2d dwa_local_planner fake_localization global_planner map_server move_base_msg move_base move_slow_and_clear navfn nav_core robot_pose_ekf rotate_recovery 3中国大学MOOC---《机器人操作系统入门》 课 程讲义
对于Ubuntu 22.04,你可以同时安装ROS1(Melodic Morenia)和ROS2(Foxy Fitzroy)。 要安装ROS1(Melodic Morenia),你可以按照以下步骤进行操作: 1. 添加ROS软件包仓库到你的系统。打开终端,并使用以下命令: ``` sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' ``` 2. 添加ROS密钥。在终端中运行以下命令: ``` curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add - ``` 3. 更新软件包索引。使用以下命令进行更新: ``` sudo apt update ``` 4. 安装ROS1桌面完整版。运行以下命令: ``` sudo apt install ros-melodic-desktop-full ``` 5. 初始化rosdep。输入以下命令以初始化rosdep: ``` sudo rosdep init rosdep update ``` 6. 设置环境变量。将以下命令添加到你的bashrc文件中: ``` echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc source ~/.bashrc ``` 现在,你已经成功安装了ROS1(Melodic Morenia)。 对于ROS2(Foxy Fitzroy),你可以按照以下步骤操作: 1. 添加ROS 2软件包仓库。打开终端,并使用以下命令: ``` sudo sh -c 'echo "deb [arch=amd64,arm64] http://packages.ros.org/ros2/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros2-latest.list' ``` 2. 设置键盘。在终端中运行以下命令: ``` curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add - ``` 3. 更新软件包索引。使用以下命令进行更新: ``` sudo apt update ``` 4. 安装ROS2-desktop。运行以下命令: ``` sudo apt install ros-foxy-desktop ``` 5. 设置环境变量。将以下命令添加到你的bashrc文件中: ``` echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc source ~/.bashrc ``` 现在,你已经成功安装了ROS2(Foxy Fitzroy)。 请注意,ROS1和ROS2是独立的软件包,它们使用不同的命名空间和通信机制。因此,在使用它们时需要注意区分。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值