ROS学习记录(三)C++与Python文件的配置

2023-05-16

本篇文章依托于赵虚左老师的ROS课程,实现HelloWorld打印,并安装VScode环境
课程链接
讲义链接

文章目录

  • 前言
  • 一、基本操作过程
    • 1. 先创建一个工作空间;
    • 2. 再创建一个功能包;
  • 二、使用步骤
    • (1)C++文件与配置
      • 1.编辑源文件
      • 2.编辑配置文件Cmakelists.txt
      • 3.编译并执行
    • 2.Python文件配置
      • 1.编辑源文件
      • 2.为 python 文件添加可执行权限
      • 3.编辑 ros 包下的 CamkeList.txt 文件
      • 4.编译并执行
  • 三、终端推荐
  • 四、launch文件演示
    • 1.需求
    • 2.实现


前言

ROS中涉及的编程语言以C++和Python为主,ROS中的大多数程序两者都可以实现。

ROS中的程序即便使用不同的编程语言,实现流程也大致类似,以当前HelloWorld程序为例,实现流程大致如下:

  1. 先创建一个工作空间;
  2. 再创建一个功能包;
  3. 编辑源文件;
  4. 编辑配置文件;
  5. 编译并执行。

上述流程中,C++和Python只是在步骤3和步骤4的实现细节上存在差异,其他流程基本一致。本文以hello world为例进行说明


一、基本操作过程

1. 先创建一个工作空间;

mkdir -p ~/catkin_ws/src   
cd ~/catkin_ws/src
catkin_init_workspace

创建完成后,编译工作空间

cd ~/catkin_ws/
catkin_make

然后设置环境变量,可以参看我的上一篇文章
ROS学习记录(二)玩转海龟——海龟保姆级教程

2. 再创建一个功能包;

cd src
catkin_create_pkg 自定义ROS包名 roscpp rospy std_msgs

上述命令,会在工作空间下生成一个功能包,该功能包依赖于 roscpp、rospy 与 std_msgs,其中roscpp是使用C++实现的库,而rospy则是使用python实现的库,std_msgs是标准消息库,创建ROS功能包时,一般都会依赖这三个库实现。
创建完成后,还需要编译一下工作空间

cd ..
catkin_make
  1. 编辑源文件;

  2. 编辑配置文件;

  3. 编译并执行。

后三步对于C++与Python各有不同,将分别展示

二、使用步骤

(1)C++文件与配置

1.编辑源文件

在功能包的src文件夹新建.cpp文件
代码如下(示例):

//1.包含 ros 的头文件
//2.编写 main 函数
//3.初始化ros节点
//4.输出日志

#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;
}

2.编辑配置文件Cmakelists.txt

add_executable(步骤3的源文件名
  src/步骤3的源文件名.cpp
)
target_link_libraries(步骤3的源文件名
  ${catkin_LIBRARIES}
)

3.编译并执行

输入以下命令进行编译

cd ~/catkin_ws/
catkin_make

在这里插入图片描述

打开新的终端,启动roscore

roscore

打开新的终端,在工作空间目录下运行程序

rosrun 包名 节点名

效果如下
在这里插入图片描述

2.Python文件配置

1.编辑源文件

在功能包的src文件夹中新建.py文件
代码如下(示例):

#! /usr/bin/env python
"""
    Python 版 HelloWorld

"""
import rospy

if __name__ == "__main__":
    rospy.init_node("Hello")
    rospy.loginfo("Hello World!!!!")

2.为 python 文件添加可执行权限

chmod +x 自定义文件名.py

3.编辑 ros 包下的 CamkeList.txt 文件

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

4.编译并执行

输入以下命令进行编译

cd ~/catkin_ws/
catkin_make

打开新的终端,启动roscore

roscore

打开新的终端,在工作空间目录下运行程序

rosrun 功能包名 文件名.py

