ROS節點與OROCOS元件通訊 構建元件

2021-06-27 16:37:04 字數 2685 閱讀 5022

完成ros、orocos_toolchain、rtt_ros_integration三個部分的安裝後,開始構建orocos元件。

使用ocl指令碼構建orocos的catkin編譯包:

cd ~/ws/underlay/src

rosrun ocl orocreate-catkin-pkg hello_world

orocos的catkin編譯包結構如下:

my_orocos_pkg

├── cmakelists.txt

├── package.xml

├── include

│ └── my_orocos_pkg

└── src

此時直接編譯不能通過,因為無法通過orocos_typegen_hearders()生成.so檔案,因此需要修改cmakelist.txt檔案如下:

...
#orocos_typegen_headers(include/hello_world/hello_world-types.hpp) # ...you may add multiple header files
...
完成這個操作後,可以再~/ws/underlay/目錄下執行catkin_make編譯通過。

1、修改cmakelist.txt檔案如下:

...
find_package(orocos-rtt quiet)

if (not orocos-rtt_found)

message (fatal_error "\ncould not find orocos. please use the shell command\n 'source orocos_toolchain/env.sh' and then run cmake again.")

endif()

find_package(catkin required components

rtt_ros

)

...
orocos_generate_pkg(
include_dirs include

depends rtt_ros

depends rtt_std_msgs

)
第一步是為catkin編譯過程新增依賴元件rtt_ros,以便後續**中順利實現橋接功能。

第二步是在生成編譯結果時新增依賴項。

2、修改package.xml檔案如下:

...
rtt

orogen

ocl  rtt_ros

rtt_roscomm

rtt_std_msgs...

rtt

oclrtt_ros

rtt_roscomm

rtt_std_msgs...

修改hello_world-component.hpp檔案如下:

#ifndef orocos_hello_world_component_hpp

#define orocos_hello_world_component_hpp

#include #include #include #include #include class hello_world : public rtt::taskcontext;

#endif

修改hello_world-component.cpp檔案如下:

#include "hello_world-component.hpp"

#include #include hello_world::hello_world(std::string const& name) : taskcontext(name)

//set the priority and period

this->setactivity( new rtt::activity(0, 0.001));

//add output port to hello_world component

this->ports()->addport("out_port", outport);

outport.createstream(rtt_roscomm::topic("/chatter"));

std::cout << "hello_world constructed !" import("rtt_std_msgs")

import("hello_world")

print.ln("script imported hello_world package:")

displaycomponenttypes()

loadcomponent("hello_world_task", "hello_world")

print.ln("script created hello component with period: " + hello_world_task.getperiod() )

至此元件構建完畢。

ROS節點與執行

nodes 節點,乙個節點即為乙個可執行程式,它可以通過ros與其他節點通訊,另外,乙個catkin程式包裡可以有很多節點。messages 訊息,訊息是一種ros資料型別,用於訂閱或發布到乙個話題,是乙個載體。topics 話題,節點可以向話題發布訊息或可以向話題訂閱訊息,像通訊中轉站一樣。mas...

ROS與ROS2通訊機制的區別

ros是由standford的pr2專案起源,它有一套非常完備的工程系統,可以適用於大部分的機械人場景。ros是通訊機制 工具軟體包 機械人高層技能以及機械人生態系統的集合體。來自roswiki 一般來說,ros需要有乙個roscore作為主節點來執行其他所有的程序,如果這個主節點出現錯誤,整個系統...

ROS 1 4 利用主題與節點互動

要進行互動和獲取主題的資訊,可以使用rostopic 工具。rostopic pub 可以發布任何節點都是可以訂閱的主題,我們只需要用正確的名稱將主題發布出去。rostopic pub 次數 topic名字 msg type args 如rostopic pub r turtle1t cmd vel...