【ROS概述】C++运行hello world

Python和C++通用步骤:

一、创建工作空间并初始化

1、新建工作空间(work space)------使用终端(ctrl+alt+T)

复制代码
mkdir -p 空间名称/src

2、进入工作空间

复制代码
cd 空间名称

可以在文件里看到同步变化,并且demo01_ws文件夹里有子文件夹src

3、使用ros内置的编译命令

复制代码
catkin_make

目的是提供一个简单高效的方式来编译之后的代码。

二、创建功能包

复制代码
cd 自定义空间名
cd src
catkin_create_pkg 自定义ROS包名 roscpp rospy std_msgs
//比如:catkin_create_pkg helloworld roscpp rospy std_msgs

效果如下:

该功能包依赖于 ++roscpp、rospy 与 std_msgs++ ,其中roscpp是使用C++ 实现的库,而rospy则是使用python 实现的库,std_msgs是标准消息库,创建ROS功能包时,一般都会依赖这三个库实现。roscpp和rospy在优劣势上互补。C++运行效率高但因语法复杂导致编译效率低,Python与此相反,对性能和算法要求不高,旨在提高开发效率。如果想要设计一种复杂且注重运行效率的算法,则推荐使用C++(roscpp),相反如果想要开发一款对算法要求低的工具之类的则使用Python(rospy).工作中视需求而定。

三、编写并运行第一个程序:hello world

编写源文件

先进入功能包里的src,不是直属于工作空间的src:

复制代码
cd demo01_ws(我的工作空间是demo01_ws)
cd src
cd helloworld(我的功能包叫helloworld)

然后左键,点击"打开终端",输入下面命令

复制代码
nano filename//会创建一个文本文件并且打开,自定义文本文件名,但为了区分一般以.cpp为后缀表示用C++写成的文件
//如nano helloworld_c.cpp

//包含ros头文件
#include "ros/ros.h"
//编写程序入口
int main(int argc,char *argv[])
{
    //初始化ROS节点
    ros::init(argc,argv,"hello");
    //控制台输出Hello world,即输出日志
    ROS_INFO("Hello world!");
    return 0;
}
//请在英文输入法下输入括号等各种非中文字符

修改配置文件

删除#

复制代码
#add_executable(${PROJECT_NAME}_node src/helloworld_node.cpp)
#target_link_libraries(${PROJECT_NAME}_node
#   ${catkin_LIBRARIES}
# )

将上面的#删掉,就成了下面的这样:

修改名称

add_executable这个函数有两个参数需要我们修改:

①将上面的src/helloworld_node.cpp改成src/helloworld_c.cpp

②将${PROJECT_NAME}_node改成一个容易记的并且和我们程序有关的名,因为等一下要执行这个文件

就改成hw,其实就是我们源文件的代名词,我们用hw指代我们刚刚那么一长串的文件名,同样地下面的链接库也需要修改

所以最终是这样的:

复制代码
add_executable(hw src/helloworld_c.cpp)
target_link_libraries(hw
  ${catkin_LIBRARIES}
 )

编译

在工作空间中编译:

复制代码
cd demo01_ws(我的工作空间是demo01_ws)

输入并回车:

复制代码
catkin_make

成功的话会输出下面:

运行

再打开一个终端,输入:

复制代码
roscore

然后回到之前的终端(即回到我们的工作空间),输入:

复制代码
source ./devel/setup.bash

最后运行:

复制代码
rosrun helloworld(功能包名)hw(简化的C++节点名)

运行结果:

总结

  1. 先创建一个工作空间;
  2. 再创建一个功能包;
  3. 编辑源文件;
  4. 编辑配置文件;
  5. 编译并执行。
相关推荐
2601_952047797 小时前
单一策略深度教程:用轻易云把集成任务的报错实时推送到钉钉机器人
java·机器人·钉钉
Jason_zhao_MR9 小时前
Linux与实时控制如何兼得
linux·嵌入式硬件·机器人·工业控制
田里的水稻17 小时前
EI_策略训练--机器人策略训练的神经网络种类一
人工智能·神经网络·机器人
云智慧AIOps社区20 小时前
云智慧智能巡检机器人矩阵亮相:三款产品场景与能力拆解
人工智能·机器人·具身智能·智能巡检机器人·企业级智能巡检机器人·双轮足机器人·四轮足机器人
xwz小王子21 小时前
视触觉传感器:让机器人真正“摸”到世界
机器人
海盗12341 天前
微软技术日报 2026-10-08:Windows 给智能体立沙箱,Surface 换上 NVIDIA 芯
人工智能·windows·microsoft·机器人·aigc
鲁邦通物联网1 天前
机器人项目技术标怎么写?机器人梯控架构、调度与验收设计
机器人·巡检机器人·机器人梯控·agv梯控·非侵入式采集·机器人乘梯·机器人自主乘梯
硅谷秋水1 天前
将物理先验嵌入机器人学习:综述
人工智能·深度学习·机器学习·语言模型·机器人
黑妹天下第一乖2 天前
第09讲 · 多媒体与音频 SDK:硬件编解码与端侧语音
人工智能·嵌入式硬件·深度学习·机器人·音视频·iot
具身AGI2 天前
单台远程摄像头,把导航的观测源挪出机器人
机器人