ros入门之用catkin和rosmake创建和编译功能包

本文详细介绍ROS环境下创建工作空间、创建及编译功能包的过程,并提供两种方法实现这些步骤,适合ROS初学者快速上手。

初学ros机器人程序设计,从创建工作空间到编译运行节点,由于linux也是初学,各种焦头烂额,把这些最基础的东西先总结下来,以备日后查看。这是第一次写博客,倘若有诸多错误的地方,希望大家谅解并指出。写这边文章时,大部分是参考了下面几篇博文:

http://blog.csdn.net/baidu_18189515/article/details/52401329

http://blog.csdn.net/baidu_18189515/article/details/52332754#comments

http://blog.csdn.net/robogreen/article/details/50488215

1、在ros下创建工作空间:

mkdir -p catkin_ws/src  

cd src  

catkin_init_workspace  

cd ..  

catkin_make  

2、创建功能包
方法一:利用catkin创建package

cd ~/catkin_ws/src
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

创建程序包的一般格式是catkin_create_pkg ,此命令的格式包括功能包名称和依赖项,在上面示例中,依赖项包括std_msg、rospy和roscpp。
运行上面命令之后,在src文件夹下会生成一个与功能包名同名的文件夹,在该文件夹下有如下文件(夹)

workspace_folder/
                 src/
                      package_name/   
                                include                   --文件夹
                                src                       --文件夹       
                                CMakeLists.txt
                                package.xml 

方法二:利用roscreate创建package

cd ~/catkin_ws/src
roscreate-pkg beginner_tutorials std_msgs rospy roscpp

同样的,利用rosmake创建程序包的格式是roscreate-pkg ,此命令的格式也包括功能包名称和依赖项。
运行上面命令之后,在src文件夹下会生成一个与功能包名同名的文件夹,在该文件夹下有如下文件(夹)

workspace_folder/
                 src/
                      package_name/   
                                include                   --文件夹
                                src                       --文件夹       
                                CMakeLists.txt
                                manifest.xml 
                                mainpage.dox
                                Makefile

3、编译功能包
方法一:利用catkin编译
用catkin编译的是上述第一种利用catkin创建的package,首先修改创建功能包时生成的CMakeLists.test文件,用gedit打开该文件,
⑴添加以下语句来查找添加的依赖包

find_package(catkin REQUIRED COMPONENTS
    sensor_msgs
    cv_bridge
    image_transport)
find_package(OpenCV 2 REQUIRED)
find_package(PLC REQUIRED)

⑵添加以下语句来添加参与编译的节点程序

add_executable(node name src/node program)#添加可执行节点
target_link_libraries(node name ${catkin_LIBRARIES})#链接库
add_dependencies(node name package name_generator_messages_cpp)#为可执行文件添加对生成的消息文件的依赖,因为catkin把所有的package并行的编译,所以如果你要使用其他catkin工作空间中其他package的消息,你同样也需要添加对他们各自生成的消息文件的依赖,感觉就是一个先导入头文件的过程。

除了可以在创建功能包时添加系统提供的依赖(catkin_create_pkg beginner_tutorials std_msgs rospy roscpp),也可以修改创建功能包时生成的package.xml文件,以图像处理中所需用到的包为例,加入了以下指令来说明后面增加的依赖包

<run_depend>sensor_msgs</run_depend> 
<run_depend>image_transport</run_depend> 
<run_depend>cv_bridge</run_depend> 

利用catkin编译的方法是:

#under workspace
catkin_make [make_targets] [-DCMAKE_VARIABLES=...]

方法二:利用rosmake编译
用rosmake编译的是上述第二种利用roscreate创建的package,同样的,在编译之前,需要修改CMakeLists.txt文件和manifest.xml文件,不同的地方是在修改CMakeLists.txt文件时需要加上如下语句来添加参与编译的节点程序:

rosbuild_add_executable(node_name src/node_name.cpp)

注意:
ROS从indigo开始就不再把opencv作为系统依赖包而是作为一个第三方包引入,如果直接使用会在rosmake编译阶段报错,no exist package “opencv2”,此时只需要在CMakeLists.txt中添加find_package(OpenCV 2 REQUIRED),然后在manifest.xml中不能添加依赖包,此处添加的为系统依赖包。
利用rosmkae编译的方法是:

#under workspace
rosmake package_name

运行以上命令之后,如果编译没有出错,在bin文件夹下可以看到生成的可执行文件,可以直接运行./node_name来运行节点。
3、运行编译完成之后的节点(不用launch,还不懂)

rosrun package_name node_name

