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

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


前言

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文件名
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个问题没有绝对的答案,因为它取决于你的个人喜好和项目需求。如果你已经熟悉了C++,那么使用C++编写ROS程序可能会更容易上手。但是,如果你更喜欢Python,那么使用Python编写ROS程序也是完全可行的。此外,Python在编写ROS程序时提供了更高的灵活性和快速开发的能力。因此,最好根据自己的需求和个人喜好来选择使用哪种编程语言。 ### 回答2: 学习ROS首先要掌握两个方面的知识:ROS软件框架和编程语言。ROS框架提供了分布式计算能力和传感器数据的通信机制,同时ROS还有大量的可重复利用的软件模块,这些模块可以协同工作,形成复杂的系统。编程语言是ROS框架的实现手段之一,常用的编程语言包括C++Python、Java、Matlab等。 对于选择C++还是Python这个问题,不同的开发者会有各自的看法。C++是一门高效的系统级编程语言,运行速度快,内存占用少,在实时性要求高的应用场景下表现优异。相比之下,Python则更注重开发效率与易读性,适合进行算法设计、数据处理与可视化等应用。Python语言特别适合在ROS进行高层次的控制逻辑开发,例如图像处理、路径规划、语音识别等任务。像ROS一些常见的算法库,也都提供了Python语言API的访问接口。 从个人经验来看,选择ROS编程语言主要还是和个人的编程习惯和习惯与偏好相关,以及与实际应用场景相关。如果你已经熟练掌握了C++Python的编程技能,对于选择哪门语言来说并没有特别严格的限制,个人感觉需要更加注重实际应用场景需求,以及自己熟悉的编程语言特点。在学习,可以尝试过一段时间C++或者Python,根据自己发现的优缺点再去决定使用哪个语言,也可以通过学习ROS的例程和官方文档,初步探索ROS编程的语言选择方法。 ### 回答3: 针对学习ROSC++还是Python好这个问题,其实不存在“一劳永逸”的答案,因为二者各有优劣。 C++语言是ROS的原生语言,它具有丰富的系统性能和高效的编译器,制作大型项目的时候尤其方便。而且C++还可以让你直接编写ROS节点,可以更好地管理内存和硬件资源,使得程序性能大大提升。此外,由于ROSC++库实现了许多低级别的功能,克服了一些Python库无法克服的普遍问题,在执行大量计算任务时能够保持稳定性。因此,在需要高性能和高可靠性的项目,建议使用C++Python语言相比于C++来说更具有灵活性和易用性,也更容易上手。它的优点在于编写简易的ROS程序,处理少量数据和执行简单的任务而言更加便捷。Python也允许快速编写原型实现,在功能上具有更高的可读性,更容易适应程序的需求更改。此外,Python还提供了大量的第方库,像是PyQt、numpy、matplotlib,在快速创建用户界面或绘图等非机器人的任务很受欢迎。 总之,建议根据具体的程序目标来选择使用C++Python。在程序性能要求高或需要使用VSLAM等算法的场景下,可以优先考虑C++;在简单程序、算法模型验证上等场景下,Python也可以更加适合。为避免局限于一种语言,最好还是懂得两者的编程语言,这样可以较为灵活的选择使用哪种语言。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值