遇到了下图这样的错误
在这里插入图片描述
这是因为Python在默认状态下不支持源文件中的编码所致,Python2是ASII编码,而编写的文件中使用了中文。解决方法如下:在文件的头部添加# coding=utf-8,然后中文问题解决。
然后又遇到了新的错误
在这里插入图片描述
这是因为在刚刚添加# coding=utf-8#! /usr/bin/env python没有放在第一行,换一下顺序即可。
在这里插入图片描述

三、终端推荐

在 ROS 中,需要频繁的使用到终端,且可能需要同时开启多个窗口,推荐一款较为好用的终端:Terminator。效果如下:
在这里插入图片描述

用以下命令安装

sudo apt install terminator

相关快捷操作见 ROS学习记录(一)常用命令与快捷键

四、launch文件演示

1.需求

一个程序中可能需要启动多个节点,比如:ROS 内置的小乌龟案例,如果要控制乌龟运动,要启动多个窗口,分别启动
roscore、乌龟界面节点、键盘控制节点。如果每次都调用 rosrun 逐一启动,显然效率低下,如何优化?

官方给出的优化策略是使用 launch 文件,可以一次性启动多个 ROS 节点。

2.实现

  1. 选定功能包右击 —> 添加 launch 文件夹
  2. 选定 launch 文件夹右击 —> 添加 launch 文件
  3. 编辑 launch 文件内容
<launch>
    <node pkg="helloworld" type="demo_hello" name="hello" output="screen" />
    <node pkg="turtlesim" type="turtlesim_node" name="t1"/>
    <node pkg="turtlesim" type="turtle_teleop_key" name="key1" />
</launch>

具体含义为

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

输入以下命令运行launch文件

roslaunch 包名 launch文件名
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS学习记录(三)C++与Python文件的配置 的相关文章

