0.前言

现在介绍ROS基本程序实现的教程有很多,步骤无非就是建工作空间,编译,创建功能包,创建文件和修改CMakeList,之后再编译、运行程序这几步。但是这些教程中很多在文件夹切换的很混乱,导致会出现一堆奇奇怪怪的错误,其实只要注意你操作的文件夹位置,很多问题都不是问题。这也是博主为什么写这篇文章的原因。

1.实现步骤

(1)创建工作空间并初始化

lxb@lxb-virtual-machine:~/study_ros$ mkdir -p my_workspace/src
lxb@lxb-virtual-machine:~/study_ros$ cd my_workspace/
lxb@lxb-virtual-machine:~/study_ros/my_workspace$ catkin_make

注意:

我的工作空间文件夹位置为:~/study_ros/my_workspace/

(2)进入 src 创建功能包并添加依赖

lxb@lxb-virtual-machine:~/study_ros/my_workspace$ cd src
lxb@lxb-virtual-machine:~/study_ros/my_workspace/src$ catkin_create_pkg my_function_package roscpp rospy std_msgs



注意:

我的功能包文件夹位置为:~/study_ros/my_workspace/src/my_function_package

以后的操作大多数都是在功能包中进行的,除了catkin_make编译

(3)进入功能包的 src 目录创建编辑核心代码hello_world.cpp

lxb@lxb-virtual-machine:~/study_ros/my_workspace/src$ cd my_function_package/
lxb@lxb-virtual-machine:~/study_ros/my_workspace/src/my_function_package$ touch hello_world.cpp
lxb@lxb-virtual-machine:~/study_ros/my_workspace/src/my_function_package$ gedit hello_world.cpp



注意:

hello_world.cpp的内容为:

#include "ros/ros.h"

int main(int argc, char *argv[])
{
//执行 ros 节点初始化
ros::init(argc,argv,"hello");
//创建 ros 节点句柄
ros::NodeHandle n;
//控制台输出 hello world
ROS_INFO("hello world!"); return 0;
}

(4)编辑功能包下的 Cmakelist.txt文件

lxb@lxb-virtual-machine:~/study_ros/my_workspace/src/my_function_package$ gedit CMakeLists.txt



编辑方式:

找到Cmakelist.txt文件下面对应的部分,去掉前面#注释,并将内容改为如下所示,其中hello_world_newnamehello_world.cpp的映射名,随便写,但是建议写成和hello_world.cpp同名,也就是hello_world

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

(5)进入工作空间目录并编译



编译成功截图



注意:

若编译失败,再重新走一遍流程,一般都是流程出错

(6)刷新环境并执行程序

1.先打开一个新终端,运行roscore

lxb@lxb-virtual-machine:~$ roscore

2.在原来的终端下刷新环境并执行程序

lxb@lxb-virtual-machine:~/study_ros/my_workspace$ source ./devel/setup.bash
lxb@lxb-virtual-machine:~/study_ros/my_workspace$ rosrun my_function_package hello_world_newname

2.后言

这个在我稀稀拉拉学ros多年,终于把它给搞懂了,这里对于新学习ROS的同学,可以看下这个教程http://www.autolabor.com.cn/book/ROSTutorials/ ,这个教程给了我很多的启发。如果有什么问题,也欢迎大家评论去交流,最后祝大家可以ROS顺利!

