@gohan 是的
ROS Group 产品服务
Product Service 开源代码库
Github 官网
Official website 技术交流
Technological exchanges 激光雷达
LIDAR ROS教程
ROS Tourials 深度学习
Deep Learning 机器视觉
Computer Vision
weijiz 发布的帖子
-
ROS2如何设置和获取其他节点的参数
在ROS1中参数全部都在一个Parameter Server上面,任意节点都可以随意的设置和读取其他节点的参数。但是在ROS2中,这部分发生了很大变化。首先由于ROS2没有了中心节点,所以也不存在一个Parameter Server了。每个节点的参数由节点本身去维护。所以要设置或获取其他节点的参数就要用调用服务的方法去调用其他节点设置参数,获取参数服务。下面是一个具体的例子
单个节点获取和设置自己的参数
import rclpy node = None def get_params(): global node node.get_logger().info(node.get_parameter("test").get_parameter_value().string_value) def main(): global node rclpy.init() node = rclpy.create_node("get_params_node") # 声明参数,所有参数在使用之前都要声明一下 node.declare_parameter("test", "default") # 设置参数 node.set_parameters([rclpy.Parameter("test", rclpy.Parameter.Type.STRING, "hello world")]) node.create_timer(1, get_params) rclpy.spin(node) if __name__ == "__main__": main()
正常运行后输出如下
[INFO] [1677133156.500033082] [get_params_node]: hello world [INFO] [1677133157.492551064] [get_params_node]: hello world [INFO] [1677133158.492387209] [get_params_node]: hello world [INFO] [1677133159.492404149] [get_params_node]: hello world [INFO] [1677133160.492420371] [get_params_node]: hello world
设置其他节点的参数
import rclpy from rcl_interfaces.srv import SetParameters from rcl_interfaces.msg import Parameter, ParameterValue, ParameterType index = 0 set_params = None def get_params(): global set_params, index index += 1 # 创建设置参数请求 req = SetParameters.Request() # 设置参数数据 req.parameters = [Parameter(name="test", value=ParameterValue(string_value=f"{index}",type=ParameterType.PARAMETER_STRING))] # 发送请求 set_params.call_async(req) def main(): global set_params rclpy.init() node = rclpy.create_node("set_params_node") # 创建设置参数服务客户端 set_params = node.create_client(SetParameters, "/get_params_node/set_parameters") # 等待服务 set_params.wait_for_service(1) node.create_timer(1, get_params) rclpy.spin(node) if __name__ == "__main__": main()
总结
可以看到设置其他节点的参数相对于ROS1要复杂了很多。在ROS2的设计文档中提到了要做一个类似参数服务器的东西。但是目前这个东西还没有实现。
-
Python setup.py 和 entry_points 详解
由于ROS2中的python包多了
setup.py
,setup.cfg
文件。所以在开发ROS2的软件有必要详细了解一下这些文件的作用。简而言之就是python的打包配置文件,类似package.xml
和CMakeList.txt
的作用。Python打包:setuptools 与 setup.py/.cfg 入门简介
https://zhuanlan.zhihu.com/p/261579357
Python setup.py entry_points 详解
https://zhuanlan.zhihu.com/p/261579357
这两篇文章介绍的都十分直接。尤其第二篇对于entry_points的解释详细且直观。
-
ros2 中的 time消息类型
在ROS1中默认的消息类型中有time,用于表示时间信息。比如std_msgs/Header里面用于表示时间的就是这个类型。但是如果在ROS2中直接使用这个类型会报错误。因为ROS2的默认类型类型中取消了这个类型。要替换成下面的形式
ROS1中表示
time stamp
ROS2中表示
builtin_interfaces/Time stamp
-
Ubuntu 22.04 ROS2 humble安装
添加源和秘钥
sudo apt install software-properties-common sudo add-apt-repository universe sudo apt update && sudo apt install curl sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
安装软件包
下面用apt-fast 安装,apt-fast的安装方法参考这里
sudo apt update sudo apt-fast upgrade sudo apt-fast install ros-humble-desktop ros-dev-tools -y
设置环境变量
在你的bashrc里面添加下面的内容
source /opt/ros/humble/setup.bash source /home/randoms/Documents/ros2/install/setup.bash # 这里要改成自己的工作空间 export ROS_LOCALHOST_ONLY=1 # 这里让话题只在本地发布,为了安全性 export ROS_DOMAIN_ID=0 # 这里设置自己的Domain,注意数值范围0-101而且数值越大则最大node进程数越少。 source /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash # 开启colcon的自动补全
降级setuptools
22.04的setuptools版本过高,默认版本会在colcon build python包的时候产生各种warning
pip install setuptools==58.2.0
注意安装环境不能使用conda,否则会出现 python 各种import错误
-
22.04使能远程桌面,替代VNC
在之前版本的Ubuntu中系统自带的远程桌面一直不太好用,22.04由于采用了Wayland作为显示服务器,之前VNC作为远程桌面的方法反而不太好用了。还好这次系统自带的远程桌面功能好用了。我们可以用自带的远程桌面替代VNC。下面是开启方法。
打开设置,选择共享
选择远程桌面
使能远程桌面,设置好用户名密码就可以了。
连接采用windows自带的远程桌面连接程序
实测连接响应速度挺不错。但是没办法在没有插显示器的情况下进行连接。
-
RE: 请问如何利用Gazebo进行仿真
这个是sim机器的启动文件,启动后话题和正常机器人一样
https://git.bwbot.org/publish/startup/-/blob/xq4-noetic-sim/launch/startup_sim.launch -
RE: 如何将自定义的额外功能和伽利略系统对接
@mrtk 在 如何将自定义的额外功能和伽利略系统对接 中说:
判断的功能呢
如果自己调的话完全可以再检测到io数据之后再掉导航的API
而且不应该修改galileo_api的内容,应该自己创建一个包然后调API实现对应动作
-
RE: 蓝鲸ROS镜像发布
@mrtk xq4 pro 和xq5通用版本:xiaoqiang-noetic_2021-11-12.iso
https://bwbot.org/s/vBesAD
-
ubuntu录音开启噪声抑制
Ubuntu有时录音底噪非常大,有很多电流声。这个问题可以通过开启噪声抑制解决。
开启方法
修改 /etc/pulse/default.pa 文件,增加以下内容
load-module module-echo-cancel aec_args="analog_gain_control=0 digital_gain_control=0" source_name=logitechsource set-default-source logitechsource
重启pulseaudio
pulseaudio -k
在声音设置界面选择带噪声抑制的音频输入
-
modelscope环境安装
modelscope是阿里出的深度学习平台。里面有很多很有用的模型,比如其中的语音识别功能,经过测试效果非常好。能够达到商用级别。官方的环境安装文档有问题。下面是我自己摸索的安装过程。
创建virtualenv
环境是ubuntu 20.04 默认的python版本为3.8
virtualenv venv
安装tensorflow-gpu
source venv/bin/activate pip install nvidia-tensorflow==1.15.5+nv22.07 -i https://pypi.tuna.tsinghua.edu.cn/simple
这一步要注意其中的版本,这个版本是和下面torch相冲突比较少的,但是还是有冲突
安装torch
pip install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple
安装modelscope相关库
pip install "modelscope[audio]" -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html -i https://pypi.tuna.tsinghua.edu.cn/simple
重新安装numpy
由于numpy版本之间的冲突会导致numpy安装失败,执行下面的指令再次安装
pip install numpy==1.20.3 -i https://pypi.tuna.tsinghua.edu.cn/simple
至此安装完成可以尝试运行下面的脚本测试是否正确安装
from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasks inference_16k_pipline = pipeline( task=Tasks.auto_speech_recognition, model='damo/speech_UniASR-large_asr_2pass-zh-cn-16k-common-vocab8358-tensorflow1-offline') rec_result = inference_16k_pipline(audio_in='https://modelscope.oss-cn-beijing.aliyuncs.com/test/audios/asr_example.wav') print(rec_result)
-
RE: 【点云颜色读取问题】sensor_msgs::PointCloud2转换成pcl时如何提取RGB信息?
@arillia PointCloud2的那个彩色是深度信息吧,不是原始的rgb信息。转换过程中rgb信息丢了就不能在没有色彩信息的情况下还原。
-
RE: 机器人开机不能自启动
@mm 重新注册自启动服务 https://doc.bwbot.org/en/books-online/xq-manual/topic/27.html#%E4%B8%89%E3%80%81%E5%B0%86startuplaunch%E6%96%87%E4%BB%B6%E5%9C%A8%E5%B0%8F%E5%BC%BA%E4%B8%BB%E6%9C%BA%E4%B8%AD%E6%B3%A8%E5%86%8C%E4%B8%BAstartup-%E5%BC%80%E6%9C%BA%E5%90%AF%E5%8A%A8%E6%9C%8D%E5%8A%A1
也有可能是你的startup.launch有错误。可以先手动启动一下试试