文章目录

  • 前言
  • 一、创建工程文件目录
  • 二、实现helloworld
    • 2.1、创建ROS包
    • 2.2、C++版的HelloWorld
    • 2.3、Python版的HelloWorld
  • 三、 借助launch文件启动多个节点
  • 四、ROS计算图
  • 参考资料

前言

马上开学,目前学校很多实验室都是人工智能这块,大部分都是和机器人相关,然后软件这块就是和cv、ros相关,就打算开始学习一下。

本章节是虚拟机安装Ubuntu18.04以及安装ROS的环境。

学习教程:【Autolabor初级教程】ROS机器人入门,博客中一些知识点是来源于赵老师的笔记在线笔记,本博客主要是做归纳总结,如有侵权请联系删除。

视频中的案例都基本敲了遍,这里给出我自己的源代码文件:

链接:https://pan.baidu.com/s/13CAzXk0vAWuBsc4oABC-_g
提取码:0hws

所有博客文件目录索引:博客目录索引(持续更新)

一、创建工程文件目录

# 进入到/home目录
cd /home# 创建一个workspace,之后工程全部放入这里
mkdir workspace
cd workspace# 创建工程文件【roslearn】及src目录
mkdir -p roslearn/src# 进入roslearn工程目录
cd roslearn

目录创建好之后,在roslearn的目录下来执行编译命令:

# catkin_make是将cmake与make的编译方式做了一个封装的指令工具, 规范了工作路径与生成文件路径。
# 主要是进行规范项目模块
catkin_make
  • C++知识点总结——cmake与catkin_make的区别

编译好的目录如下:

错误解决

若是执行catkin_make出现command not found错误,如下:

表示你当前并没有配置对应ros的环境变量,此时我们可以执行以下命令:

# 生效执行setup.bash
source /opt/ros/melodic/setup.bash# ~/指的是/home/用户名目录,.bashrc一般存储的是用户个性化配置,这条实际上就是source指令写入到.bashrc文件里
# .bashrc在每次打开新的终端时都会被读取
# 其中setup.bash会去调用执行setup.sh文件,去执行命令
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc# 可以看做是.,其实就是执行对应home用户目录下的.bashrc,就是让我们环境变量生效
source ~/.bashrc

二、实现helloworld

2.1、创建ROS包

在工程目录下创建一个ros工程包名为:helloworld

# 进入工程目录中的src目录下
cd /home/workspace/roslearn/src# 语法:catkin_create_pkg --rosdistro 版本号 自定义ROS包名 [dependencies [dependencies ...]]
# 其中--rosdistro指的是当前ros的版本,我的是melodic,dependencies指的是依赖包
# 当前工程包依赖的是最常使用的包:roscpp:使用c++实现的库、rospy:使用python实现的库、std_msgs:标准消息库
catkin_create_pkg --rosdistro melodic helloworld roscpp rospy std_msgs

提示:在ROS中实现某一个功能可以使用c++或者python任意一个实现,对于不同情况推荐:若是实现某种算法,建议使用c++库实现(roscpp),若是编写一些对于性能要求并不高的代码就可以使用python实现(rospy)。

2.2、C++版的HelloWorld

步骤一:在helloworld包目录下的src目录创建一个c++文件

编写代码:功能就是打印一个日志信息

//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("hello world!");return 0;
}

步骤二:修改helloworld包下的CMakeList.txt配置信息

打开下面两行注释,并进行指定执行的C++文件以及对应的映射名:

# helloC表示的是映射当前包下的src/helloworld_c.cpp
# helloC是我们自定义的,对应的文件名应当对应之前编写的C语言文件
add_executable(helloC src/helloworld_c.cpp)# 这里helloC就是上面对应的映射名
target_link_libraries(helloC${catkin_LIBRARIES}
)

步骤三:回到roslearn目录下,执行编译命令

# 进入到初始创建工程目录下roslearn
cd /home/workspace/roslearn# 执行编译整个工程命令
catkin_make

若是出现下面信息,就表示编译无误:

此时我们就可以来开始尝试执行启动hellowold结点了:

首先操作就是启动ros的核心结点:

roscore

接着回到我们的roslearn工程目录下:

# 进入roslearn目录
cd /home/workspace/roslearn# 执行配置环境变量命令(这个跟我们的helloword包有关,不执行会有问题)
source ./devel/setup.bash# 执行命令来启动对应的helloc结点
# rosrun表示运行命令、helloworld就是我们的包名、helloC就是对应的映射名
rosrun helloworld helloC

成功输出helloworld信息。

tips:若是想要对应的环境变量配置在所有窗口生效,执行如下命令:

# 将指定的命令添加到当前追加到登录用户目录下的.bashrc文件中,之后打开命令行都会去执行一遍这里的操作
# 对应roslearn目录是我自定义的工程名
echo "source /home/workspace/roslearn/devel/setup.bash" >> ~/.bashrc

