ros2基础

ros2 环境变量

ros1 环境变量

.rc setup

source /opt/ros/notiec/setup.bash
export ROS_MASTER_URI=http://localhost.com:11311
export ROS_IP=YOUR_HOST_IP

环境变量

env | grep ROS
ROS_VERSION=1
ROS_PYTHON_VERSION=3
ROS_PACKAGE_PATH=/opt/ros/noetic/share
ROSLISP_PACKAGE_DIRECTORIES=
ROS_ETC_DIR=/opt/ros/noetic/etc/ros
ROS_MASTER_URI=http://localhost:11311
ROS_ROOT=/opt/ros/noetic/share/ros
ROS_DISTRO=noetic

ros2 环境

.rc setup

source /opt/ros/foxy/setup.bash
source /usr/share/colcon_cd/function/colcon_cd.sh
export _colcon_cd_root=~/ros2_ws
#export _colcon_cd_root=/opt/ros/foxy

环境变量

env | grep ROS
ROS_VERSION=2
ROS_PYTHON_VERSION=3
ROS_LOCALHOST_ONLY=0
ROS_DISTRO=foxy

ROS_DOMAIN_ID

主要为了不同组开发不同机器人防止通信交叉的情况,这个整数必须介于0-232之间

ros2 daemon

ros2 的发现机制是通过中间件来实现的
默认ros2 daemon 是不启动的,即使启动了某些topic 也是没有在运行

ros2 daemon status
ros2 daemon start | stop

ros2 ws 系统目录

只有 install 目录和build, 减掉了devel

注意CmakeLists.txt 中的install 部分, 有两种写法

install(TARGETS
  xxx
  DESTINATION lib/${PROJECT_NAME}) # 会在lib下

###
install(TARGETS
  action_client
  ARCHIVE DESTINATION lib
  LIBRARY DESTINATION lib
  RUNTIME DESTINATION bin) # 会在 install/../bin下

c++ version

ros1 os 依赖了boost
ros2 os 使用c++14, 去除了boost依赖

python version

3.8
在这里插入图片描述

opencv version

4.2.0

pcl_version

1.10 ?
libpcl-all-dev

版本支持情况

platform version
在这里插入图片描述

RMW

什么是RMW

为了支持多个DDS实现,通过RMW 抽象API细节, 定义了ros客户端库和任意DDS实现之间的API
ROS 2 foxy RMW 默认是 eProsima Fast RTPS。
在ros2 Eloquent 之前, ros2 binaries 只绑定了eProsima’s FAST RTPS
Eloquent 和 foxy, RMW 支持 FastRTPS 和 Cyclone DDS。默认只按照了FAST RTPS
如果ROS2 按照多个RMW实现,那么如果有Fast RTPS, 那么它就会被作为默认实现
如果没有Fast RTPS, 那就会按照RMW实现的ros包名字字母顺序选择默认的RMW实现,他们的名字分别是rmw_fastrtps_cpp, rmw_connext_cpp, rmw_cyclonedds_cpp。

可支持的RMW有

namevendorcomments
fast RTPSeProsimadefault
Connext DDSRTI
Cyclone DDSEclipse
OpenSpliceADLINKfoxy 已经不再支持

RMW 声明环境变量, 默认运行ros2 节点,没有该变量生成。

#sudo apt install ros-foxy-rmw-cyclonedds-cpp
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
export RMW_IMPLEMENTATION=rmw_connext_cpp

RTPS

real-time publish and subscribe
是一种快速发布和订阅的协议
Fast-RTPS 是RTPS的c++ 实现

参与者participant

Fast-RTPS 实现参与者的创建和登入, 每个参与者通过发布者(publisher)和订阅者(subscriber)发布和订阅消息,实现参与者之间的交互
RTPS 定义了域(domain), 域定义 实现了独立的交流平面, 几个域可以同时独立存在;一个域中包含若干个参与者

executor

单线程和多线程

spin vs spin_some

spin: Create a default single-threaded executor and spin the specified node.
spin_some: Create a default single-threaded executor and execute any immediately available work.
spin_until_future_complete: while( future.no_done() ) { executor.spin_once() }

action 话题

每次建立一个.action 的server,都会有三个话题产生。但是ros2 topic list 却看不见, 是为什么呢?

ros2 topic list --include-hidden-topics

lifecycle

ros2 design - managed node
ros2 design - lifecycle
lifecycle-demo

rclcpp 和 excutor 都有使用到lifecycle 功能,他是ros2 系统 用来高级控制程序实例化, 重启或者关闭。这个功能需要在代码内部完成,和常规节点不一样的是, 该功能需要继承rclcpp_lifecycle::LifeCycleNode 而不是rclcpp::Node. 其内部有一个状态机, 所以我们需要指导有哪些状态state,有哪些转换transition, 有哪些时间event.

状态首字母大写
基本状态是稳定状态, 转换状态是中间临时状态
生命周期的控制,需要外面有一个监督节点进行控制, 怎么控制呢,继承类默认都会生成4个服务

