完成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...