随机推荐

  • linux系统--进程管理&计划任务

    kill 9 PID 强制关闭PID kill 1 PID 重启PID的进程 pgrep ssh 查询ssh所有的PID pkill ssh 关闭ssh服务 不需要查询ssh进程的PID 进程优先级 nice指定程序的运行和优先级 n的取值
  • Java+TestNG+Maven+Selenium的web自动化测试脚本环境的搭建

    一 环境搭建 1 安装java环境 a 安装JDK b 安装eclipse c 安装maven 参考 xff1a http www cnblogs com s1328 p 4620812 html 2 安装eclipse下的testng插件
  • UWP UI自动化测试(一)------WinAppDriver/Inspect.exe环境准备

    安装的软件 xff1a 1 WinAppDriver WinAppDriver官网 xff1a GitHub microsoft WinAppDriver Windows Application Driver上面有些 demo Applic
  • python自动化测试(2) 自动化基本技术原理

    1 概述 在之前的文章里面提到过 xff1a 做自动化的首要本领就是要会 透过现象看本质 xff0c 落实到实际的IT工作中就是 透过界面看数据 掌握上面的这样的本领可不是容易的事情 xff0c 必须要有扎实的计算机理论基础 xff0c 才
  • Python自动化测试(1)-自动化测试及基本技术手段概述

    生产力概述 在如今以google为首的互联网时代 xff0c 软件的开发和生产模式都已经发生了变化 xff0c 在 参与感 一书提到 xff1a 某位从微软出来的工程师很困惑 xff0c 微软在google还有facebook这些公司发展的
  • python自动化测试(3) 自动化框架及工具

    1 概述 手续的关于测试的方法论 xff0c 都是建立在之前的文章里面提到的观点 xff1a 功能测试不建议做自动化接口测试性价比最高接口测试可以做自动化 后面所谈到的 测试自动化 也将围绕着 接口自动化 来介绍 本系列选择的测试语言是 p
  • python自动化测试(4)-使用第三方python库技术实现

    1 概述 关于测试的方法论 xff0c 都是建立在之前的文章里面提到的观点 xff1a 功能测试不建议做自动化接口测试性价比最高接口测试可以做自动化做好接口自动化 xff0c 一定要有透过界面看到数据本质的能力 后面所谈到的 测试自动化 也
  • 测试开发-怎么能忘记打卡呢-神器AppleScript

    写在前面 今天给大家介绍一款我自认为比较好用的东西 xff0c Mac OS 下的 AppleScript xff0c AppleScript像是 mac电脑给开发者留下的一个入口一样 xff0c 他不同于其他语言那么复杂 xff0c 可以
  • 自动化测试_Mac安装python+selenium

    1 下载安装 参照下文 https blog csdn net kacylining article details 60587484 https www zhihu com question 30496889 a 下载 pip https
  • 使用Postman实现批量接口执行自动化测试

    一 创建文件夹 1 点击 34 Collections 34 TAB进入 xff0c 再次点击 New Collection 按钮创建文件夹 示例图文 xff1a 二 定义变量及调用执行测试 xff0c 方便灵活调用 1 定义全局变量 xf
  • 真人踩过的坑,告诉你避免自动化测试常犯的10个错误

    虽然从自己的错误中学习也不错 xff0c 但从别人的错误中学习总是更好的 作为一个自动化测试人员 xff0c 分享常见的容易犯的10个错误 xff0c 可以从中吸取教训 xff0c 引以为鉴 一 必要时才自动化 新人小王接到为Web应用程序
  • linux上传下载网速脚本

    bin sh LANG 61 34 34 while true do up time1 61 96 ifconfig 1 grep 34 bytes 34 awk 39 print 6 39 awk F 39 print 2 39 96 d
  • 部门刚来的00后太卷,还没2年班,跳到我们公司起薪20k....

    都说00后躺平了 xff0c 但是有一说一 xff0c 该卷的还是卷 这不 xff0c 前段时间我们公司来了个00后 xff0c 工作都没两年 xff0c 跳槽到我们公司起薪18K xff0c 都快接近我了 后来才知道人家是个卷王 xff0
  • 在阿里我是如何当面试官的

    前言 由于疫情关系 xff0c 最近看到很多测试同学的工作情况内心还是蛮触动的 xff08 降薪 变相裁员 辞退等 xff09 可能这并不是当下一个普遍的现象 xff0c 但仍然使我感受到前端这碗青春饭不好混 于此同时联系我内推的同学很多都
  • 3月面试了一个4年的测试,一问三不知,还反怼我...

    最近看了很多简历 xff0c 很多候选人年限不小 xff0c 但是做的都是一些非常传统的项目 xff0c 想着也不能通过简历就直接否定一个人 xff0c 何况现在大环境越来 越难 xff0c 大家找工作也不容易 xff0c 于是就打算见一见
  • Jenkins参数化构建自动化测试

    测试人员在进行支付类型相关的场景测试过程中 xff0c 需要真实支付的金额较大 xff0c 测试过程中又难以控制测试支付成本 xff0c 无法确切的向公司申请测试备用金 那么问题来了 xff1a 在无法避免自掏腰包进行巨额支付测试时 xff
  • 运维实战 kubernetes(k8s) 之 service

    64 TOC 运维实战 kubernetes k8s 之 service 1 service 介绍 Service可以看作是一组提供相同服务的Pod对外的访问接口 借助Service xff0c 应用可以方便地实现服务发现和负载均衡 ser
  • 企业运维之 openstack 的私有网络以及图形化配置

    企业运维之 openstack 的私有网络以及图形化 1 私有网络2 图形化配置虚拟机3 封装镜像4 上传镜像5 块存储6 kolla ansible 在上一篇的基础上 xff0c 来继续完善 openstack 的相关配置 先将控制节点启
  • AD 软件的学习--基本操作

    一 界面认识 如果某个空间消失了就在设置中的VIEW进行一个复位 device 元器件 xff1b connector 连接器 库所在文件夹 原理图大小设置 二 基本过程 放元器件时 xff0c 空格键进行旋转 先选好元件 xff0c 摆在
  • ROS学习记录(三)C++与Python文件的配置

    本篇文章依托于赵虚左老师的ROS课程 xff0c 实现HelloWorld打印 xff0c 并安装VScode环境 课程链接 讲义链接 文章目录 前言一 基本操作过程1 先创建一个工作空间 xff1b 2 再创建一个功能包 xff1b 二