ROS2学习笔记:Python最小服务端/客户端节点

按照之前学习到的建立workspace以及package框架的指令,创建我们的这个最小服务端客户端节点的框架: ros2 pkg create –build-type ament_python –license Apache-2.0 py_srvcli –dependencies rclpy example_interfaces 当节点之间使用服务进行通信时,发送数据请求的节点称为客户端节点,响应请求的节点称为服务节点。请求和响应的结构由 .srv 文件决定。在使用ros2命令生成一个package框架时候,需要一个参数example_interfaces来生成需要的.srv文件。对于我们一个两数相加的服务例子,在.srv需要如下内容: int64 a int64 b — int64 sum 前边两个是客户端request的参数,最后是服务端response的参数。然后开始准备我们具体的代码。 服务端代码为: from example_interfaces.srv import AddTwoInts import rclpy from rclpy.node import Node class MinimalService(Node): def __init__(self): super().__init__(‘minimal_service’) self.srv = self.create_service(AddTwoInts, ‘add_two_ints’, self.add_two_ints_callback) def add_two_ints_callback(self, request, response): response.sum = request.a + request.b self.get_logger().info(‘Incoming request\na:

ROS2学习笔记:Python最小服务端/客户端节点 Read More »

ROS2学习笔记:C++最小服务端/客户端节点

当节点之间使用服务进行通信时,发送数据请求的节点称为客户端节点,响应请求的节点称为服务节点。请求和响应的结构由 .srv 文件决定。在使用ros2命令生成一个package框架时候,需要一个参数example_interfaces来生成需要的.srv文件。对于我们一个两数相加的服务例子,在.srv需要如下内容: int64 a int64 b — int64 sum 前边两个是客户端request的参数,最后是服务端response的参数。然后开始准备我们具体的代码。 服务端示例代码为: #include “rclcpp/rclcpp.hpp” #include “example_interfaces/srv/add_two_ints.hpp” #include <memory> void add(const std::shared_ptr<example_interfaces::srv::AddTwoInts::Request> request, std::shared_ptr<example_interfaces::srv::AddTwoInts::Response> response) { response->sum = request->a + request->b; RCLCPP_INFO(rclcpp::get_logger(“rclcpp”), “Incoming request\na: %ld” ” b: %ld”, request->a, request->b); RCLCPP_INFO(rclcpp::get_logger(“rclcpp”), “sending back response: [%ld]”, (long int)response->sum); } int main(int argc, char **argv) { rclcpp::init(argc, argv);

ROS2学习笔记:C++最小服务端/客户端节点 Read More »

ROS2学习笔记:Python最小发布/接收节点

通过前边流程建立了workspace和基于Python的package框架后,下边是极简的一个Python语言实现的Publisher和Subscriber例子: import rclpy from rclpy.node import Node from std_msgs.msg import String class MinimalPublisher(Node): def __init__(self): super().__init__(‘minimal_publisher’) self.publisher_ = self.create_publisher(String, ‘topic’, 10) timer_period = 0.5 # seconds self.timer = self.create_timer(timer_period, self.timer_callback) self.i = 0 def timer_callback(self): msg = String() msg.data = ‘Hello World: %d’ % self.i self.publisher_.publish(msg) self.get_logger().info(‘Publishing: “%s”‘ % msg.data) self.i += 1 def main(args=None):

ROS2学习笔记:Python最小发布/接收节点 Read More »

ROS2学习笔记:C++最小发布/接收节点

通过前边流程建立了workspace和基于C++的package框架后,下边是极简的一个C++语言实现的Publisher和Subscriber例子: #include <chrono> #include <functional> #include <memory> #include <string> #include “rclcpp/rclcpp.hpp” #include “std_msgs/msg/string.hpp” using namespace std::chrono_literals; /* This example creates a subclass of Node and uses std::bind() to register a * member function as a callback from the timer. */ class MinimalPublisher : public rclcpp::Node { public: MinimalPublisher() : Node(“minimal_publisher”), count_(0) { publisher_ = this->create_publisher<std_msgs::msg::String>(“topic”,

ROS2学习笔记:C++最小发布/接收节点 Read More »

ROS2学习笔记:service服务、parameter参数、action动作

如果了解过车载总线的SOME/IP,那么再看ROS2的Service就好简单,原理基于一样,就说订阅和响应。 常用的ROS2 service命令: ros2 service list ros2 service type <service_name> ros2 service find <type_name> ros2 interface show <type_name> ros2 service call <service_name> <service_type> <arguments> 常用的ROS2 param 命令: ros2 param list ros2 param get <node_name> <parameter_name> ros2 param set <node_name> <parameter_name> <value> ros2 param dump <node_name> ros2 param load <node_name> <parameter_file> ros2 run <package_name> <executable_name> –ros-args

ROS2学习笔记:service服务、parameter参数、action动作 Read More »

ROS2学习笔记:topic话题、build包、workspace、package创建

学习topic话题感觉套用CAN总线的知识非常高效,Publisher就是在一条CAN总线写入一个信息,Subscriber就是在CAN总线监听一个信息。发送端(总线写入)可以有多个,接收端(总线监听)也可以有多个。 常用的topic命令: ros2 topic list ros2 topic echo <topic_name>: ros2 topic echo /turtle1/cmd_vel ros2 interface show <msg_type>: ros2 interface show geometry_msgs/msg/Twist ros2 topic pub <topic_name> <msg_type> ‘<args>’ : ros2 topic pub /turtle1/cmd_vel geometry_msgs/msg/Twist “{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}” ros2 topic hz: ros2 topic hz /turtle1/pose ros2

ROS2学习笔记:topic话题、build包、workspace、package创建 Read More »

ROS2学习笔记:节点node

经历了传统汽车ECU项目开发再来看ROS的节点就特别好的理解,Node和汽车电子分布式ECU特别的像,都是挂在到总线上,汽车是CAN、以太网,ROS是DDS,也有集中不同的信号形式做交互。根据功能定位的不同节点可大可小,可复杂可简单。通信方式也可以按照数据的特点有不同的区分。Topic特别像CAN总线以及车载以太网的PDU,而ROS的Service则很像汽车的SOME/IP。Parameter的概念也很像。 比较重要的命令: ros2 run <package_name> <executable_name> 其中Package和executable不需要一一对应,一个Package可以包含多个节点,每个节点就是独立可执行的文件。同时一个Package也可以没有可执行文件,通常用来定义消息、服务、动作等,甚至是纯库包,只提供功能库,供其他package调用。甚至还有配置/Launch的文件包,只包含启动文件、参数配置等,可以将Package理解成一个容器,可以装很多东西。 在命令启动时候,可以显式修改一些节点的默认参数,语法为: ros2 run turtlesim turtlesim_node –ros-args –remap __node:=my_turtle   其他还有个作用于node比较有用的命令,查看node详细信息:   ros2 node info <node_name>    

ROS2学习笔记:节点node Read More »

ROS2学习笔记:小乌龟、rqt

小乌龟几乎是所有学习ROS第一个例子,就像写代码的“Hello World”一样。通过这个小例子可以初步了解ROS2中几个核心的概念:node节点、topic话题、parameter参数等。 首先是小乌龟安装: sudo apt update sudo apt install ros-humble-turtlesim 然后重开两个窗口,一个是小乌龟节点,一个是控制节点: ros2 run turtlesim turtlesim_node ros2 run turtlesim turtle_teleop_key XXX 再开一个Terminal,通过下列命令可以看当前网络的node, topic, service, actin: ros2 node list ros2 topic list ros2 service list ros2 action list rqt 是 ROS 2 的图形用户界面(GUI)工具。在 rqt 中完成的所有操作也可以在命令行中完成,但 rqt 提供了一种更用户友好的方式来操作 ROS 2 元素,直观,新手友好。 XXX XXX 对于网络整体拓扑的查看,以及快速简单看一个数据或者触发一个命令,rqt真的挺简单实用的。

ROS2学习笔记:小乌龟、rqt Read More »