大胆猜想一下:上面执行的helloworld helloC感觉就是执行的roslearn/lib/helloworld/helloC执行文件

那我是不是可以猜测将lib目录设置为了环境变量,上面的rosrun是ros的命令,ros会根据后面指定的工程名去lib目录下找helloworld工程下的helloC。


2.3、Python版的HelloWorld

步骤一:在helloworld包目录下创建scripts目录,并编写python文件

cd /home/workspace/roslearn/src/helloworldmkdir scripts

helloworld_p.py:

#! /usr/bin/env python
# coding=utf-8"""文件开头指定解释器ros版的python helloworld
"""# 引入包
import rospyif __name__ == "__main__":# 初始化节点rospy.init_node("Hello_python_node")# 打印日志helloworldrospy.loginfo("Hello World!!!! by python")

步骤二:修改helloworld包目录下的配置文件

放开下图注释,并修改对应的python文件名称:

# helloworld_p.py表示的是我们创建的python文件
catkin_install_python(PROGRAMSscripts/helloworld_p.pyDESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

步骤三:给helloworld_p.py添加可执行权限

# 给helloworld_p.py添加可执行权限
chmod +x /home/workspace/roslearn/src/helloworld/scripts/helloworld_p.py

步骤四:重新编译整个项目,配置环境变量并执行对应的helloworld_p.py文件

# 进入到roslearn工程目录
cd /home/workspace/roslearn# 编译项目
catkin_make# 注意:与之前2.2一样首先需要使用一个客户端来开启ros的核心程序
roscore# 重新刷新环境变量(之前配置的.bashrc需要重新打开命令才会进行动态配置生效,所以这里我们需要手动来执行刷新一下最新的)
source ./devel/setup.bash# 执行python版的helloworld程序
rosrun helloworld helloworld_p.py

成功运行!


三、 借助launch文件启动多个节点

之前执行ros核心程序,一些ros自带的结点例如GUI、监控键盘控制移动以及我们的一些自己编写的node结点代码都需要启动一个个命令行去执行,在使用launch就可以批量直接启动多个节点。

简而言之:多窗口执行多条命令 => 多节点配置到一个文件中一次全部启动节点。

步骤一:在包目录下创建launch文件夹,编写launch配置文件

目标:启动监控键盘的结点,自己定义的c++节点以及python节点。

  • 提示:lauch配置文件本身在执行时就会首先启动roscore命令的ros核心程序(无需额外配置)。

start_turtle.launch

<launch><!-- source ./devel/setup.bashroslaunch helloworld start_turtle.launch--><!-- GUI图像界面 --><!-- <node pkg="turtlesim" type="turtlesim_node" name="turtle_GUI"/> --><!-- 控制台界面 --><node pkg="turtlesim" type="turtle_teleop_key" name="turtle_KEY" /><!-- 执行C语言程序结点:其中type="helloC"中的helloC就是之前对应的配置文件映射名  output="screen"也就是日志信息打印在窗口中输出 --><node pkg="helloworld" type="helloC" name="hello_c_node" output="screen"/><!-- 执行python结点,这里的type直接填写对应的python文件名 --><node pkg="helloworld" type="helloworld_p.py" name="hello_py_node" output="screen"/>
</launch>
  • 在这里我把GUI图像界面注释的原因是我启动会报如下的错误,所以暂时GUI图像结点另起一个窗口去执行:

node ---> 包含的某个节点
pkg -----> 功能包
type ----> 被运行的节点文件
name --> 为节点命名
output-> 设置日志的输出目标

步骤二:回到roslearn工程目录,重新配置环境变量并执行launch文件

# 重新刷新环境变量
source ./devel/setup.bash# roslaunch执行launch文件命令  helloworld工程文件  start_turtle.launch就是配置文件
roslaunch helloworld start_turtle.launch

此时我们另一个命令行来启动小乌龟工具:

rosrun turtlesim turtlesim_node

最终效果:

四、ROS计算图

计算图rqt_graph,借助使用该工具能够创建一个显示当前系统运行情况的动态图形,这在分布式系统中来描述大量多个节点的作用十分大。

步骤一:安装rqt_graph(根据你的ros版本来安装)

# 若是你其他版本:kinetic、melodic、Noetic
# 例如melodic替换为kinetic:ros-melodic-rqt => ros-kinetic-rqt
sudo apt install ros-melodic-rqtsudo apt install ros-melodic-rqt-common-plugins

步骤二:运行计算图

# 在启动好你的ros节点之后来进行运行命令(我提前运行了小乌龟以及键盘监控node节点)
rosrun rqt_graph rqt_graph  # 或者简洁版命令
rqt_graph

参考资料

[1]. catkin_make:Command ‘catkin_make‘ not found, but can be installed with:sudo apt install catkin

ROS学习笔记02、ROS使用C++、Python来实现HelloWorld相关推荐

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

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

  2. ROS学习笔记02:ROS架构与基础

    文章目录 一.ROS架构 二.第一个ROS例程 (一)turtlesim功能包 1.话题与服务 2.背景色参数 (二)控制乌龟运动 1.启动节点管理器 2.启动乌龟仿真器节点 3.启动键盘控制节点 三 ...

  3. Python快速编程入门#学习笔记02# |第十章 :Python计算生态与常用库(附.小猴子接香蕉、双人乒乓球小游戏源码)

    全文目录 学习目标 1. Python计算生态概述 1.1 Python计算生态概述 2. Python生态库的构建与发布 2.1 模块的构建与使用 * 2.1.1第三方库/模块导入的格式 2.2 包 ...

  4. Python量化学习笔记02——量化投资——以Python为工具 Part01-C02

    C002 Python代码的编写与执行 开篇2个示例 1.在控制栏中打印"Hello Python!" print("Hello Python!") 2.写一个 ...

  5. Python快速编程入门#学习笔记01# |第一章 :Python基础知识 (Python发展历程、常见的开发工具、import模块导入)

    全文目录 ==先导知识== 1 认识Python 1.1.1 Python的发展历程 1.1.2 Python语言的特点 2. Python解释器的安装与Python程序运行 1.2.1 安装Pyth ...

  6. Python快速编程入门#学习笔记03# |第二章 :Python基础(代码格式、标识符关键字、变量和数据类型、数字类型以及运算符)

    全文目录 ==先导知识== 学习目标: 2.1 代码格式 2.1.1 注释 2.1.2 缩进 2.1.3 语句换行 2.2 标识符和关键字 2.2.1 标识符 2.2.2 关键字 2.3 变量和数据类 ...

  7. ros学习笔记12——python实现发布和接收ros topic

    ros学习笔记12--python实现发布和接收ros topic 一.简单demo 1.工作空间是存放工程开发的相关文件的文件夹 2.创作工作空间指令 3 .创建功能包 4. 创建Topic的订阅发 ...

  8. ROS学习笔记(二)——python、C++编译器以及ROS的安装

    ROS学习笔记(二)--python.C++编译器以及ROS的安装 文章目录 ROS学习笔记(二)--python.C++编译器以及ROS的安装 一.编译器的安装 二.ROS的安装 三.验证: 本文主 ...

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

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

最新文章

  1. 伯乐:一个易用、强大的PyTorch推荐系统开源库
  2. java 无向图子图_无向图的连通子图
  3. python计算两个数乘积_如何用PYTHON使两个数字总和变成乘积
  4. JSON在JS和JAVA的处理
  5. mysql user表修复_Mysql user表root用户误删除后恢复
  6. php对数组进行合成的函数,php合并数组函数array_merge()
  7. scrapy setting
  8. Ubuntu12.04 apt-get 安装mysql
  9. linux替换字符串 正则,Linux 字符串操作-裁剪和正则替换
  10. Oracle 12导出、导入数据
  11. rpm mysql配置文件_redhat linux rpm包安装配置mysql数据库
  12. JAVA转为wasm
  13. 各厂家服务器存储默认登录信息
  14. java怎么销毁session_【Java】问题:Session的销毁方式到底有哪些?
  15. php特殊字体生成,生成艺术字体图片水印代码_PHP教程
  16. Zigbee之旅(十):综合小实验——基于CC2430的温度监测系统(转)
  17. SAP HANA XS ODATA的写法
  18. 王者荣耀转系统服务器繁忙,换手机党的福音,王者荣耀开启跨系统角色转移,但这些问题要注意...
  19. mysql front 安全设置_MySQL-Front 操作限制 解决办法
  20. Vivado报错[Opt 31 - 305] Invalid connectivity on net RESETN connected to port RESETN

热门文章

  1. mds聚类matlab,机器学习C9笔记:MDS聚类可视化
  2. [办公应用]word 2007:全屏快捷键,让复制图片保持原样大小(office 全屏快捷键)...
  3. list object has no attribute ZScan_【恋爱体验】No.112丨大二男生,河南南阳,身高178,喜欢篮球、羽毛球、兵乓球、足球.........
  4. Python爬虫(一)——58同城租房信息
  5. 谷歌Play马甲包检测逻辑推测及应对措施
  6. 魔方(4)二阶魔方、六阶魔方、七阶魔方
  7. html5语音听写流式,iOS 讯飞语音听写(流式版)
  8. Selenium基于Python web自动化测试框架 —— PO模型
  9. 逆水寒武境斩鸿蒙怎么弄的,逆水寒OL60级紫武怎么打造?逆水寒60级紫武打造流程一览...
  10. JavaScript浮动广告