状态类型状态名解释transion
primary statesUnconfigured节点实例化后,就是该状态(configure->) Inactinve, (shutdown->)Finallized
Inactive不会进行处理,主要是为了重新配置(activate->)Active, (clenup->)Unconfigured, (shutdown->Finalized)
Active主要状态,处理数据,相应服务请求,如果发生错误不能处理将转到ErrorProcessing(shutdown->)Finalized, (deactive->)Inactive
Finalized节点终止,但是不会马上消除,可用于debug(destroy->)deallocated
Transition StateConfiguringonConfigure()成功则跳到Inactive, 失败则需要用户自定义code
CleaningUponCleanup()成功则Unconfigured, 失败则ErrorProcessing
ActivatingonActivate()
DeactivatingonDeactivate()
ShuttingDownonShutdown()
ErrorProcessing

转换transtion

  • create
  • configure
  • cleanup
  • activate
  • deactivate
  • shutdown
  • destroy

事件event

每次状态变化,都有锁存话题发出, 话题名为/<node_name>/transtion_event [lifecycle_msgs/msg/TransitionEvent]

接口

Available Services:
/lc_talker/change_state
/lc_talker/describe_parameters
/lc_talker/get_available_states
/lc_talker/get_available_transitions
/lc_talker/get_parameter_types
/lc_talker/get_parameters
/lc_talker/get_state
/lc_talker/get_transition_graph
/lc_talker/list_parameters
/lc_talker/set_parameters
/lc_talker/set_parameters_atomically

created:
 */lc_talker/transition_event

command line arg

ros2 run my_package node_executable --ros-args ...
#使用选项 --ros-args
# 重命名 - name remmapping
#    -r := 节点内的话题名或者服务名重命名
#    -r __node:= 节点名重命名
#    -r __ns:= 命名空间重命名, 必须用 / 开始.
# 例如: 原来talker节点的名字为 talker, 发布 chatter 的话题.
# 现在要换成 demo 命名空间, 节点名设置为
# my_takler, 产生my_topic话题, (话题列出为 /demo/my_topic)
ros2 run demo_nodes_cpp talker --ros-args
    -r __ns:=/demo 命名空间
    -r __node:=my_talker 节点名称重命名
    -r chatter:=my_topic 话题重命名.
# 如果在一个进程中执行了多个node, 那么可以通过节点名的前缀指定. 例如
ros2 run composition manual_composition --ros-args
    -r talker:__node:=my_talker
    -r listener:__node:=my_listener
# 混合的一个例子. 说明节点名字重命名后, 如果要限定则要用新名字做限定.
ros2 run composition manual_composition --ros-args
    -r talker:__node:=my_talker -r my_talker:chatter:=my_topic
    -r listener:__node:=my_listener -r my_listener:chatter:=my_topic

---------------------------------------------------------------------------
设定日志级别
--log-level 命令项. DEBUG, INFO, WARN, ERROR, FATAL
ros2 run demo_nodes_cpp listener --ros-args --log-level DEBUG
# 当然也可卸载代码里边.
    rcutils_logging_set_logger_level("logger_name", RCUTILS_LOG_SEVERITY_DEBUG);
PYTHON:
    logger.set_level(rclpy.logging.LoggingSeverity.DEBUG)
    rclpy.logging.set_logger_level('logger_name', rclpy.logging.LoggingSeverity.DEBUG)
#########################################################################
# 设置参数
--ros-args -p param_name:=param_value
# 例如
ros2 run demo_nodes_cpp parameter_blackboard
    --ros-args
        -p some_int:=42
        -p "a_string:=Hello world"
        -p "some_lists.some_integers:=[1, 2, 3, 4]"
        -p "some_lists.some_doubles:=[3.14, 2.718]"

Fast-CDR

整体实现了对C++基本数据类型以及数组对象的序列化和反序列化操作。

source

tihuan qinghua source

cyclone_dds

export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
#export CYCLONEDDS_URI='<CycloneDDS><Domain><General><NetworkInterfaceAddress>auto</NetworkInterfaceAddress></General></Domain></CycloneDDS>'
export CYCLONEDDS_URI=file:///eee/systemddd/sssyystem/cyclonedds.xml
[Unit]
Description="Robot Deamon"

[Service]
User=ubuntu
Type=idle
Environment="ROS_DOMAIN_ID=100"
Environment="ROS_VERSION=2"
Environment="ROS_PYTHON_VERSION=3"
Environment="ROS_DISTRO=foxy"
Environment="LD_LIBRARY_PATH=/opt/ros/foxy/lib"
Environment="PYTHONPATH=/opt/ros/foxy/lib/python3.8/site-packages"
Environment="AMENT_PREFIX_PATH=/opt/ros/foxy"
Environment="DISPLAY=:0"
Environment="RMW_IMPLEMENTATION=rmw_cyclonedds_cpp"
Environment="ROS_LOCALHOST_ONLY=1"
Environment="CYCLONEDDS_URI=file:///eee/systemddd/ssssyystem/cyclonedds.xml"

ExecStart=/opt/ros/foxy/bin/ros2 launch robot_bringup bringup_launch.py
Restart=on-failure

[Install]
WantedBy=multi-user.target


术语

缩写全程
RMWros middle-wareros 中间件, DDS 通信方式
DDSdata distribute service数据分发服务
RTIremote technology i??远程技术公司
RTPSrealtime publisher and subscriber
idlinterface define language接口定义语言
QoSquality of service服务质量
TSCTechnical Steering Committee技术指导委员会
SPIService plugin Interface服务插件接口
rclROS Client Library客户端库
cbgcallback-group与executor 有关
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值