用Qtcreator开发ros相关工程

运行环境:
ubuntu16.04、Qtcreator5.9.9、ros kinetic

1、配置环境变量

在home目录下的 .bashrc文件下加入以下代码

export XDG_RUNTIME_DIR=/tmp/runtime-root
export QTDIR=/home/xuan/Qt5.9.9  #qt安装目录
export PATH=$QTDIR/5.9.9/gcc_64/bin:$PATH  #注意qt的版本号
export PATH=$QTDIR/Tools/QtCreator/bin:$PATH  
export LD_LIBRARY_PATH=$QTDIR/gcc_64/lib:$LD_LIBRARY_PATH

加入该代码段是为了可以在终端下用qtcreator命令运行qt。
加入该代码后
在终端下运行

source .bashrc #使配置生效

2、新建project

用qt新建project,一个ros节点相当于一个project。
在这里插入图片描述
选择qmake,也可以选择cmake,cmake的话语法就和用catkin_make写Cmakelists.txt文件差不多。
在这里插入图片描述
选5.9.9 GCC这个,选第一个会在此目录下生成debug文件夹等等
在这里插入图片描述
工程生成完成后,配置该工程的build属性,去掉shadow build的勾勾。
在这里插入图片描述
配置run属性,去掉勾勾,使其不打开终端运行。
在这里插入图片描述

3、qmake语法

qmake语法参考学习
可以将以下代码复制到project的.pro文件下

TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt
DESTDIR += ./bin  #放置可执行程序目标的目录
OBJECTS_DIR += ./tmp  #放置obj中间文件的目录

INCLUDEPATH += \
    /opt/ros/kinetic/include \
#应用程序所需的额外的包含路径列表

LIBS += -L/opt/ros/kinetic/lib \
        -L/usr/lib \
        -L/usr/lib/x86_64-linux-gnu \
        -lroscpp -lrospack -lrosconsole -lroscpp_serialization \ 
        -lrostime -lroslib -lrosconsole_log4cxx -ltf -ltf2 -ltf2_ros -lactionlib \
        -ldynamic_reconfigure_config_init_mutex -limage_transport -lcv_bridge -lclass_loader \
#        -lcsm -lmessage_filters \
        -lboost_system -lboost_filesystem -lboost_thread -lboost_timer -lboost_date_time \
        -lpthread \
#依赖库的路径和名称 -L{xxdirxx} -l{xxnamexx}
#所包含的cpp源文件
SOURCES += \
        main.cpp

在这里插入图片描述

4、测试ros相关工程

去ros wiki上顺便复制了一段代码,点击运行,不报错就对了。
以下是订阅者代码。记得打开roscore!!!
在这里插入图片描述

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


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, "listener");
  ros::NodeHandle n;
  ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);
  ros::spin();
  return 0;
}

以下是发布者截图,运行成功的截图。
在这里插入图片描述

#include <iostream>
#include "ros/ros.h"
#include "std_msgs/String.h"


using namespace std;

int main(int argc, char **argv)
{

  ros::init(argc, argv, "talker");
  ros::NodeHandle n;

  ros::Publisher 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 world"<<count;
      msg.data = ss.str();

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

      ros::spinOnce();

      loop_rate.sleep();
      ++count;
  }
  return 0;
}

5、一点小技巧

就是可能会用到很多自定义的msg,写好msg后可以用catkin_make语法编译,生成头文件 .h 后直接将头文件引入到该工程下。用qt写代码还是舒服特别特别多,有自动补全了~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值