例程实现流程

声明:整个学习是我跟着奥特学园进行的,不是原创,只是记录自己的学习过程

1、准备事项

1)先创建一个工作空间

2)再创建一个功能包

3)编辑源文件

4)编辑配置文件

5)编译并执行

C++和Python只有再3、4步时有所差异,其余流程基本一致。

2、C++实现HelloWorld

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

打开终端后输入命令

mkdir -p 自定义空间名称/src

cd 自定义空间名称

catkin_make

命令行操作演示:

mkdir -p demo01_ws/src
cd demo01_ws
catkin_make

命令执行结果:

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

在工作空间下生成一个功能包,该功能包依赖于roscpp、rospy与std_msgs,其中roscpp是使用C++实现的库,而rospy则是使用python实现的库,std_msgs是标准信息库,创建ROS功能包时,一般都会以来这三个库实现。

cd src

catkin_create_pkg 自定义ROS包名 roscpp rospy std_msgs

命令行操作:

catkin_create_pkg helloworld roscpp rospy std_msgs

执行结果:

(3)进入ros功能包(helloworld)中的src目录编辑源文件

//进入功能包
cd helloworld
//新建C++文件
touch helloworld_c.cpp

(4)编辑helloworld_c.cpp文件

//1.包含ros的头文件
#include"ros/ros.h"
//2.编写main函数
int main(int argc,char *argv[]){//3.初始化ros节点ros::init(argc,argv,"hello_node");//4.输出日志ROS_INFO("helloworld");return 0;
}

(5)编辑ros包(helloworld)下的Cmakelist.txt文件

1)找到 add_executable,将其前面的#删除,并更改其中的参数信息

add_executable(需要进行编译的源文件名   src/需要进行编译的源文件名.cpp)

add_executable(helloword src/helloworld_c.cpp)

2)找到target_link_libraries,将这个函数的注释取消(删除#)

target_link_libraries(需要进行编译的源文件名(注意要与上述函数中第一个参数的名称保持相同!) ${catkin_LIBRARIES}

)

target_link_libraries(helloword${catkin_LIBRARIES}
)

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

首先要进入工作空间中:cd demo01_ws

接着catkin_make

(7)执行

1)先启动命令行1(新建一个终端)

roscre       //启动ros核心

2)再启动命令行2

cd 工作空间名

source ./devel/setup.bash

rosrun 功能包名 C++节点

cd demo01_ws
source ./devel/setup.bash
rosrun helloworld helloword

终端运行结果:

Notes:使用source ./devel/setup.bash有一些局限性,当我们再次新建一个终端时,想要运行helloworld包就会出错”找不到helloworld“,所以我们可以优化一下命令。

PS:截图来自"奥特学园"

(8)优化

1)打开主目录

使用快捷键"ctrl+h"显示隐藏文件,找到.bashrc文件,打开该文件,在文件的最底下添加source ~/demo01_ws/devel/setup.bash。

可以看到第一行是我们安装ros时添加的。

保存并退出

2)重新加载.bashrc

在主文件夹中打开终端,并输入命令行

3)新建终端测试

rosrun helloworld helloworld

这里我之前自己做的时候为helloworld功能包映射的名称是haha,不用担心,这个名称不影响程序运行。

3、Python实现HelloWorld

(1)进入ros包(helloworld)添加scripts目录并编辑python文件

1)新建一个终端

2)编辑python文件

#! /usr/bin/env python
##指定解释器#1.导包
import rospy
#2.编写主入口
if __name__=="__mian__":#3.初始化ROS节点rospy.init_node("hello_p")#4.输出日志rospy.loginfo("hello world! by python")

3)为helloworld_p.py文件设置权限

(2)编辑配置文件(和C++中的步骤类似,也是更改Cmakelist.txt文件)

在Cmakelist.txt中找到catkin_install_python函数并更改

catkin_install_python(PROGRAMS scripts/自定义文件名.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

实际操作:

catkin_install_python(PROGRAMS scripts/helloworld_p.pyDESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

(3)编译Python文件

1)进入工作空间并编译:

2)新建一个终端:

启动ros核心:

3)重新加载环境变量(回到之前我们进行编译的终端)

source ./devel/setup.bash

4)运行helloworld_p.py

例程完成

奥特学园课程链接:奥特学园

