ROS鎮的豔娘傳奇看過沒?小魚帶你用代碼創造做家李四!

你們好,我是小魚。很早以前關注小魚的同窗都知道小魚寫的《ROS鎮長和豔娘傳奇》的故事(詳解ROS通訊機制),不知道的能夠點下面的連接。node

ROS學習系列:村長說給我來一本豔娘傳奇!一文搞懂話題和服務​mp.weixin.qq.com圖標python

原本這只是小魚寫的一個故事,但小魚如今正好在寫ROS2教程,因而打算把他們用代碼給實現出來。git

因此今天小魚就帶你們動手來建立ROS鎮、王家村和鄉村做家李四。github

1.準備工做

節點須要存在於功能包當中、功能包須要存在於工做空間當中。因此咱們要先建立一個工做空間,再建立功能包。算法

1.1 建立工做空間

工做空間就是文件夾,因此很簡單bash

mkdir -p town_ws/srccd town_ws/src
複製代碼

1.2 建立一個功能包

這個小魚不打算單獨講,遇到一個命令說一個。markdown

咱們先講一下如何建立一個名字叫作village_li(李家村)python版本的功能包。函數

ros2 pkg create village_li --build-type ament_python --dependencies rclpy
複製代碼

你們能夠手寫一下這個代碼,感覺一下。如今小魚來說一講這條命令的含義和參數。oop

  • pkg create 是建立包的意思
  • --build-type 用來指定該包的編譯類型,一共有三個可選項ament_pythonament_cmakecmake
  • --dependencies 指的是這個功能包的依賴,這裏小魚給了一個和通訊相關的rclpy

若是build_type什麼都不寫,ros2會默認類型爲ament_cmake.學習

最後你能夠獲得這樣一個目錄結構。

2.開始編寫節點

接下來咱們開始編寫一個python節點,首先在__init__.py同級別目錄下建立一個叫作lisi.py的文件(在vscode中右擊新建就行)。

建立完成後的目錄結構長這樣子

打開lisi.py,接着咱們開始編寫代碼。跟着小魚一塊兒邊理解輸入下面的代碼,註釋不用輸。

#!/usr/bin/env python3
import rclpy
from rclpy.node import Node


class LisiNode(Node):
    """
    建立一個李四節點,並在初始化時輸出一個話
    """
    def __init__(self):
        super().__init__("lisi") #給節點一個名字 lisi
        self.get_logger().info("你們好,我是豔娘傳奇做者李四!") #來個自我介紹



def main(args=None):
    """
    ros2運行該節點的入口函數,可配置函數名稱
    """
    rclpy.init(args=args) # 初始化rclpy
    node = LisiNode()  # 新建一個節點
    rclpy.spin(node) # 保持節點運行,檢測是否收到退出指令(Ctrl+C)
    rclpy.shutdown() # rcl關閉
複製代碼

輸完代碼Crtl+S進行保存。接着修改setup.py

增長一句話,告訴ros2村莊來了一位新村民李四,要找到這位村民去village_li.lisi:main

entry_points={'console_scripts': ["lisi_node = village_li.lisi:main"  ],},)
複製代碼

完成上面的工做後,接下來就能夠編譯運行了。

3.編譯運行節點

打開終端,進入town_ws

編譯節點

colcon build
複製代碼

source環境

source install/setup.bash
複製代碼

運行節點

ros2 run village_li lisi_node
複製代碼

運行結果


4.總結

當節點運行起來後,能夠嘗試使用ros2 node list指令來查看現有的節點。這個時候你應該能看到:

這說明你的節點已經運行起來了,而且被其餘節點感知到了。

這一節,小魚帶你一塊兒使用Python完成了python節點的編寫,成功建立出來一個lisi的節點。下一節小魚帶你一塊兒去王家村,來建立單身漢王二。

我是小魚,一名在職機器人算法工程師

目前在作輸出

機器人算法註解、學習教程、工做經驗等

歡迎你們關注

原文連接:

ROS鎮的豔娘傳奇看過沒?小魚帶你用代碼創造做家李四!​mp.weixin.qq.com

相關文章
相關標籤/搜索