关于ROS2通信命名重命名的相关总结

1、统计常用端口、已占端口、预留端口、一般建议端口

常用端口

1.TCP/UDP 11311: 这个端口是 ROS 1 的默认主机端口,但在 ROS 2 中并不使用。 2.UDP 7400-7500: 这些端口用于 ROS 2 的默认 DDS(Data Distribution Service)实现,特别是 Fast DDS。 3.TCP/UDP 50051: 用于 gRPC 服务,ROS 2 的某些服务和工具可能会用到这个端口。

已占端口 要统计当前系统中已占用的端口,可以使用以下命令:

sudo lsof -i -P -n | grep LISTEN

这将列出所有正在监听的端口及其对应的服务。为了更具体地查看某个端口是否被占用,可以使用:

sudo lsof -i:<port_number>

例如,检查 11311 端口:

sudo lsof -i:11311

预留端口 预留端口通常指的是操作系统或某些关键服务默认保留的端口,例如:

4.0-1023: 系统保留端口(也称为特权端口),通常只有根用户才能绑定。 5.22: SSH 6.80: HTTP 7.443: HTTPS

这些端口不建议被普通应用程序使用,因为它们通常分配给标准服务和协议。 一般建议端口 对于自定义的 ROS 2 节点和服务,建议使用非特权端口,通常是 1024-49151 范围内的端口。以下是一些建议:

8.49152-65535: 动态端口(也称为临时端口),通常用于客户端连接。避免在这个范围内分配固定的服务端口。 9.1024-49151: 注册端口,适合自定义服务和应用。 10.11311: 虽然这个端口是 ROS 1 的默认端口,但可以用于其他非冲突服务。 11.5000-5100: 一些开发者常用的范围,可以根据实际需要自定义。

管理和分配端口的建议

12.避免冲突:在配置 ROS 2 系统时,确保所选端口没有与其他关键服务冲突。 13.文档化:将使用的端口记录在项目文档中,以便于后续维护和配置。 14.监控:定期检查系统中已占用的端口,使用如 lsof 和 netstat 等工具。

通过以上方法和建议,可以有效地管理和使用 ROS 2 系统中的端口,从而保证系统的稳定性和安全性。

2、配置launch的cmake.txt配置

"CMake install directive": {
  "prefix": "ros2_launch_install",
  "body": [
    "install(DIRECTORY launch DESTINATION share/\\${PROJECT_NAME})"
  ],
  "description": "Install a directory named 'launch' to 'share/<project_name>'"
},

3、总结重命名问题的解决语法

3.1 节点重命名

3.1.1 利用run

设置命名空间

ros2 run turtlesim turtlesim_node --ros-args --remap __ns:=/t1

起别名

ros2 run turtlesim turtlesim_node --ros-args --remap __name:= turt1

同时设置命名空间起别名

ros2 run turtlesim turtlesim_node --ros-args --remap __ns:=/t2 --remap __name:=turt2
3.1.2 利用launch

Python

from launch import LaunchDescription
from launch_ros.actions import Node
​
def generate_launch_description():
​
    return LaunchDescription([
        Node(package="turtlesim",executable="turtlesim_node",name="turtle1"),
        Node(package="turtlesim",executable="turtlesim_node",namespace="t1"),
        Node(package="turtlesim",executable="turtlesim_node",namespace="t1", name="turtle1")
    ])

XML

<launch>
    <node pkg="turtlesim" exec="turtlesim_node" name="turtle1" />
    <node pkg="turtlesim" exec="turtlesim_node" namespace="t1" />
    <node pkg="turtlesim" exec="turtlesim_node" namespace="t1" name="turtle1" />
</launch>
​

YAML

launch:
- node:
    pkg: turtlesim
    exec: turtlesim_node
    name: turtle1
- node:
    pkg: turtlesim
    exec: turtlesim_node
    namespace: t1
- node:
    pkg: turtlesim
    exec: turtlesim_node
    namespace: t1
    name: turtle1
3.1.3 在代码中编写

改节点名和命名空间方法

class MyNode : public rclcpp::Node
{
public:
    MyNode()
        : Node("my_node", "my_namespace")  // 设置节点名称和命名空间

3.2 话题重命名

3.2.1 利用run

设置命名空间

ros2 run turtlesim turtlesim_node --ros-args --remap __ns:=/t1

重映射

ros2 run turtlesim turtlesim_node --ros-args --remap /turtle1/cmd_vel:=/cmd_vel
3.2.2 利用launch

PYthon

from launch import LaunchDescription
from launch_ros.actions import Node
​
def generate_launch_description():
​
    return LaunchDescription([
        Node(package="turtlesim",executable="turtlesim_node",namespace="t1"),
        Node(package="turtlesim",
            executable="turtlesim_node",
            remappings=[("/turtle1/cmd_vel","/cmd_vel")]
        )
​
    ])

XML

<launch>
    <node pkg="turtlesim" exec="turtlesim_node" namespace="t1" />
    <node pkg="turtlesim" exec="turtlesim_node">
        <remap from="/turtle1/cmd_vel" to="/cmd_vel" />
    </node>
</launch>
​

YML

launch:
- node:
    pkg: turtlesim
    exec: turtlesim_node
    namespace: t1
- node:
    pkg: turtlesim
    exec: turtlesim_node
    remap:
    -
        from: "/turtle1/cmd_vel"
        to: "/cmd_vel"
​
3.2.3 编码
3.2.3.1 全局话题

C++

publisher_ = this->create_publisher<std_msgs::msg::String>("/topic/chatter", 10);

PY

self.publisher_ = self.create_publisher(String, '/topic/chatter', 10)
3.2.3.2 相对话题

C++

publisher_ = this->create_publisher<std_msgs::msg::String>("topic/chatter", 10);

PY

self.publisher_ = self.create_publisher(String, 'topic/chatter', 10)
3.2.3.3 私有话题

C++

publisher_ = this->create_publisher<std_msgs::msg::String>("~/topic/chatter", 10);

PY

self.publisher_ = self.create_publisher(String, '~/topic/chatter', 10)
  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值