毕业设计做网站想法微商城分销开发

张小明 2026/1/8 17:47:24
毕业设计做网站想法,微商城分销开发,手机怎么生成网站,光谷网站建设1、创建文件夹、创建功能包 # 创建文件夹 mkdir ros2_dir# 进入文件夹, 创建src, 进入src cd ros2_dir mkdir src cd src# 创建功能包 ros2 pkg create pub_sub_pkg --build-type ament_cmake --dependencies rclcpp std_msgs 2、创建节点#xff1a;发布主题 publisher_membe…1、创建文件夹、创建功能包# 创建文件夹mkdirros2_dir# 进入文件夹, 创建src, 进入srccdros2_dirmkdirsrccdsrc# 创建功能包ros2 pkg create pub_sub_pkg --build-type ament_cmake --dependencies rclcpp std_msgs2、创建节点发布主题publisher_member_function.cpp/** * file publisher_member_function.cpp * brief ROS 2 发布者示例周期性向topic话题发布字符串消息 * details 基于rclcpp实现使用类封装Node通过定时器周期性触发消息发布 */ // 1. 引入核心依赖头文件 #include rclcpp/rclcpp.hpp // ROS 2 C核心库提供Node、发布者、定时器、日志等核心功能 #include std_msgs/msg/string.hpp // ROS 2标准字符串消息类型定义话题通信的消息格式 #include chrono // C标准时间库用于设置定时器周期 #include string // C标准字符串库用于消息内容拼接 // 引入chrono字面量如500ms避免写std::chrono::milliseconds(500)简化代码 using namespace std::chrono_literals; /** * class MinimalPublisher * brief 自定义发布者类继承自rclcpp::NodeROS 2所有功能的核心载体 * details 封装发布者对象、定时器对象和消息计数器通过定时器回调实现周期性发布 */ class MinimalPublisher : public rclcpp::Node { public: /** * brief 构造函数初始化节点、创建发布者、创建定时器 * details * 1. 调用父类Node的构造函数设置节点名称为minimal_publisher全局唯一 * 2. 初始化消息计数器count_为0 * 3. 创建发布者对象绑定话题名和队列大小 * 4. 创建定时器对象绑定回调函数和触发周期 */ MinimalPublisher() : Node(minimal_publisher), // 初始化父类Node节点命名为minimal_publisher count_(0) // 初始化消息计数器记录发布的消息数量 { // 创建发布者对象 // 模板参数发布的消息类型必须与订阅者一致 // 参数1话题名称topic订阅者需订阅该话题才能接收消息 // 参数2队列大小10消息积压时最多缓存10条超出则丢弃旧消息避免内存溢出 publisher_ this-create_publisherstd_msgs::msg::String(topic, 10); // 创建定时器对象壁钟定时器基于系统时间 // 参数1定时器周期500ms每500毫秒触发一次回调函数 // 参数2回调函数绑定将类的成员函数timer_callback绑定到当前对象 timer_ this-create_wall_timer( 500ms, std::bind(MinimalPublisher::timer_callback, this) // bind保证回调函数能访问类的成员变量 ); // 打印初始化日志可选用于确认发布者创建成功 RCLCPP_INFO(this-get_logger(), MinimalPublisher node initialized, start publishing...); } private: /** * brief 定时器回调函数每次定时器触发时执行负责构建并发布消息 * details * 1. 创建字符串消息对象 * 2. 拼接消息内容包含计数器每次发布后自增 * 3. 打印发布日志便于调试 * 4. 发布消息到topic话题 */ void timer_callback() { // 创建std_msgs::msg::String类型的消息对象自动生命周期管理 auto message std_msgs::msg::String(); // 拼接消息内容计数器count_自增生成带计数的字符串 message.data Hello, ROS 2! Count: std::to_string(count_); // 打印INFO级日志输出当前发布的消息内容 // this-get_logger()获取节点的日志器RCLCPP_INFO是ROS 2日志宏支持DEBUG/WARN/ERROR/FATAL RCLCPP_INFO(this-get_logger(), Publishing: %s, message.data.c_str()); // 发布消息将消息发送到topic话题所有订阅该话题的节点都会收到 publisher_-publish(message); } // 类成员变量私有化避免外部直接修改 rclcpp::TimerBase::SharedPtr timer_; // 定时器智能指针ROS 2推荐用智能指针管理资源自动释放 rclcpp::Publisherstd_msgs::msg::String::SharedPtr publisher_; // 发布者智能指针 size_t count_; // 消息计数器记录已发布的消息数量size_t是无符号整型适合计数 }; /** * brief 主函数ROS 2程序入口负责初始化、运行节点、释放资源 * param argc 命令行参数个数 * param argv 命令行参数数组 * return int 程序退出码0表示正常退出 * details * 1. 初始化ROS 2上下文全局资源必须先调用 * 2. 创建发布者节点的智能指针ROS 2推荐用智能指针管理节点 * 3. 自旋节点进入事件循环处理定时器回调等异步事件 * 4. 关闭ROS 2上下文释放资源 */ int main(int argc, char * argv[]) { // 初始化ROS 2上下文解析命令行参数初始化全局资源如DDS通信层 rclcpp::init(argc, argv); // 自旋节点阻塞当前线程持续运行事件循环 // std::make_shared创建MinimalPublisher对象的智能指针自动管理内存 // spin会处理所有异步事件定时器回调、消息发布等直到节点被关闭如CtrlC rclcpp::spin(std::make_sharedMinimalPublisher()); // 关闭ROS 2上下文释放全局资源必须与init配对使用 rclcpp::shutdown(); // 程序正常退出 return 0; }3、创建节点订阅主题subscriber_member_function.cpp/** * file subscriber_member_function.cpp * brief ROS 2 订阅者示例订阅topic话题并接收/打印字符串消息 * details 基于rclcpp实现使用类封装Node通过回调函数处理接收到的话题消息 */ // 1. 引入核心依赖头文件 #include rclcpp/rclcpp.hpp // ROS 2 C核心库提供Node、订阅者、日志等核心功能 #include std_msgs/msg/string.hpp // ROS 2标准字符串消息类型与发布者保持一致的消息格式 /** * class MinimalSubscriber * brief 自定义订阅者类继承自rclcpp::NodeROS 2所有功能的核心载体 * details 封装订阅者对象通过回调函数响应话题消息实现异步接收消息 */ class MinimalSubscriber : public rclcpp::Node { public: /** * brief 构造函数初始化节点、创建订阅者 * details * 1. 调用父类Node的构造函数设置节点名称为minimal_subscriber全局唯一 * 2. 创建订阅者对象绑定话题名、队列大小和消息回调函数 */ MinimalSubscriber() : Node(minimal_subscriber) // 初始化父类Node节点命名为minimal_subscriber { // 创建订阅者对象 // 模板参数订阅的消息类型必须与发布者完全一致否则无法解析消息 // 参数1话题名称topic必须与发布者的话题名一致才能接收对应消息 // 参数2队列大小10缓存未处理的消息超出则丢弃旧消息避免内存溢出 // 参数3消息回调函数绑定收到消息时触发topic_callback_1为消息参数占位符 subscription_ this-create_subscriptionstd_msgs::msg::String( topic, 10, std::bind(MinimalSubscriber::topic_callback, this, std::placeholders::_1) ); // 打印初始化日志可选用于确认订阅者创建成功 RCLCPP_INFO(this-get_logger(), MinimalSubscriber node initialized, start listening...); } private: /** * brief 话题消息回调函数收到消息时自动执行处理接收到的字符串消息 * param msg 接收到的消息智能指针ROS 2推荐用SharedPtr避免拷贝自动内存管理 * details 打印接收到的消息内容支持后续扩展如消息解析、业务逻辑处理等 */ void topic_callback(const std_msgs::msg::String::SharedPtr msg) { // 打印INFO级日志输出接收到的消息内容 // this-get_logger()获取节点日志器msg-data.c_str()将C string转为C风格字符串 RCLCPP_INFO(this-get_logger(), I heard: %s, msg-data.c_str()); } // 类成员变量私有化避免外部直接修改 rclcpp::Subscriptionstd_msgs::msg::String::SharedPtr subscription_; // 订阅者智能指针 // ROS 2通过智能指针管理资源自动释放 }; /** * brief 主函数ROS 2程序入口负责初始化、运行节点、释放资源 * param argc 命令行参数个数 * param argv 命令行参数数组 * return int 程序退出码0表示正常退出 * details * 1. 初始化ROS 2上下文全局资源必须先调用 * 2. 创建订阅者节点的智能指针ROS 2推荐用智能指针管理节点生命周期 * 3. 自旋节点进入事件循环持续监听话题消息触发回调函数 * 4. 关闭ROS 2上下文释放全局资源 */ int main(int argc, char * argv[]) { // 初始化ROS 2上下文解析命令行参数初始化DDS通信层、节点管理器等全局资源 rclcpp::init(argc, argv); // 自旋节点阻塞当前线程持续运行事件循环 // std::make_shared创建MinimalSubscriber对象的智能指针自动管理内存 // spin会监听topic话题的消息收到消息时触发topic_callback直到节点被关闭如CtrlC rclcpp::spin(std::make_sharedMinimalSubscriber()); // 关闭ROS 2上下文释放全局资源必须与init配对使用 rclcpp::shutdown(); // 程序正常退出 return 0; }4、CMakeLists.txt 追加内容find_package 函数后面加入如下内容# # 编译可执行文件 配置依赖 安装# 核心逻辑编译源码生成可执行文件 → 链接 ROS 2 依赖库 → 安装到标准路径支持 ros2 run 调用# # 1. 编译发布者可执行文件# add_executableCMake 核心指令将指定源码编译为可执行文件# 参数1可执行文件名称自定义对应 ros2 run 命令的第二个参数如 ros2 run 包名 talker# 参数2待编译的源码文件路径src/ 是ROS 2包的标准源码目录add_executable(talker src/publisher_member_function.cpp)# 2. 为发布者可执行文件绑定ROS 2依赖# ament_target_dependenciesROS 2封装的CMake指令替代原生CMake的include_directoriestarget_link_libraries# 作用# - 自动查找 rclcpp/std_msgs 包的头文件路径如 /opt/ros/humble/include# - 自动链接依赖库如 librclcpp.so、libstd_msgs.so# - 自动设置编译选项如C标准、ROS 2宏定义# 参数1目标可执行文件名称与add_executable的第一个参数一致# 参数2依赖的ROS 2包名必须与find_package中声明的包一致ament_target_dependencies(talker rclcpp std_msgs)# 3. 编译订阅者可执行文件# 逻辑同发布者将订阅者源码编译为名为 listener 的可执行文件add_executable(listener src/subscriber_member_function.cpp)# 4. 为订阅者可执行文件绑定ROS 2依赖# 依赖包与发布者一致rclcpp是核心通信库std_msgs是消息类型库ament_target_dependencies(listener rclcpp std_msgs)# 5. 安装可执行文件到系统路径# installCMake核心指令将编译产物安装到指定目录# TARGETS指定要安装的目标可执行文件talker、listener# DESTINATION安装路径ROS 2标准路径lib/${PROJECT_NAME}# 关键作用# - 安装后可通过 ros2 run 包名 可执行文件名 调用ROS 2会在lib/包名目录下查找可执行文件# - ${PROJECT_NAME}是CMake变量自动替换为当前包名避免硬编码提高可移植性install(TARGETS talker# 要安装的发布者可执行文件listener# 要安装的订阅者可执行文件DESTINATION lib/${PROJECT_NAME})# ROS 2标准安装路径5、colcon build 编译# 回到工作空间目录【ros2_dir】 下执行colcon build --packages-select pub_sub_pkg6、运行发布者、订阅者终端1发布者# 刷入临时环境变量, 方便ros2 找到sourceinstall/setup.bash# 执行发布者ros2 run pub_sub_pkg talker终端2订阅者# 刷入临时环境变量, 方便ros2 找到sourceinstall/setup.bash# 执行发布者ros2 run pub_sub_pkg listener
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

