ROS2笔记

(一)colcon指令

# 1. 只编译一个包
colcon build --packages-select YOUR_PKG_NAME
# 2. 允许通过更改src下的部分文件来改变install(重要)
colcon build --symlink-install

(二)topic 指令

#RQT工具之rqt_graph:
ros2 run demo_nodes_py listener
ros2 run demo_nodes_cpp talker
rqt_graph

topic 相关的CLI工具

#1.返回系统中当前活动的所有主题的列表
ros2 topic list
#2.增加消息类型
ros2 topic list -t
#3.打印实时话题内容
ros2 topic echo /chatter
#4.查看主题信息
ros2 topic info  /chatter
#5.查看消息类型
ros2 interface show std_msgs/msg/String
#6.手动发布命令
ros2 topic pub /chatter std_msgs/msg/String 'data: "123"'

(三)发布与订阅话题

python版本

发布:

        #1.创建一个publish
        self.pub_novel = self.create_publisher(String,"sexy_girl",10)
#------------------------非连续代码(功能语句块)------------------------------
        #2.发布内容语句块
        msg = String()
        msg.data  = '第%d回:潋滟湖 %d 次偶遇胡艳娘' % (self.count,self.count)
        self.pub_novel.publish(msg)        

订阅:

        #1.创建一个subsribe
        self.sub_novel = self.create_subscription(UInt32,"sexy_girl_money",self.recv_money_callback,10)
#------------------------非连续代码(功能语句块)------------------------------
        #2.编写回调函数逻辑
        def recv_money_callback(self,money):
        		pass
CPP版本

发布:

class SingleNode : public rclcpp::Node
{
private:
    rclcpp::Publisher<std_msgs::msg::UInt32>::SharedPtr pub_money;//先声明
public:
    SingleNode(string name) : Node(name)
    {
        pub_money = this->create_publisher<std_msgs::msg::UInt32>("sexy_girl_money",10);//后创建     
    };
};
//使用以下语句发布内容,根据内容类型执行选择赋值方式
pub_money->publish(sub_money);

订阅:

class SingleNode : public rclcpp::Node
{
private:
	rclcpp::Subscription<std_msgs::msg::String>::SharedPtr sub_novel;//先声明
    void sub_callback(const std_msgs::msg::String::SharedPtr msg){
				//编写回调逻辑
    }
public:
    SingleNode(string name) : Node(name)
    {
        sub_novel = this->create_subscription<std_msgs::msg::String>("sexy_girl",10, bind(&SingleNode::sub_callback,this,_1));   //后创建,回调函数用std::bind进行指定,包含变量使用_1,_2占位
    };
};

(四)自定义接口

ROS2自定义接口
1.创建接口功能包your_interfaces,在接口功能包下创建msg文件夹并创建Xxx.msg接口文件

话题接口格式:xxx.msg

int64 num

服务接口格式:xxx.srv

int64 a
int64 b
---
int64 sum

动作接口格式:xxx.action

int32 order
---
int32[] sequence
---
int32[] partial_sequence
2.修改接口功能包下Cmakelist.txt如下
find_package(rosidl_default_generators REQUIRED)
#添加消息文件和依赖
rosidl_generate_interfaces(${PROJECT_NAME}
  "msg/Xxx.msg"
   DEPENDENCIES your_dependencies
 )
3.修改package.xml
  <build_depend>rosidl_default_generators</build_depend>
  <exec_depend>rosidl_default_runtime</exec_depend>
  <member_of_group>rosidl_interface_packages</member_of_group>
ROS2接口常用CLI命令
#查看接口列表(当前环境下)
ros2 interface list
#查看所有接口包
ros2 interface packages 
#查看某一个包下的所有接口
ros2 interface package std_msgs
#查看某一个接口详细的内容
ros2 interface show std_msgs/msg/String
#输出某一个接口所有属性
ros2 interface proto sensor_msgs/msg/Image

(五)launch文件

ament-python

创建xxx.launch.py
from launch import LaunchDescription
from launch_ros.actions import Node

# 定义函数名称为:generate_launch_description
def generate_launch_description():
    # 创建Actions.Node对象li_node,标明李四所在位置
    li4_node = Node(
        package="village_li",
        executable="li4_node"
        )
    # 创建Actions.Node对象wang2_node,标明王二所在位置
    wang2_node = Node(
        package="village_wang",
        executable="wang2_node"
        )
    # 创建LaunchDescription对象launch_description,用于描述launch文件
    launch_description = LaunchDescription([li4_node,wang2_node])
    # 返回让ROS2根据launch描述执行节点
    return launch_description

set.py:

from glob import glob
import os

data_files=[
    ('share/ament_index/resource_index/packages',
        ['resource/' + package_name]),
    ('share/' + package_name, ['package.xml']),
    (os.path.join('share', package_name, 'launch'), glob('launch/*.launch.py')),#加这句话
],

ament-cmake

创建xxx.launch.py与ament-python方法不变
Cmakelist.txt:
install(DIRECTORY launch
  DESTINATION share/${PROJECT_NAME})

将参数加入launch文件

    li4_node = Node(
        package="village_li",
        executable="li4_node",
        output='screen',  #四个可选项 
        parameters=[{'write_timer_period': 1}]
        )
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值