测试rose_ros

  • 这里的测试代码,都是跨平台的,即windows、android一样。但为有好的调试环境,着重用windows下的visual studio。
  • 进入测试前,一定要先编译出launcher.exe。

 

一、Ros通信机制:topic、service、action等

1.1 进程内不复制(nocopy-intra = true)

这种方式下,不须要运行roscore。

步骤1:修改<apps-src>/apps/launcher/map_controller.hpp

class map_controller : public base_controller, public events::mouse_handler_base, public tros_instance::tslot
{
private:
	std::unique_ptr<net::tworker> node1_;
	std::unique_ptr<net::tworker> node2_;
};

在map_controller.hpp增加以上代码。

步骤2:修改<apps-src>/apps/launcher/map_controller.cpp

void map_controller::click_insert()
{
    const bool test = true;
    if (test) {
        if (node1_.get() == nullptr) {
            node1_.reset(new net::tworker(std::bind(test__talker, _1), NULL, NULL, NULL, "talker"));
            node2_.reset(new net::tworker(std::bind(test__listener, _1), NULL, NULL, NULL, "listener"));
            run_widget_->set_label("misc/stop96.png");

        } else {
            run_widget_->set_label("misc/start.png");
            node1_.reset();
            node2_.reset();
        }
        return;
    }
    ......
}

在map_controller::click_insert增加以上代码。让在test = true时,第一次click_insert,运行两个线程,每个线程对应一个node,第二次click_insert,则销毁这两个线程,即退出这两个node。

步骤3:运行launcher、测试结果

图1 右上角“Run”按钮

 

  1. Debug——Start Debugging,运行launcher.exe。
  2. 进入“地图”。
  3. 单击右上角“Run”按钮,触发执行click_insert,启动两node。在Visual Studio的output会看到test__talker、test__listener中的相关日志。
  4. 再次单击右上角“Run”按钮,让再次触发执行click_insert,退出两node。

以上测试成功后,便可深入看Rose-Ros代码。1)nocopy-intra = true时的ros master机制。2)让node1_、node2_运行其它node,像service、action机制的。3)可定义更多net::tworker,让同时运行更多node。

1.2 Ros原有的一node一进程模式(nocopy-intra = false)

步骤1:启动cmd,运行roscore。

步骤2:参考“1.1 进程内不复制(nocopy-intra = true)”,测试相关功能。要是在这之前没有运行过roscore,launcher会阻塞在master.cpp的bool execute(const std::string& method, ...),要看具体哪语句可执行“Debug——Break All”。

步骤3:启动另一个cmd,此时launcher就是个标准ros node,rosnode命令可看到这个node。在node1_、node2_未销毁时,运行rostopic、rosservice,可看到launcher中创建的话题等。

全部评论: 0

    写评论: