ROS学习笔记1——用ros输出helloworld

本文详细介绍了如何在VSCode中设置ROS工作空间,使用快捷键编译,创建并配置C++功能包,以及在CMakeLists.txt中进行编译和执行的步骤。

一、创建ROS工作空间

mkdir -p xxx_ws/src(必须得有 src)
cd xxx_ws
catkin_make

二、启动vscode

进入工作空间,启动vscode

code .

三、快捷键编译ros

快捷键 ctrl + shift + B 调用编译,点击catkin_make:build后面的小齿轮

修改.vscode/tasks.json 文件

{
	"version": "2.0.0",
	"tasks": [
		{
			"label": "catkin_make:debug", //代表提示的描述性信息
            "type": "shell",  //可以选择shell或者process,如果是shell代码是在shell里面运行一个命令,如果是process代表作为一个进程来运行
            "command": "catkin_make",//这个是我们需要运行的命令
            "args": [],//如果需要在命令后面加一些后缀,可以写在这里,比如-DCATKIN_WHITELIST_PACKAGES=“pac1;pac2”
            "group": {"kind":"build","isDefault":true},
            "presentation": {
                "reveal": "always"//可选always或者silence,代表是否输出信息
            },
            "problemMatcher": "$msCompile"
		}
	]
}

此时可以用ctrl + shift + B 测试能否成功编译。

四、创建ROS功能包

1、选定 src 右击 ---> create catkin package

2、设置包名:

helloworld

3、添加依赖:

roscpp rospy std_msgs    //一般来说都会添加这三个

五、C++代码实现

在功能包的src下创建cpp文件,注意cpp文件命名规范。

#include "ros/ros.h"

int main(int argc,char *argv[])
{
    //解决乱码问题
    setlocale(LC_ALL,"");
    ros::init(argc,argv,"helloworld");    //节点初始化
    ROS_INFO("hello world!,哈哈哈");    //输出日志
    
    return 0;
}

六、配置CMakeLists.txt文件

1、add_executable命令用于使用指定的源文件向项目(project)添加可执行文件

add_executable(节点名称   src/可执行cpp文件在功能包下的路径.cpp)

2、target_link_libraries命令用于指定链接给定目标和/或其依赖项时要使用的库或标志来自链接库目标的使用要求将被传播

target_link_libraries(节点名称  ${catkin_LIBRARIES})

七、编译执行

1、ctrl + shift + B 快捷键进行编译

2、可以在vscode中新建终端,目录会自动定位在该代码的工作空间下。

3、开启roscore

4、开一个新终端,刷新环境变量

source ./devel/setup.bash

5、执行代码

rosrun helloworld helloworld

ROS2学习笔记包含以下内容: ### RCL(ROS Client Library) RCL是ROS客户端库,是ROS的一种API,提供了对ROS话题、服务、参数、Action等接口。不同的语言对应着不同的rcl,但基本功能相同。例如Python语言提供了rclpy来操作ROS2的节点话题服务等,C++则使用rclcpp提供API操作ROS2的节点话题和服务等。ROS2 API的实现层级中,最下面是第三方的DDS,rmw(中间件接口)层是对各家DDS的抽象层,基于rmw实现了rclc,基于rclc,ROS2官方实现了rclpy和rclcpp [^5]。 ### GUI和CLI - **GUI(Graphical User Interface)**:图形用户界面,如Windows系统,可通过鼠标点击按钮等图形化交互完成任务。 - **CLI(Command - Line Interface)**:命令行界面,如终端的黑框框,没有图形化 [^5]。 ### API(Application Programming Interface) 应用程序编程接口。比如写了一个库,里面有很多函数,使用者不知函数内部实现,需看文档或注释了解函数入口参数、返回值及用途。在C和C++中表现为头文件,在Python中表现为Python文件 [^5]。 ### 命令行操作 - `ros2 pkg --h`:获取pkg的帮助命令。 - `ros2 pkg executables 包名`:输出所有功能包下的可执行程序。 - `ros2 pkg list`:列出所有功能包。 - `ros2 pkg prefix 包名`:列出功能包路径。 - `ros2 pkg xml`:输出功能包的package.xml内容 [^2]。 ### 创建节点模板(Python) ```python import rclpy from rclpy.node import Node class Mynode(Node): def __init__(self): super().__init__("hello_node_py") self.get_logger().info("hello world!(py继承)") def main(): rclpy.init() node = Mynode() rclpy.shutdown() if __name__ == '__main__': main() ``` ### 示例代码 以下是一个创建HelloWorld节点的Python代码,初始化时输出“hello world”日志: ```python #!/usr/bin/env python3 # -*- coding: utf-8 -*- import rclpy from rclpy.node import Node import time class HelloWorldNode(Node): def __init__(self, name): super().__init__(name) while rclpy.ok(): self.get_logger().info("Hello World") time.sleep(0.5) def main(args=None): rclpy.init(args=args) node = HelloWorldNode("node_helloworld_class") rclpy.spin(node) node.destroy_node() rclpy.shutdown() ``` ### 编译运行 ```bash cd ~/ros2_ws colcon build --packages-up-to topic_pkg ros2 launch topic_pkg pub_sub.launch.xml ``` ### 小乌龟教程相关 之前的配置ros2环境课程(https://docs.ros.org/en/foxy/Tutorials/Configuring - ROS2 - Environment.html)可教你如何配置环境,后续可安装小乌龟包turtlesim [^3]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值