Ros使用(3)Using parameters

创建自己的节点时,有时需要添加可从启动文件设置的参数。本教程将向您展示如何在C++类中创建这些参数,以及如何在启动文件中设置它们。

功能包创建

mkdir -p demo2_ws/src
cd src 
ros2 pkt create --build-type ament_cmake cpp_parameters --dependencies rclcpp
cd cpp_parameters

在src目录下进行创建参数文件

#include <chrono>
#include <functional>
#include <string>

#include <rclcpp/rclcpp.hpp>
using namespace std::chrono_literals;
using namespace rclcpp;
class MinimalParam:public Node{
    rclcpp::TimerBase::SharedPtr timer_;
    public:
        MinimalParam():Node("MinimalParam"){
            // 定义对应文件的参数,声明文件参数的参数名,和参数的默认值
            this->declare_parameter("my_parameter","world");
            timer_ = this->create_wall_timer(1000ms,std::bind(&MinimalParam::timer_callback,this));
        }
        void timer_callback(){
            // 获得对应的参数值
            std::string my_param = this->get_parameter("my_parameter").get_parameter_value().get<std::string>();
            RCLCPP_INFO(this->get_logger(),"Hello %s ",my_param.c_str());
            std::vector<rclcpp::Parameter> all_new_parameters{rclcpp::Parameter("my_parameter", "lala")};
            this->set_parameters(all_new_parameters);
        }
        
};
int main(int argc, char ** argv)
{
  rclcpp::init(argc, argv);
  rclcpp::spin(std::make_shared<MinimalParam>());
  rclcpp::shutdown();
  return 0;
}

timer_callback函数的第一行从节点获取参数my_parameter,并将其存储在my_param中。接下来,RCLCPP_INFO函数确保消息被记录。set_parameters函数然后将参数my_parameter设置回默认字符串值world。在用户从外部更改参数的情况下,这可确保参数始终重置回原始值。

修改对应的CMakeLists.txt文件

add_executable(minimal_param_node src/cpp_parameters_node.cpp)
ament_target_dependencies(minimal_param_node rclcpp)

install(TARGETS
  minimal_param_node
  DESTINATION lib/${PROJECT_NAME}
)

编译

rosdep install -i --from-path src --rosdistro foxy -y
colcon build --packages-select cpp_parameters

配置launch文件

您也可以在启动文件中设置该参数,但首先需要添加启动目录。在ros2_ws/src/cpp_parameters/目录中,创建一个名为launch的新目录。在其中创建一个名为cpp_parameters_launch.py的新文件

from launch import LaunchDescription
from launch_ros.actions import Node

def generate_launch_description():
    return LaunchDescription([
        Node(
            package="cpp_parameters",
            executable="minimal_param_node",
            name="custom_minimal_param_node",
            output="screen",
            emulate_tty=True,
            parameters=[
                {"my_parameter": "earth"}
            ]
        )
    ])

修改CMakeList.txt文件

install(
  DIRECTORY launch
  DESTINATION share/${PROJECT_NAME}
)

编译之后可以通过启动对应的launch文件得到对应功能包

### 回答1: 要在ROS Melodic中使用Python 3,需要安装Python 3的相关库和工具。可以按照以下步骤进行操作: 1. 安装Python 3 在Ubuntu 18.04中,Python 3已经预装。如果没有安装,可以使用以下命令安装: ``` sudo apt-get install python3 ``` 2. 安装Python 3的ROS依赖库 在ROS Melodic中,需要安装Python 3的ROS依赖库。可以使用以下命令安装: ``` sudo apt-get install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential ``` 3. 创建Python 3的ROS工作空间 可以使用以下命令创建Python 3的ROS工作空间: ``` mkdir -p ~/catkin_ws_py3/src cd ~/catkin_ws_py3/ catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3 ``` 4. 设置Python 3的ROS环境变量 可以使用以下命令设置Python 3的ROS环境变量: ``` echo "source ~/catkin_ws_py3/devel/setup.bash" >> ~/.bashrc source ~/.bashrc ``` 5. 编写Python 3的ROS程序 现在可以使用Python 3编写ROS程序了。在Python文件的开头,需要添加以下代码: ``` #!/usr/bin/env python3 ``` 这样可以确保使用Python 3来运行程序。 6. 运行Python 3的ROS程序 可以使用以下命令运行Python 3的ROS程序: ``` rosrun package_name node_name.py ``` 其中,package_name是ROS包的名称,node_name.py是Python 3的ROS节点文件名。 ### 回答2: ROS是一个机器人操作系统,已经成为许多机器人和自动化领域的标准。ROS的版本很多,其中ROS Melodic是针对Ubuntu 18.04操作系统的最新版本。与较老的ROS版本相比,ROS Melodic具有更大的兼容性和更多的功能。值得一提的是,ROS Melodic所使用的Python版本已经从Python2转移到了Python3。 Python是ROS中最常用的编程语言之一。在ROS Melodic中,Python3被用作默认Python解释器。这意味着你应该使用Python3来编写ROS Melodic中的程序,而不是使用Python2。使用Python3编写的ROS程序具有更好的性能和更长的生命周期,因为Python2的支持已经于2020年1月停止。 一些ROS中的常用Python库也已经升级到Python3版本,例如rospy,其中的一些API与Python2相比略有变化。所以,如果你的代码是用Python2编写的,若想迁移到ROS Melodic中,则需要相应地更改它。 总的来说,ROS Melodic的Python3支持使得编写ROS应用程序更容易、更深入,并且更适合在现代计算机系统中运行。如果你正在使用ROS Melodic,强烈建议开始使用Python3来编写你的ROS程序。 ### 回答3: ROS(机器人操作系统)是一个开源的、灵活的、分布式的机器人软件框架,用于构建机器人和其他自动化系统。它包含大量工具和库,可以简化机器人应用程序的开发、测试和部署。ROS支持多种编程语言,如C ++、Python等。ROS Melodic是ROS的一个版本,它是ROS的第十个正式版本,于2018年5月23日发行。 在ROS Melodic中,Python 3成为了官方建议的编程语言。这意味着开发者可以使用Python 3编写ROS的节点、消息、服务和其他ROS组件,而无需改变ROS的基本运行原理。在 ROS Melodic中,Python 3已经默认成为ROSPython的解释器。 此外,ROS还提供了与Python 3兼容的库和工具,如rosbag、rviz、roscore等,他们可以使用Python 3脚本通过ROS API进行控制和交互。Python 3的高级功能可以更好地支持ROS的开发和自动化,例如异步编程和并发执行。 需要注意的是,在ROS Melodic中,Python 2仍然可以被使用,但是官方建议使用Python 3以便更好地支持未来的ROS版本。此外,一些ROS社区成员和开发者可能仍然使用Python 2来编写他们的ROS组件和应用程序。 因此,当编写ROS应用程序时,需要考虑Python 2和3之间的兼容性问题。 总结来说,ROS Melodic使用Python 3作为官方建议的编程语言,提供了与Python 3兼容的库和工具,并提供了支持异步编程和并发执行的高级功能,以更好地支持ROS的开发和自动化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值