ROS工作空间、功能包创建,编译相关的C++/python程序详解

有关工作空间的结构:

WorkSpace -- 自定义的工作空间
    |-- build:编译空间,用于存放CMake和catkin的缓存信息、配置信息和其他中间文件
    |-- devel:开发空间,用于存放编译后生成的目标文件,包括头文件、动态或静态链接库、可执行文件等
    |-- src:源码
        |-- package:功能包,这是ROS基本单元
            |-- CMakeLists.txt:配置编译规则,例如源文件、依赖项、目标文件
            |-- package.xml:包信息,例如包名、版本、作者
            |-- scripts:存储python文件
            |-- src:存储C++源文件
            |-- include:头文件
            |-- msg:消息通信格式文件
            |-- srv:服务通信格式文件
            |-- action:动作格式文件
            |-- launch:存储launch文件
            |-- config:配置信息
        |-- CMakeLists.txt:编译的基本配置

1.在主目录下建立文件夹catkin_ws

mkdir -p ~/catkin_ws/src

mkdir -p表示允许创建目录及子目录

2.进入catkin_ws/src文件夹下,执行下面指令:

catkin_init_workspace

 将catkin_ws文件夹初始化成ROS工作空间的属性。

3.在catkin_ws下打开终端

catkin_make

这一步是编译工作空间,其实就是刷新一次工作空间的可执行文件,后续只要src下有新增了ROS程序,要生成可执行文件,都要执行这一步。编译完后,catkin_ws下会新增build和devel文件夹。

4.在catkin_ws/src下创建功能包(package)

catkin_create_pkg helloworld std_msgs rospy roscpp

通过catkin_create_pkg命令创建一个名为“helloworld”的功能包,其依赖项有std_msgs(标准信息库),rospy(python的API),roscpp(C++的API)。

5.由于新增了helloworld功能包,需要重新catkin_make一下工作空间,以更新相关的功能包。

所以,重复第二步的catkin_make操作(注意是在工作空间目录下catkin_make)。

6.在helloworld功能包的src下创建C++(这里在src下创建一个helloworld.cpp程序),写完helloworld.cpp之后需要编译成二进制可执行文件,具体操作如下:

6.1进入helloworld功能包,可以看到src、CMakeLists.txt、package.xml文件夹。编译helloworld.cpp文件需要在helloworld功能包下的CMakeLists.txt添加相关语句,在helloworld功能包下打开终端:

gedit CMakeLists.txt

gedit是一个文本编辑软件,进入CMakeLists.txt之后,找到找到里面有一行写着##Declare a C++ executable,在这一行前面或者后面添加如下内容

add_executable(helloworld src/helloworld.cpp)
target_link_libraries(helloworld ${catkin_LIBRARIES})

第一行add_executable表示我们要添加一个可执行文件,helloworld是这个可执行文件的名字(并不是非得和helloworld.cpp中的helloworld一样,不过建议用一样的),src/helloworld.cpp指定要编译的源文件的位置.
第二行target_link_libraries表示我们要将可执行文件链接到一个库,我们要使用ROS当然是要链接到ROS的库了,括号里helloworld是指定要链接可执行文件的名字,后面是指定要链接的库的名字.添加完上述内容后我们保存并退出CMakeLists.txt文件.

6.2由于功能包发生了更改,需要重新catkin_make一下工作空间,所以再重复一下第二步。

注:有关make、cmake、catkin_make,感兴趣的可以找找资料,大体上就是catkin_make将cmake、make的功能整合在一块了。

7.source一下工作空间的环境变量,以便让ROS找到你的工作空间。

一次性的方法:

source ~/helloworld/devel/setup.bash

永久的方法,运行如下指令,打开.bashrc文件(此文件每次shell打开都会自动运行),在最底下加入source ~/helloworld/devel/setup.bash语句,保存关闭即可:

gedit ~/.bashrc

添加python语言的ros程序:

在功能包中,新建一个scripts(和src同级)文件夹,用来存放python的源码。

python源码注意赋予其可执行权限即可。其没有cpp程序中的下面步骤。

add_executable(helloworld src/helloworld.cpp)
target_link_libraries(helloworld ${catkin_LIBRARIES})

 具体详细流程:优先推荐wiki:rospy/Tutorials - ROS Wiki

起手入门可参见:ROS——创建工作空间和功能包并成功运行一个基本python文件_Irving.Gao的博客-CSDN博客_ros运行python代码

 在使用python编写ROS程序时,其没有spinonce()这个函数,可以用“python解决spinonce()”找到一些方法。

这里,推荐一个简单方法,直接把相关内容写在回调函数里加一个逻辑判断可以直接了当的替代spinonce()功能。

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ROS Melodic中,创建工作空间编译功能的具体步骤如下: 1. 创建工作空间(workspace):在ROS中,工作空间是一个文件夹,用于存放ROS功能(packages)。可以使用以下命令创建一个名为“catkin_ws”的工作空间: ``` mkdir -p ~/catkin_ws/src cd ~/catkin_ws/ catkin_make ``` 其中,“~/catkin_ws/src”是存放ROS功能的文件夹,“catkin_make”是编译ROS功能的命令,它会在工作空间创建一个“build”文件夹和一个“devel”文件夹。 2. 创建ROS功能(packages):在工作空间的“src”文件夹中,可以使用以下命令创建一个名为“my_package”的ROS功能: ``` cd ~/catkin_ws/src catkin_create_pkg my_package rospy std_msgs ``` 其中,“my_package”是功能的名称,“rospy”和“std_msgs”是该功能所依赖的ROS软件。 3. 编写ROS节点(nodes):在功能创建一个python文件,并编写ROS节点的代码。例如,可以在“my_package/src”文件夹中创建一个名为“my_node.py”的python文件,并编写如下代码: ```python #!/usr/bin/env python import rospy from std_msgs.msg import String def my_node(): rospy.init_node('my_node') pub = rospy.Publisher('my_topic', String, queue_size=10) rate = rospy.Rate(10) # 10hz while not rospy.is_shutdown(): hello_str = "hello world %s" % rospy.get_time() rospy.loginfo(hello_str) pub.publish(hello_str) rate.sleep() if __name__ == '__main__': try: my_node() except rospy.ROSInterruptException: pass ``` 该节点会发布一个名为“my_topic”的话题,每秒钟发布10条消息。 4. 编译ROS功能:使用以下命令编译ROS功能: ``` cd ~/catkin_ws/ catkin_make ``` 该命令会在“build”文件夹中生成一个“my_package”文件夹,其中编译后的ROS节点。 5. 运行ROS节点:使用以下命令运行ROS节点: ``` rosrun my_package my_node.py ``` 该命令会启动ROS节点,并开始发布消息到“my_topic”话题。可以使用以下命令查看消息: ``` rostopic echo my_topic ``` 以上就是在ROS Melodic中创建工作空间编译ROS功能的基本步骤。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值