注意:
1)创建功能包是在src目录下,而编译功能包是在workspace目录下。
2)编译之前要先确保添加了当前工作空间的path,查看方法是:

echo $ROS_PACKAGE_PATH

添加方法是source setup.bash文件

#under the path: workspace
source ./devel/setup.bash

3)运行节点之前要下roscore

<think>嗯,用户的问题是关于在ROS中使用catkin_create_qt_pkg命令的解决方案或替代方法。他们想知道如何创建带有Qt支持的catkin,或者有没有替代方法。首先,我需要回忆一下ROS中Qt相关的开发流程。记得之前用户提到过安装ros-kinetic-qt-createros-kinetic-qt-build这两个,可能是在Kinetic版本中。但用户现在可能用的是更新的ROS版本,比如Noetic,所以需要确认这些是否存在。如果catkin_create_qt_pkg命令找不到,可能是因为没有安装对应的依赖,或者该命令在较新的ROS版本中已被弃用?接下来,我需要考虑替代方案。用户可能需要手动配置QtROS的集成。比如,使用常规的catkin_create_pkg创建,然后手动添加Qt的依赖项,比如在CMakeLists.txt中添加find_package(Qt5)之类的语句,并链接相应的库。此外,还可以使用ros_qt_plugin这样的工具来简化流程,或者直接使用QtCreator的ROS插件来管理项目。另外,用户可能需要一个完整的步骤指南,比如如何创建工作空间、创建功能、配置CMakeListspackage.xml,以及如何编译运行。还要提醒用户安装必要的依赖,比如Qt5ROS的相关。还要注意用户可能遇到的常见问题,比如环境变量设置是否正确,工作空间是否已经source过,或者编译过程中出现的依赖缺失错误。需要给出具体的解决步骤,并确保命令的正确性,比如使用sudo aptinstall来安装所需的ROSQt。最后,生成相关问题,帮助用户进一步解决可能遇到的后续问题,比如如何调试Qt程序,如何集成RViz,或者如何处理依赖冲突等。确保回答结构清晰,分点说明,让用户能够一步步跟随操作。</think>### 如何在ROS创建带有Qt支持的catkin #### 1. 官方方法(适用于支持`catkin_create_qt_pkg`的ROS版本) 1. **安装依赖**: ```bash sudo apt-get install ros-<distro>-qt-create ros-<distro>-qt-build ``` 例如Kinetic版本: ```bash sudo apt-get install ros-kinetic-qt-create ros-kinetic-qt-build[^1] 2. **创建Qt功能**: ```bash catkin_create_qt_pkg your_package_name [dependencies] ``` 示例: ```bash catkin_create_qt_pkg qt_demo roscpp rviz[^2] ``` #### 2. 替代方案(推荐用于新版本ROS) ##### 方法一:手动配置Qt+ROS工程 1. **创建常规catkin**: ```bash catkin_create_pkg your_qt_pkg roscpp qt_build ``` 2. **配置`CMakeLists.txt`**: ```cmake find_package(Qt5 COMPONENTS Core Widgets REQUIRED) add_executable(your_node src/your_node.cpp) target_link_libraries(your_node ${catkin_LIBRARIES} Qt5::Core Qt5::Widgets) ``` 3. **配置`package.xml`**: ```xml <build_depend>qtbase5-dev</build_depend> <exec_depend>qt5-qmake</exec_depend> ``` ##### 方法二:使用ros_qt_plugin模板 1. **下载模板库**: ```bash git clone https://github.com/ros-visualization/ros_qt_plugin.git ``` 2. **复制`CMakeLists.txt``package.xml`**到新中,修改关键参数 #### 3. 使用Qt Creator集成 1. **安装ROS Qt插件**: ```bash sudo apt-get install ros-<distro>-qt-creator ``` 2. **通过`File > New Project > ROS Workspace`导入catkin工作空间[^2] 3. **配置编译规则时添加Qt依赖**: ```cmake set(QT_LIBS Qt5::Core Qt5::Widgets) target_link_libraries(${PROJECT_NAME} ${QT_LIBS}) ``` ### 关键问题解决方案 - **`catkin_create_qt_pkg未找到命令`**: 1. 确认是否安装`ros-<distro>-qt-create` 2. 检查`/opt/ros/<distro>/share`路径下是否存在qt_create模块 3. 尝试重新初始化环境: ```bash source /opt/ros/<distro>/setup.bash ``` - **Qt窗口无法显示**: 添加环境变量: ```bash export QT_AUTO_SCREEN_SCALE_FACTOR=0 ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值