ros基本用法

ros::init

ros::init ( argc, argv, "my_node_name" );
ros::init ( argc, argv, "my_node_name", ros::init_options::AnonymousName );
ros::init ( argc, argv, "my_node_name", ros::init_options::NoSigintHandler );

ros::init(argc, argv, "my_node_name");是最基本的初始化方式,用于创建一个节点并指定节点名称为 "my_node_name"。

ros::init(argc, argv, "my_node_name", ros::init_options::AnonymousName); 在基本初始化的基础上,使用了匿名节点名称,这允许在运行时为节点生成唯一的名称,通常用于避免节点命名冲突。

ros::init(argc, argv, "my_node_name", ros::init_options::NoSigintHandler); 除了指定节点名称外,使用了 `ros::init_options::NoSigintHandler`。这表示在按下Ctrl+C时,ROS不会处理SIGINT信号。通常,ROS会捕获SIGINT信号并进行清理工作,但使用`NoSigintHandler`选项可以禁用这种默认行为。

ros::NodeHandle

节点定义即初始化方式

ros::NodeHandle nh_; //通常用于topic和service的调用  普通定义
ros::NodeHandle private_nh_("~"); //通常用于参数的调用   //私有句柄定义
ros::NodeHandle nh_("some_namespace"); //可以,但通常不用
节点句柄初始化方式ROS真正寻找(resolve)的参数
ros::NodeHandle nh_; /node_namespace/param_name
ros::NodeHandle private_nh_("~"); /node_namespace/node_name/param_name
ros::NodeHandle nh_("some_namespace");/node_namespace/some_namespace/param_name

### ROS 中 `arg` 参数的用法ROS 的 Launch 文件中,`<arg>` 标签用于定义可重用的参数。通过 `<arg>`,可以在启动多个节点时传递动态配置选项[^1]。 #### 定义和使用 `arg` 以下是 `<arg>` 的基本语法: ```xml <!-- 定义一个带有默认值的参数 --> <arg name="my_arg" default="default_value"/> <!-- 或者定义一个不带默认值的参数 --> <arg name="another_arg"/> ``` 当定义好参数后,可以通过以下方式将其赋值给其他标签或属性: ```xml <node pkg="package_name" type="node_type" name="node_name"> <!-- 将 arg 值作为参数传入节点 --> <param name="example_param" value="$(arg my_arg)"/> </node> ``` 如果未提供默认值,则必须在运行时显式指定该参数的值。例如,在终端中执行 launch 文件时可以这样设置参数: ```bash roslaunch package_name example.launch my_arg:=custom_value ``` #### 示例教程 下面是一个完整的例子,演示如何在一个简单的 launch 文件中使用 `arg` 来控制是否启用调试模式。 假设有一个名为 `simple_node.py` 的 Python 节点,它接受一个布尔型参数 `debug_mode` 表示是否打印额外的日志信息。 ##### 1. 创建 Launch 文件 编辑 `launch/example.launch` 文件如下所示: ```xml <?xml version="1.0"?> <launch> <!-- 定义 debug_mode 参数,默认关闭调试 --> <arg name="debug_mode" default="false"/> <!-- 启动 simple_node 并将 debug_mode 参数传递进去 --> <node pkg="learning_parameter" type="simple_node.py" name="simple_node"> <param name="debug_mode" value="$(arg debug_mode)" /> </node> </launch> ``` ##### 2. 编写简单节点代码 编写 `scripts/simple_node.py` 如下: ```python #!/usr/bin/env python import rospy def main(): rospy.init_node('simple_node', anonymous=True) # 获取 debug_mode 参数 debug_mode = rospy.get_param('~debug_mode', False) if debug_mode: rospy.loginfo("Debug mode is enabled.") else: rospy.loginfo("Debug mode is disabled.") if __name__ == '__main__': try: main() except rospy.ROSInterruptException: pass ``` 确保脚本具有可执行权限: ```bash chmod +x scripts/simple_node.py ``` ##### 3. 运行测试 正常情况下运行 launch 文件会禁用调试模式: ```bash roslaunch learning_parameter example.launch ``` 输出应显示: ``` [INFO] [....]: Debug mode is disabled. ``` 要启用调试模式,只需覆盖 `debug_mode` 参数: ```bash roslaunch learning_parameter example.launch debug_mode:=true ``` 此时输出应该是: ``` [INFO] [....]: Debug mode is enabled. ``` --- ### 总结 上述示例展示了如何利用 `<arg>` 在 ROS 的 Launch 文件中实现灵活的参数化配置。这使得开发人员能够轻松调整系统的运行行为而无需修改源码[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值