Ros学习笔记(一)Ros中HelloWorld实现(C++/Python)相关推荐

  1. ROS学习笔记(十)——ROS试用练习(一)

    ROS学习笔记(十)--ROS试用练习 在此说明:之前使用的ROS是indigo,前两天电脑"炸"了,所以换了kinetic. 一.ROS文件系统导览 1.1如果你想找到turtl ...

  2. ROS学习笔记十一:ROS中数据的记录与重放

    ROS学习笔记十一:ROS中数据的记录与重放 本节主要介绍如何记录一个正在运行的ROS系统中的数据,然后在一个运行的系统中根据记录文件重新产生和记录时类似的运动情况.本例子还是以小海龟例程为例. 记录 ...

  3. ROS 学习笔记(三):自定义服务数据srv+server+client 示例运行

    ROS 学习笔记(三):自定义服务数据srv+Server+Client 示例运行 一.自定义服务数据: 1.向功能包添加自定义服务文件(AddTwoInts.srv) cd ~/catkin_ws/ ...

  4. ROS 学习笔记(二):自定义消息msg+Publisher+Subscriber 示例运行

    ROS 学习笔记(二):自定义消息msg+Publisher+Subscriber 示例运行 一.自定义消息: 1.新建msg文件夹,创建定义Person.msg 文件 mkdir -p ~/catk ...

  5. ROS 学习笔记(一):工作空间+功能包创建

    ROS 学习笔记(一):工作空间+功能包创建 一.创建工作空间(catkin_make编译): 1.创建工作空间 catkin_ws 创建空间.初始化(建立一个文件夹) cd ~ mkdir -p ~ ...

  6. ROS学习笔记(八): ROS通信架构

    ROS学习笔记(八): ROS通信架构 文章目录 01 Node & Master 1.1 Node 1.2 Master 1.3 启动master和node 1.4 rosrun和rosno ...

  7. ROS学习笔记基础2(基础知识和ROS架构)

    ROS学习笔记1(基础知识和ROS架构) 文章目录 ROS学习笔记1(基础知识和ROS架构) 1. 什么是ROS 2. ROS和其他机器人平台有什么不同 3. ROS架构组成 3.1 文件系统级别 3 ...

  8. ROS学习笔记十二:使用roswtf

    ROS学习笔记十二:使用roswtf 在使用ROS过程中,roswtf工具可以为我们提供ROS系统是否正常工作的检查作用. 注意:在进行下列操作之前,请确保roscore没有运行. 检查ROS是否安装 ...

  9. ROS学习笔记十:用C++编写一个简单的服务和客户端

    ROS学习笔记十:用C++编写一个简单的服务和客户端 这一节主要介绍如何使用C++编写一个简单的服务和客户端节点. 编写服务节点 由于在前面的练习中,已经向beginner_tutorials软件包中 ...

  10. ROS学习笔记九:用C++编写ROS发布与订阅

    ROS学习笔记九:用C++编写ROS发布与订阅 本节主要介绍如何用C++编写一个简单的ROS发布与订阅. 编写发布节点 在之前创建的例子beginner_tutorials软件包中,在其目录下的src ...

最新文章

  1. 在C#中使用SerialPort类实现串口通信
  2. springmvc 音频流输出_音频管理模块AudioDeviceModule解读
  3. php是什么症状脾虚什么症状怎么治,脾虚的5个症状是什么呢
  4. 记一次更改了电脑名称后遇到的各种错误反思及感想
  5. 数据库:分享四个实用的SQLServer脚本函数,欢迎收藏
  6. 艾媒:第三方应用商店形成BAT3争霸格局
  7. 【英语学习】【WOTD】disbursement 释义/词源/示例
  8. 拼多多市值超1600亿美元 成中国第四大互联网公司
  9. C++判断一个序列是否为堆(最大堆、最小堆)
  10. 用 powershell 脚本 .ps1 写一个自动化的「编译->链接->运行C++文件」脚本
  11. 海豚蓝牙ASIO驱动程序使用说明
  12. 宝马推出电动自行车,最大续航300公里
  13. java combo_JAVA中的下拉框(Combo Box)概述(1) | 学步园
  14. 【CSS 颜色的 合法颜色值 (详细介绍)】
  15. The Webpage might be temporarily down or it may have moved permanently to a new web address解决
  16. tl wdr5660虚拟服务器,TP-Link TL-WDR5600路由器端口映射怎么设置
  17. 国外6个最好的广告联盟营销推荐
  18. 软件推荐:AList
  19. Spring @Resource 源码解析 – 为什么是ByName注入
  20. .NET和Java发展前景哪个好?

热门文章

  1. 第三方支付机构是如何产生的?有着怎样的历史背景?它的未来又该如何去走得更加辉煌?
  2. 柴静-雾霾调查 穹顶之下
  3. 畅通工程1863(并查集)(WA的思考)
  4. 计算机中通道的基本功能,Photoshop中各个面板的基本功能介绍 -电脑资料
  5. C-lodop打印控件 实现批量打印
  6. 数数(数学题运算分配律)
  7. 【面试题】网易互娱(游戏)2021校园招聘在线笔试 - 服务端开发工程师[螺旋矩阵]
  8. OS学习笔记-12(清华大学慕课)进程控制
  9. PostgreSQL年龄的处理
  10. php+仿微信公众号样式,仿微信公众号富文本编辑器