ros编译命令,Ros命令
难度等级:
简单的命令调用
困难的编程
命令调用简单情况
ROS1:
rosrun包名可执行文件名
*ROS1必须保证主节点的运行单独使用rosrun。
(罗斯科)
ROS2:
ros2运行包名可执行文件名
比如启动键盘遥控器turtlesim
ROS1:
罗斯科雷
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle _ teleop _ key
大多数ROS1节点在启动时连接到节点管理器。如果连接在操作过程中中断,将不会尝试重新连接。因此,如果roscore终止,当前运行的其他节点将无法建立新的连接,即使roscore稍后重新启动。
所以,DDS就推出来了!(当然,这只是重要原因之一)
ROS2:
ros2运行turtlesim turtlesim_node
ros2运行turtlesim turtle_teleop_key
ROS基于DDS/RTPS,作为中间件,提供发现、序列化和传输功能。综上所述,DDS是一个端到端的中间件,提供与ROS系统相关的功能,如分布式发现(不像ROS 1采用的roscore那样集中)和控制不同“服务质量”传输的选项。
DDS是一种行业标准,然后由一系列供应商实现,例如:RTI-CONNECT或ADLink -OpenSplice RTPS(也称为DDSI-RTPS)的实现版本是DDS用于网络通信的有线协议。虽然有些实现不能满足完整的DDS API,但是可以为ROS 2提供足够的功能,比如eProsima的实现版本——Fast RTPS。ROS支持多种DDS/RTPS实现,因此在选择供应商/实现时不能“一刀切”。在选择中间件实现时,可能要考虑许多因素:许可、技术、平台可用性或计算空间等。供应商可能会提供几种DDS或RTPS实施版本,以满足不同的要求。例如,RTI有一些不同目的的Connext实现更改,例如专用于微控制器,另一个用于需要特殊安全认证的应用程序(目前ROS 2仅支持其标准桌面版本)。为了用DDS/RTPS实现和封装ROS 2,ROS中间件“rmw”的接口(也称rmw接口或RMW接口)需要创建一个用DDS或RTPS实现的API和工具来抽象ROS中间件的接口。实现和维护RMW包来支持DDS开发需要做大量的工作,但是至少支持一些实现来保证ROS 2代码库不依赖于任何具体的实现是非常重要的,因为用户可能要根据具体项目的需要来切换实现版本。
简单案例编程
为什么包名是turtlesim?
这是功能包的名称吗?
cmake_minimum_required(版本3.5)
项目(turtlesim)
if(非CMAKE_CXX_STANDARD)
集合(CMAKE_CXX_STANDARD 14)
endif()
if(CMAKE_COMPILER_IS_GNUCXX或CMAKE_CXX_COMPILER_ID匹配 Clang )
add _ compile _ options(-Wall-Wextra-wpe dantic)
endif()
find_package(需要ament_cmake)
find_package(需要ament_index_cpp)
find_package(需要geometry_msgs)
find_package(Qt5必需组件小部件)
find_package(需要rclcpp)
find_package(需要rclcpp_action)
find_package(需要rosidl_default_generators)
find_package(需要std_msgs)
find_package(需要std_srvs)
包含目录(包含{ qt5 widgets _ INCLUDE _ DIRS })
rosidl _ generate _ interfaces($ { PROJECT _ NAME }
action/RotateAbsolute.action
msg/Color.msg
msg/Pose.msg
srv/Kill.srv
srv/SetPen.srv
srv/Spawn.srv
srv/绝对瞬间移动. SRV
SRV/teleport relative . SRV’)
set(dependencies ament _ index _ CPP geometry _ msgs rcl CPP rcl CPP _ action STD _ msgs STD _ srvs )
设置(turtlesim_node_SRCS
src/turtlesim.cpp
src/turtle.cpp
src/turtle_frame.cpp
)
设置(turtlesim_node_HDRS
include/turtle sim/turtle _ frame . h
)
qt5_wrap_cpp(图尔西姆_节点_ MOCS $ {图尔西姆_节点_HDRS})
add _ executable(turtle sim _ node $ { turtle sim _ node _ SRCS } $ { turtle sim _ node _ MOCS })
target _ link _ libraries(turtle sim _ node Qt5:Widgets)
ament _ target _ dependencies(turtlesim _ node $ { dependencies })
rosidl _ target _ interfaces(turtlesim _ node $ { PROJECT _ NAME } rosidl _ typesupport _ CPP )
add _ executable(turtle _ teleop _ key教程/teleop_turtle_key.cpp)
ament _ target _ dependencies(turtle _ teleop _ key $ { dependencies })
rosidl _ target _ interfaces(turtle _ teleop _ key $ { PROJECT _ NAME } rosidl _ typesupport _ CPP )
add _可执行文件(draw_square教程/draw_square.cpp)
ament _ target _ dependencies(draw _ square $ { dependencies })
rosidl _ target _ interfaces(draw _ square $ { PROJECT _ NAME } rosidl _ typesupport _ CPP )
添加可执行文件(模拟教程/mimic.cpp)
元素_目标_依赖项(模仿$ {依赖项})
rosidl _目标_接口(模仿$ { PROJECT _ NAME } rosidl _ typesupport _ CPP )
安装(目标turtlesim _ node turtle _ teleop _ key draw _ square mimic
目标库/$ {项目名称})
安装(目录映像
目标共享/${PROJECT_NAME}
文件_匹配模式 *。巴布亚新几内亚模式 *。SVG’)
安装(目录启动
目标共享/${PROJECT_NAME})
ament_package()功能包名字参考:项目(turtlesim)
与此类似,节点名字如下:
add _ executable(turtle sim _ node $ { turtle sim _ node _ SRCS } $ { turtle sim _ node _ MOCS })
目标_链接_库(turtle sim _ node Qt5:Widgets)
ament _ target _ dependencies(turtlesim _ node $ { dependencies })
rosidl _ target _ interfaces(turtlesim _ node $ { PROJECT _ NAME } rosidl _ typesupport _ CPP )
add _ executable(turtle _ teleop _ key教程/teleop_turtle_key.cpp)
ament _ target _ dependencies(turtle _ teleop _ key $ { dependencies })
rosidl _ target _ interfaces(turtle _ teleop _ key $ { PROJECT _ NAME } rosidl _ typesupport _ CPP )
命令调用,通俗不严谨说类似应用程序接口
编写程序,通俗不严谨说类似应用程序。
调用应用程序接口难,还是开发应用难?不言而喻呢。
只使用命令调用(受制于程序):
如果程序编写则可以(自由飞翔的舞台):
# include turtle sim/turtle _ frame。 h
#包含QPointF
#包含标准库函数
#包括得到字符串表示的时间
#define DEFAULT_BG_R0x65
#define DEFAULT_BG_G0x65
#define DEFAULT_BG_B0x65
命名空间图尔特西姆
{
turtle frame:turtle frame(rcl CPP:Node:shared ptr Node _ handle,QWidget* parent,Qt:WindowFlags f)
:QFrame(父级,f)
,path_image_(888,888,QImage:Format_ARGB32)
,path_painter_( path_image_)
,帧计数_(0)
,id_counter_(0)
{
setFixedSize(888,888);
setWindowTitle(TurtleSim奇妙曲线);
srand(time(NULL));
update _ timer _=新q定时器(this);
update _ timer _-setInterval(16);
update _ timer _-start();
connect(update_timer_,SIGNAL(timeout()),this,SLOT(on update());
nh_=节点句柄;
rcl _ interfaces:msg:整数范围范围;
范围。from _ value=0;
范围。step=1;
range.to _ value=255
rcl _ interfaces:msg:参数描述符background _ r _ descriptor
背景描述符。描述=背景色的红色通道;
背景描述符。整数_范围。推回(范围);
rcl _ interfaces:msg:参数描述符background _ g _ descriptor
背景_ g _描述符。描述=绿色通道的背景色;
背景_ g _描述符。整数_范围。推回(范围);
rcl _ interfaces:msg:参数描述符background _ b _ descriptor
背景_ b _描述符。描述=背景颜色的蓝色通道;
背景_ b _描述符。整数_范围。推回(范围);
NH _-declare _ parameter( background _ R ,rcl CPP:参数值(DEFAULT _ BG _ R),background _ R _ descriptor);
NH _-declare _ parameter( background _ G ,rcl CPP:参数值(DEFAULT _ BG _ G),background _ G _ descriptor);
NH _-declare _ parameter( background _ B ,rcl CPP:参数值(DEFAULT _ BG _ B),background _ B _ descriptor);
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。