0.前言

现在介绍ROS基本程序实现的教程有很多,步骤无非就是建工作空间,编译,创建功能包,创建文件和修改CMakeList,之后再编译、运行程序这几步。但是这些教程中很多在文件夹切换的很混乱,导致会出现一堆奇奇怪怪的错误,其实只要注意你操作的文件夹位置,很多问题都不是问题。这也是博主为什么写这篇文章的原因。

1.实现步骤

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

lxb@lxb-virtual-machine:~/study_ros$ mkdir -p my_workspace/src
lxb@lxb-virtual-machine:~/study_ros$ cd my_workspace/
lxb@lxb-virtual-machine:~/study_ros/my_workspace$ catkin_make

注意: 我的工作空间文件夹位置为:~/study_ros/my_workspace/

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

lxb@lxb-virtual-machine:~/study_ros/my_workspace$ cd src
lxb@lxb-virtual-machine:~/study_ros/my_workspace/src$ catkin_create_pkg my_function_package roscpp rospy std_msgs

image

注意: 我的功能包文件夹位置为:~/study_ros/my_workspace/src/my_function_package 以后的操作大多数都是在功能包中进行的,除了catkin_make编译

(3)进入功能包的 src 目录创建编辑核心代码hello_world.cpp

lxb@lxb-virtual-machine:~/study_ros/my_workspace/src$ cd my_function_package/
lxb@lxb-virtual-machine:~/study_ros/my_workspace/src/my_function_package$ touch hello_world.cpp
lxb@lxb-virtual-machine:~/study_ros/my_workspace/src/my_function_package$ gedit hello_world.cpp

image

注意: hello_world.cpp的内容为:

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

(4)编辑功能包下的 Cmakelist.txt文件

lxb@lxb-virtual-machine:~/study_ros/my_workspace/src/my_function_package$ gedit CMakeLists.txtimage编辑方式: 找到Cmakelist.txt文件下面对应的部分,去掉前面#注释,并将内容改为如下所示,其中hello_world_newnamehello_world.cpp的映射名,随便写,但是建议写成和hello_world.cpp同名,也就是hello_world

add_executable(hello_world_newname src/hello_world.cpp)
target_link_libraries(hello_world_newname
  ${catkin_LIBRARIES}
)

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

image 

编译成功截图

image

注意: 若编译失败,再重新走一遍流程,一般都是流程出错

(6)刷新环境并执行程序

1.先打开一个新终端,运行roscore

lxb@lxb-virtual-machine:~$ roscore

image

2.在原来的终端下刷新环境并执行程序

lxb@lxb-virtual-machine:~/study_ros/my_workspace$ source ./devel/setup.bash
lxb@lxb-virtual-machine:~/study_ros/my_workspace$ rosrun my_function_package hello_world_newname

image

作者:|云梦士|,原文链接: https://www.cnblogs.com/yunmeng-shi/p/16347537.html

文章推荐

一个恢复CSI挂载信息的解决方法

通过一次生产case深入理解tomcat线程池

手把手教你使用 Spring Boot 3 开发上线一个前后端分离的生...

ElasticSearch7.3学习(二十九)----聚合实战之使用Java api实...

PostgreSQL 的窗口函数 OVER, WINDOW, PARTITION BY, RANGE

关于基础RMQ——ST算法

浏览器跨域访问

Spring Cloud OpenFeign 的 5 个优化小技巧!

明天 520,说说两性之间的那些事

【原创】Python 极验滑块验证

HarmonyOS初探07——使用DevEco Studio预览器

国星宇航 SaaS 系统容器化最佳实践