ROS基本程序实现的更多相关文章

  1. 创建ros的程序包--3

    创建ros的程序包(原创博文,转载请标明出处--周学伟http://www.cnblogs.com/zxouxuewei/) 1.一个catkin程序包由什么组成? 一个程序包要想称为catkin程序 ...

  2. ROS学习笔记三:编写第一个ROS节点程序

    在编写第一个ROS节点程序之前需要创建工作空间(workspace)和功能包(package).   1 创建工作空间(workspace) 创建一个catkin_ws: #注意:如果使用sudo一次 ...

  3. ROS 笔记 程序包/节点/topic

    官方教程: wiki.ros.org/cn/ROS/tutorials 程序包打创建于编译 创建程序包 在工作空间的src底下,输入如下命令: $ catkin_create_pkg 要创建的包名 依 ...

  4. ROS:使用Qt Creator创建GUI程序(一)

    开发环境: Ubuntu14.04 ROS indigo version Qt Creator 3.0.1 based on Qt 5.2.1 步骤如下:(按照下面命令一步步来,亲测可行) (一)安装 ...

  5. ROS Learning-018 Arduino-For-ROS-003 (总结篇) 模板程序 即 如何运行

    Arduino For ROS-003 - (总结篇) 模板程序 即 如何运行 我的Ubuntu系统:Ubuntu 14.04.10 TLS 32位 Arduino的版本:Arduino 1.6.11 ...

  6. ROS Learning-017 Arduino-For-ROS-002 第一个程序: Hello World

    Arduino For ROS-002 - 第一个程序: Hello World 我的Ubuntu系统:Ubuntu 14.04.10 TLS 32位 Arduino的版本:Arduino 1.6.1 ...

  7. ROS 新手常见问题汇总

    版权声明:本文为博主原创文章,转载请标明出处: http://www.cnblogs.com/liu-fa/p/5772469.html 该博文致力于汇总ROS常见问题及解答,让更多的人少走弯路,避免 ...

  8. 快速了解 Robot Operating System(ROS) 机器人操作系统

     http://www.ros.org/ 关于ROS About ROS http://www.ros.org/about-ros/ 机器人操作系统(ROS)是用于编写机器人软件的灵活框架.目的在简化 ...

  9. ROS机器人程序设计(原书第2版)补充资料 (壹) 第一章 ROS系统入门

    ROS机器人程序设计(原书第2版)补充资料 (壹) 第一章 ROS系统入门 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用. 第一章主要包括R ...

随机推荐

  1. Hive启动后show tables报错:Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

    错误详情: FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive ...

  2. 启动两个jboss需要修改的端口号 (两个不能相同)

    standalone-configuration-standalone.xml

  3. 浅谈ES6中的Async函数

    转载地址:https://www.cnblogs.com/sghy/p/7987640.html 定义:Async函数是一个异步操作函数,本质上,Async函数是Generator函数的语法糖.asy ...

  4. 微信小程序如何把接口调用成功的回调函数返回的参数return出去?(promise就可以解决)

    举个栗子//获取应用实例 //const app = getApp() //const util = require('../../utils/util.js') //const sign = uti ...

  5. FastAPI(六十六)实战开发《在线课程学习系统》接口开发--用户注册接口开发

    在前面我们分析了接口的设计,那么我们现在做接口的开发. 我们先去设计下pydantic用户参数的校验 from pydantic import BaseModel from typing import ...

  6. Ubu18下cpptest安装

    1.环境安装 sudo apt install g++ sudo apt install automake sudo apt install autoconf sudo apt install lib ...

  7. partOne代码修改

    学生毕业论文系统----代码修改   /* 基本类ScoreInformation类相较之前无变化*/public class ScoreInformation { private String st ...

  8. 20202127 实验一《Python程序设计》实验报告

    20202127 2022-2022-2 <Python程序设计>实验一报告课程:<Python程序设计>班级: 2021姓名: 马艺洲学号:20202127实验教师:王志强实 ...

  9. 手把手教会将 Windows 窗体桌面应用从.NET Framework迁移到 .NET SDK/.NET 6 格式

    接上篇:手把手教会 VS2022 设计 Winform 高DPI兼容程序 (net461 net6.0 双出) https://www.cnblogs.com/densen2014/p/1614293 ...

  10. Vue2响应式原理

    vue2响应式原理 vue的特性:数据驱动视图和双向数据绑定.vue官方文档也提供了响应式原理的解释: 深入响应式原理 Object.defineProperty() Object.definePro ...