栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

创建工作空间和功能包

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

创建工作空间和功能包

1、工作空间(workspace)是一个存放工程开发相关文件的文件夹,包括:

  • src:代码空间(Source Space)                   放置功能包   代码文件  launch文件 CMakeLists.txt
  • build:编译空间(Build Space)                   编译过程产生的中间文件
  • devel:开发空间(Development Space)     可执行文件  库  脚本文件  代码在此运行
  • install:安装空间(Install Space)
# 创建工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace   这是属性的变化,执行后会产生CMakeList.txt文件

# 编译工作空间          必须在工作空间路径下才可以编译
cd ~/catkin_ws
catkin_make             编译工作空间下所有功能包的源码  产生src build  devel文件夹
catkin_make install     产生install 文件夹

可见一般情况下最常用的是src文件

2、创建功能包

# 创建功能包
catkin_create_pkg  [depend1] [depend2] [depend3]

cd ~/catkin_ws/src
catkin_create_pkg example_cpp(功能包名字) std_msgs roscpp 
例如 catkin_create_pkg test_pkg std_msgs roscpp rospy

其中std_msgs是通信文件,数据流,消息的发送和接收

创建完功能包后,功能包下面包含以下文件

3、编译与设置环境变量

catkin_make              编译

source devel/setup.bash   设置环境变量
source ~/catkin_ws/devel/setup.bash  将其添加到.bash文件中,不用每次重新设置环境变量

echo $POS_PACKAGE_PATH         检查环境变量  查找所有功能包的路径

package.xml的内容



  test_pkg      //功能包名字
  0.0.0   //版本
  The test_pkg package  

  
  
  
  mxh2     //Emil


  
  
  
  TODO       


  
  
  
  


  
  
  
  


  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  catkin       //功能包依赖
  roscpp
  rospy
  std_msgs
  roscpp
  rospy
  std_msgs
  roscpp
  rospy
  std_msgs


  
  
    

  

注:

同一个工作空间下,不允许存在同名功能包,不同工作空间下,允许尊在同名功能包

在~/catkin_ws/src/test_pkg/src$下

4、创建文件夹      

touch example_public.cpp      touch example_subscriber.cpp

其中example_subscriber.cpp  example_public.cpp可任意命名

发布者publisher的编程实现

#include 
#include 
#include 
int main(int argc,char **argv)
{
    ros::init(argc,argv,"example_public");       //a)
    ros::NodeHandle n;                           //b)
    ros::Publisher chatter_pub = n.advertise("message",1000);    //c)
    ros::Rate loop_rate(10);                     //d)
    while(ros::ok())                     //中断,遇到ctrl+c时候中断
    {
        std_msgs::String msg;            //申请内存
        std::stringstream ss;                  //信息内容变量
        ss << "I am publisher ";         //写入变量
        msg.data = ss.str();             //写入内存
        chatter_pub.publish(msg);        //调用发布函数
        loop_rate.sleep();               //发送频率
    }
    return 0;
}

example_subscriber.cpp

#include 
#include 
void chatterCallback(const std_msgs::String::ConstPtr& msg)
{
    ROS_INFO("I heard: [%s]",msg->data.c_str()); //接收的消息
}
int main(int argc,char **argv)
{
    ros::init(argc,argv,"example_subscriber");    //a)
    ros::NodeHandle n;                            //b)
    ros::Subscriber sub = n.subscribe("message",1000,chatterCallback);    //c)
    ros::spin();                                  //回调函数
    return 0;
}

5、修改~/catkin_ws/src/test_pkg/src下的CMakeList文件(在末尾加以下内容即可)

include_directories(
    include
    ${catkin_INCLUDE_DIRS}
)
add_executable(example_public src/example_public.cpp)         把代码文件转变为可执行文件
add_executable(example_subscriber src/example_subscriber.cpp)  也即把.cpp文件编译为example_public  example_subscriber 文件

target_link_libraries(example_public ${catkin_LIBRARIES})     把可执行文件与库做链接
target_link_libraries(example_subscriber ${catkin_LIBRARIES})

add_executable(节点名  src/test.cpp)  节点名也就是最后的可执行文件

target_link_libraries(节点名  ${catkin_LIBRARIES})

6、之后再source ~/catkin_ws/devel/setup.bash

在工作空间catkin_ws处catkin_make

7、rosrun 包名  节点名

// 分别打开三个终端
roscore
 
rosrun test_pkg example_public
 
rosrun test_pkg example_subscriber

8、运行结果如下

 参考:https://blog.csdn.net/qq_40626497/article/details/103744839

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/880307.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号