西安网站建设是什么郑州企业网站优化多少钱

纯前端Word文档生成新体验:DOCX.js让浏览器变身文档工厂 【免费下载链接】DOCX.js Generate Microsoft Word DOCX files in pure client-side JavaScript. Try in Chrome 项目地址: https://gitcode.com/gh_mirrors/do/DOCX.js 还在为后端文档生成接口的复杂…

张小明 2026/1/5 4:52:48 网站建设

宁波医院通网站建设营销策略有哪些4种

PyTorch-CUDA 镜像是否包含 cuDNN?版本信息一览 在深度学习项目启动阶段,最令人头疼的往往不是模型设计,而是环境配置——尤其是当你要在多台 GPU 服务器上部署训练任务时。明明代码没问题,却因为 CUDA driver version is insuff…

张小明 2026/1/7 0:37:48 网站建设

建设网站包括哪些wordpress 扩展数据库

第一章:揭秘Open-AutoGLM一键部署黑科技在大模型快速迭代的今天,如何高效、稳定地部署具备自主推理能力的AI系统成为开发者关注的核心问题。Open-AutoGLM 作为开源的自动化语言模型框架,凭借其模块化设计与智能调度机制,实现了从模…

张小明 2026/1/5 4:52:44 网站建设

红色大气网站网站域名备案注册证书查询

6G显存跑2K生图:腾讯混元Image-2.1轻量化部署实战指南 【免费下载链接】hunyuanimage-gguf 项目地址: https://ai.gitcode.com/hf_mirrors/calcuis/hunyuanimage-gguf 还在为AI绘画的高门槛而烦恼吗?现在,只需6G显存的普通显卡&#…

张小明 2026/1/5 7:00:06 网站建设

中企动力做的网站被百度屏蔽免费个人博客网站模板下载

Python面向对象快捷技巧 1. 将函数用作属性 在Python中,函数也是对象,这就意味着它们可以被设置为其他对象的可调用属性。我们可以向一个已实例化的对象添加或修改函数,示例如下: class A:def print(self):print("my class is A") def fake_print():print(&q…

张小明 2026/1/5 7:00:04 网站建设

如何自己网站接装修生意做django做的网站举例

Vue-Office Excel预览配置优化终极指南:从空白页面到完美显示 【免费下载链接】vue-office 项目地址: https://gitcode.com/gh_mirrors/vu/vue-office 还在为Vue-Office项目中Excel预览显示空白而烦恼吗?本文将为你提供完整的解决方案&#xff0…

张小明 2026/1/5 7:00:03 网站建设