全开源的ROS2SLAM机器人 ROSBOT ROS2 open source SLAM robot

举报
zhangrelay 发表于 2021/12/30 01:41:08 2021/12/30
【摘要】 如题,搬运工: 全开源的ROS2SLAM机器人 ROSBOT - ROS2 open source SLAM robot github.com/kallaspriit/rosbot 机器翻译如下: 基于ROS 2的机器人学习平台。 运行主 rosbot/ros 工作区 将用户添加到 USB 串行和输入组 ...

如题,搬运工:

全开源的ROS2SLAM机器人 ROSBOT - ROS2 open source SLAM robot


github.com/kallaspriit/rosbot


机器翻译如下:


基于ROS 2的机器人学习平台。

运行主 rosbot/ros 工作区

  • 将用户添加到 USB 串行和输入组
    • sudo usermod -a -G input ubuntu
    • sudo usermod -a -G dialout ubuntu
    • sudo usermod -a -G tty ubuntu
  • 构建 rosbot(在机器人和远程 PC 上)
    • cd ~/rosbot/ros以打开工作区
    • rosdep install -i --from-path src --rosdistro foxy -y安装依赖项
    • git pull && colcon build拉取更改并构建工作区
  • 在机器人上启动 rosbot
    • 如果有任何更改,请先构建它
    • 打开新终端
    • cd ~/rosbot/ros以打开工作区
    • . install/local_setup.bash加载工作空间叠加层(在机器人和远程pc上)
    • ros2 launch odrive_bringup rosbot.launch.py启动rosbot(在机器人上运行)
    • ros2 launch odrive_bringup rviz.launch.py启动 rviz(在远程 pc 上运行)
  • 运行操纵杆远程操作
    • 打开新终端
    • . install/local_setup.bash加载工作区叠加
    • ros2 launch teleop_twist_joy teleop.launch.py joy_config:='rosbot_xbox_bluetooth' cmd_vel:=/diff_drive_controller/cmd_vel_unstamped启动操纵杆远程操作
    • 按住左扳机键(按钮 6),并使用左右操纵杆控制速度和旋转
    • 按住右扳机键(按钮 7)可加速(移动速度更快)
  • 启动 odrive 手动控制(仅用于测试)
    • 打开新终端
    • . install/local_setup.bash加载工作区叠加
    • ros2 launch odrive_bringup odrive.launch.py启动 odrive 测试 ()
    • ros2 topic pub -r 100 /left_wheel_joint_velocity_controller/commands std_msgs/Float64MultiArray "data: [1]"
    • ros2 topic pub -r 100 /right_wheel_joint_velocity_controller/commands std_msgs/Float64MultiArray "data: [-1]"
    • ros2 launch teleop_twist_joy teleop.launch.py joy_config:='rosbot_xbox_bluetooth' cmd_vel:=/diff_drive_controller/cmd_vel_unstamped启动操纵杆远程操作
    • 按住左扳机键(按钮 6),并使用左右操纵杆控制速度和旋转
  • 启动发布到的 USB Xbox 操纵杆远程操作/cmd_vel
    • ros2 launch teleop_twist_joy teleop.launch.py cmd_vel:=cmd_vel joy_config:=rosbot_xbox_usb

调试

  • 调试
  • ros2 topic echo /joint_states显示关节状态,包括速度等
  • ros2 topic echo /dynamic_joint_states显示动态关节状态,包括轴误差等
  • ros2 run tf2_tools view_frames.py生成框架树frames.pdf
  • rqt以打开 RQT,添加插件,例如Topics > Topic Monitor
  • ros2 run xacro xacro ./src/rosbot_description/urdf/rosbot.urdf.xacro调试 URDF 文件的问题
  • ros2 run tf2_ros tf2_echo odom base_link验证从 odom 到 base_link 的转换
    • 时间 1634580767.596875940
      • 翻译: [6.986, -2.328, 0.000]
      • 旋转:在四元数 [0.000, 0.000, -0.210, 0.978]
    • 时间 1634580768.594622939
      • 翻译: [7.108, -2.383, 0.000]
      • 旋转:在四元数 [0.000, 0.000, -0.213, 0.977]

操纵杆远程操作

  • ROS Index
  • https://github.com/ros2/teleop_twist_joy/tree/foxy/
  • joy - ROS Wiki
  • https://github.com/medusalix/xow需要xow才能使用xbox蓝牙控制器
  • 将 XOW 配置为通过蓝牙使用 Xbox 控制器
    • sudo apt install cabextract安装依赖项
    • git clone https://github.com/medusalix/xow
    • cd xow
    • make BUILD=RELEASE
    • sudo make install
    • sudo systemctl enable xow
    • sudo systemctl start xow
    • sudo systemctl kill -s SIGUSR1 xow以启用 XOW 配对模式(通常不需要)
  • 禁用 ERTM
    • sudoedit /sys/module/bluetooth/parameters/disable_ertm
    • 替换为NY
    • 重新启动
  • 重新启动蓝牙
    • sudo service bluetooth restart
    • sudo rmmod btusb
  • 测试控制器
    • jstest /dev/input/js0
  • 同时永久禁用 ERTM
  • 使用转换器时禁用内置蓝牙
    • sudoedit /boot/firmware/usrcfg.txt
    • 添加行dtoverlay=disable-bluetooth
    • 重新启动
    • 检查和hciconfig -ahcitool dev
    • 似乎实际上不起作用。
  • 使用终端连接到蓝牙 Xbox 控制器(在机器人上)
  • 如果操纵杆没有正确的权限,那么(这似乎实际上不起作用)/dev/input/eventX
    • sudo apt install input-utils以安装工具lsinput
    • sudo lsinput若要获取输入列表,请记下"Xbox 无线控制器"的供应商和产品
    • sudoedit 80-xbox-controller.rules
    • 添加等,计算供应商和产品KERNEL=="event*", ATTRS{idProduct}=="02e0", ATTRS{idVendor}=="045e", MODE="0666"
  • 从终端测试操纵杆
    • sudo apt install joystick
    • jstest /dev/input/js0
    • ros2 run joy joy_enumerate_devices
  • 直观地测试操纵杆
    • sudo apt install jstest-gtk
    • jstest-gtk
  • 测试操纵杆消息
    • ros2 topic echo /joy
    • ros2 topic echo /cmd_vel
    • ros2 topic echo /diff_drive_controller/cmd_vel_unstamped

设置凉亭模拟器

  • sudo apt install ros-foxy-gazebo-ros-pkgs

设置树莓派 UART

  • https://askubuntu.com/questions/1254376/enable-uart-communication-on-pi4-ubuntu-20-04
  • 创建启动配置备份
    • cd /boot/firmware
    • sudo cp usrcfg.txt usrconfig.backup.txt
    • sudo cp cmdline.txt cmdline.backup.txt
  • 禁用控制台 UART
    • enable_uart=0/boot/firmware/usrcfg.txt
    • 从中删除console=serial0,115200/boot/firmware/cmdline.txt
  • 禁用使用 miniUART 的串行服务
    • sudo systemctl stop serial-getty@ttyS0.service
    • sudo systemctl disable serial-getty@ttyS0.service
    • sudo systemctl mask serial-getty@ttyS0.service
  • UART 引脚
    • 引脚 8 TXD GPIO14
    • 引脚 10 RXD GPIO15

设置 ROS2 导航2 导航2

  • Getting Started — Navigation 2 1.0.0 documentation
  • 安装依赖项
    • sudo apt install ros-foxy-navigation2 ros-foxy-nav2-bringup ros-foxy-cartographer ros-foxy-cartographer-ros ros-foxy-robot-localization ros-foxy-slam-toolbox ros-foxy-gazebo-ros-pkgs ros-foxy-xacro ros-foxy-slam-toolbox
    • sudo apt install ros-foxy-turtlebot3*仅用于在远程 pc 上进行测试
  • 猛击机器人工具箱
    • 使用捕捉slam-toolbox
    • 它具有优化功能,使其速度提高了约10倍
  • 运行映射和导航
    • ros2 launch slam_toolbox online_async_launch.py启动灌篮工具箱映射器
    • ros2 launch nav2_bringup navigation_launch.py以运行导航2

运行navigation2_tutorials

  • 克隆和构建https://github.com/ros-planning/navigation2_tutorials.git
  • 启动机器人ros2 launch sam_bot_description display.launch.py
  • 启动 usbteleop
    • 打开新终端
    • cd ~/rosbot/ros
    • . install/local_setup.bash
    • ros2 launch teleop_twist_joy teleop.launch.py cmd_vel:=/demo/cmd_vel joy_config:=rosbot_xbox_usb
    • 或在修改后的版本中没有 /demo
  • 启动slam_toolbox
    • 打开新终端
    • ros2 launch slam_toolbox online_async_launch.py

设置 Arduino

  • 安装 Arduino IDE
  • 添加到 Arduino 首选项的其他主板 URLhttps://www.adafruit.com/package_adafruit_index.json
  • 安装板Adafruit nRF52
  • 安装pip3 install --user adafruit-nrfutil
  • 更新引导加载程序
  • 安装微型 XRCE-DDS 代理
    • git clone https://github.com/eProsima/Micro-XRCE-DDS-Agent.git
    • cd Micro-XRCE-DDS-Agent && git checkout foxy
    • mkdir build && cd build
    • source /opt/ros/dashing/setup.bash # to share libraries with ros2
    • cmake ..
    • make
    • sudo make install
    • sudo ldconfig /usr/local/lib/

更新 cmake

  • cmake --version
  • sudo apt update
  • sudo apt install -y software-properties-common lsb-release
  • wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | sudo tee /etc/apt/trusted.gpg.d/kitware.gpg >/dev/null
  • sudo apt-add-repository "deb https://apt.kitware.com/ubuntu/ $(lsb_release -cs) main"
  • sudo apt update
  • sudo apt install kitware-archive-keyring
  • sudo rm /etc/apt/trusted.gpg.d/kitware.gpg
  • sudo apt update
  • sudo apt install cmake
  • cmake --version

在 MBED 上构建微 Ros

  • https://github.com/micro-ROS/micro_ros_mbed
  • pip3 install catkin_pkg lark-parser empy colcon-common-extensions mbed-tools
  • sudo apt install gcc-arm-none-eabi
  • 克隆存储库和 cd 到其中
  • mbed-tools deploy
  • mbed-tools compile -m LPC1768 -t GCC_ARM -f

安装 ROS

安装指南

  • 启用宇宙(可能不需要)
    • sudo apt install software-properties-common
    • sudo add-apt-repository universe
  • 添加存储库
    • sudo apt update && sudo apt install curl gnupg2 lsb-release
    • 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] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
  • 安装 ROS
    • sudo apt update
    • sudo apt install ros-foxy-desktop
  • 安装自动完成
    • sudo apt install -y python3-argcomplete
  • 将采购 ROS 添加到 bashrc
    • echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc
  • 将colcom_cd添加到 bashrc
    • echo "source /usr/share/colcon_cd/function/colcon_cd.sh" >> ~/.bashrc
    • echo "export _colcon_cd_root=~/ros2_install" >> ~/.bashrc
  • 检查环境变量
    • printenv | grep -i ROS
  • 设置域 ID(随机数介于 0-101 之间,包括 0-101)
    • echo "export ROS_DOMAIN_ID=<your_domain_id>" >> ~/.bashrc
  • 测试 ROS(在单独的端子中打开)
    • ros2 run demo_nodes_cpp talker
    • ros2 run demo_nodes_py listener
  • 安装用于数据记录/回放的 ros 包
    • sudo apt-get install ros-galactic-ros2bag ros-galactic-rosbag2-storage-default-plugins

安装工具

  • 安装 VSCode
    • sudo snap install --classic code

安装 TurtleSim

  • 安装
    • sudo apt install ros-foxy-turtlesim
  • 检查已安装的软件包
    • ros2 pkg executables turtlesim
  • 开始龟蜈
    • ros2 run turtlesim turtlesim_node
  • 启动遥控控制
    • ros2 run turtlesim turtle_teleop_key

安装 RQT

  • 安装 rqt
    • sudo apt update
    • sudo apt install ~nros-foxy-rqt*
  • 运行 rqt
    • rqt
  • 添加调用的服务
    • select Plugins > Services > Service Caller
    • 呼叫/spawnx=1.0, y=1.0, name='turtle2'
  • 将控制权重新映射到海龟 2
    • ros2 run turtlesim turtle_teleop_key --ros-args --remap turtle1/cmd_vel:=turtle2/cmd_vel
  • 渲染 rtq 图
    • rqt_graph
    • 也可以添加到rtqPlugins > Introspection > Nodes Graph

操作系统命令行

  • 运行节点
    • ros2 run turtlesim turtlesim_node
    • ros2 run turtlesim turtle_teleop_key
    • ros2 run turtlesim turtlesim_node --ros-args --log-level WARN以使用自定义日志级别运行
  • 列出资源
    • ros2 node list
    • ros2 topic list
    • ros2 topic list -t以同时显示消息类型
    • ros2 service list
    • ros2 service list -t以同时显示服务类型
    • ros2 action list
    • ros2 param list
  • 获取节点信息
    • ros2 node info /my_turtle
  • 显示发布到主题的数据
    • ros2 topic echo /turtle1/cmd_vel以查看速度命令
    • ros2 topic echo /turtle1/pose查看不断变化的姿势
  • 获取主题信息
    • ros2 topic info /turtle1/cmd_vel
  • 显示消息界面
    • ros2 interface show geometry_msgs/msg/Twist
  • 将消息发布到主题
    • ros2 topic pub <topic_name> <msg_type> '<args>'其中 args 在 YAML 语法中
    • ros2 topic pub --once /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"发布一次
    • ros2 topic pub --rate 1 /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"以 1Hz 连续发布
  • 显示数据发布到主题的频率
    • ros2 topic hz /turtle1/pose
  • 获取服务类型信息
    • ros2 service type <service_name>
    • ros2 service type /clear
  • 按类型查找服务
    • ros2 service find <type_name>
    • ros2 service find std_srvs/srv/Empty
  • 显示服务类型结构
    • ros2 interface show <type_name>.srv其中请求和响应结构由---分隔
    • ros2 interface show std_srvs/srv/Empty.srv
    • ros2 interface show turtlesim/srv/TeleportAbsolute.srv
    • ros2 interface show turtlesim/srv/Spawn
  • 呼叫服务
    • ros2 service call <service_name> <service_type> <arguments>
    • ros2 service call /clear std_srvs/srv/Empty
    • ros2 service call /spawn turtlesim/srv/Spawn "{x: 2, y: 2, theta: 0.2, name: ''}"
  • 获取参数列表
    • ros2 param list
  • 获取参数值
    • ros2 param get <node_name> <parameter_name>
    • ros2 param get /turtlesim background_g
  • 设置参数值
    • ros2 param set <node_name> <parameter_name> <value>
    • ros2 param set /turtlesim background_r 150
  • 转储节点参数
    • ros2 param dump <node_name>
    • ros2 param dump /turtlesim
  • 使用转储文件中的参数启动节点
    • ros2 run <package_name> <executable_name> --ros-args --params-file <file_name>
    • ros2 run turtlesim turtlesim_node --ros-args --params-file ./turtlesim.yaml
  • 获取节点操作列表
    • ros2 node info /turtlesim
    • ros2 node info /teleop_turtle
  • 获取所有操作的列表
    • ros2 action list
    • ros2 action list -t以同时显示操作类型
  • 获取操作信息
    • ros2 action info /turtle1/rotate_absolute
  • 获取操作界面信息
    • ros2 interface show turtlesim/action/RotateAbsolute
  • 号召性用语
    • ros2 action send_goal <action_name> <action_type> <values>
    • ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute "{theta: 1.57}"
    • ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute "{theta: 3.14}" --feedback获取反馈
  • 运行 rqt 控制台
    • ros2 run rqt_console rqt_console
  • 启动节点
    • ros2 run rqt_console rqt_console
  • 启动启动文件
    • ros2 topic pub -r 1 /turtlesim1/turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: -1.8}}"
  • 记录主题到袋子
    • ros2 bag record <topic_name>以记录主题
    • ros2 bag record /turtle1/cmd_vel
    • ros2 bag record -o subset /turtle1/cmd_vel /turtle1/pose顶部 选择文件名并记录多个主题subset
  • 获取行李信息
    • ros2 bag info <bag_file_name>
    • ros2 bag info subset
  • 回放袋录音
    • ros2 bag play <bag_file_name>
    • ros2 bag play subset

示例启动文件

启动两个具有不同命名空间名称的 turtlesim 节点和一个模仿节点,使第二个 turtlesim 节点模仿第一个。

from launch import LaunchDescription
from launch_ros.actions import Node

def generate_launch_description():
    return LaunchDescription([
        Node(
            package='turtlesim',
            namespace='turtlesim1',
            executable='turtlesim_node',
            name='sim'
        ),
        Node(
            package='turtlesim',
            namespace='turtlesim2',
            executable='turtlesim_node',
            name='sim'
        ),
        Node(
            package='turtlesim',
            executable='mimic',
            name='mimic',
            remappings=[
                ('/input/pose', '/turtlesim1/turtle1/pose'),
                ('/output/cmd_vel', '/turtlesim2/turtle1/cmd_vel'),
            ]
        )
    ])

TMUX 端子分配器

  • 安装
    • sudo apt install tmux
  • 开始
    • tmux
  • 分体式端子
    • 水平ctrl+b %
    • 垂直ctrl+b "
  • 管理窗口
    • 创造ctrl+b c
    • 关闭exit
    • 重命名ctrl+b ,
  • 导航
    • 面板之间ctrl+b ARROWS
    • 在第一个 N=0、第二个 N=1 等的窗口之间ctrl+b N

基本 Ros 设置

Installing ROS 2 on Ubuntu Linux — ROS 2 Documentation: Foxy documentation

/选择/罗斯/狐狸

  • sudo apt install -y python3-rosdep
  • 罗斯德普更新
  • rosdep install --from-paths /opt/ros/foxy/share --ignore-src --rosdistro foxy -y --skip-keys "console_bridge fastcdr fastrtps osrf_testing_tools_cpp poco_vendor rmw_connextdds rti-connext-dds-5.3.1 tinyxml_vendor tinyxml2_vendor urdfdom urdfdom_headers"

创建工作区

Creating a workspace — ROS 2 Documentation: Foxy documentation

  • mkdir -p ~/dev_ws/src
  • cd ~/dev_ws/src
  • git clone https://github.com/ros/ros_tutorials.git -b foxy-devel
  • rosdep install -i --from-path src --rosdistro foxy -y
  • 科尔康构建
  • 打开新终端到源覆盖
  • cd ~/dev_ws

构建包

  • 创建工作区目录等mkdir ros2_ws
  • 在此目录中创建"src"
  • 将库/包复制到 src 中
  • rosdep install -i --from-path src --rosdistro foxy -y安装依赖项
  • cd 返回工作区并运行以构建包colcon build

遥控机器人控制器

运行实验/test_odrive_ros2包

  • cd ~/rosbot/experiments/test_odrive_ros2/
  • ros2 run odrive_ros2 odrive_node
  • ros2 service call /connect_odrive std_srvs/srv/Trigger
  • ros2 service call /request_state odrive_interfaces/srv/AxisState "{axis: 0, state: 8}"(如果在闭环控制中启动,则不需要)
  • ros2 service call /velocity_cmd odrive_interfaces/srv/VelocityControl "{axis: 0, turns_s: 0.5}"
  • ros2 topic echo /barrery_percentage(拼写错误.. 并且不确定格式,返回类似 3.5 的内容)
  • ros2 topic echo /joint_state

RVIZ2

运行试验/test_odrive_ros2_control包

运行ros2_control_demos

  • 复制存储库https://github.com/ros-controls/ros2_control_demos
  • 创建工作区文件夹,将演示存储库文件夹移动到src
  • cd ros2_control_demos/
  • rosdep install -i --from-path src --rosdistro foxy -y
  • colcon build
  • 打开新终端
  • cd ros2_control_demos/
  • . install/local_setup.bash
  • ros2 launch ros2_control_demo_bringup diffbot_system.launch.py start_rviz:=true
  • ros2 control list_hardware_interfaces列出 ros 控制硬件接口
  • ros2 control list_controllers列出 ros 控制控制器
  • 发布速度命令

     
     
  1. ros2 topic pub --rate 30 /diff_drive_controller/cmd_vel_unstamped geometry_msgs/msg/Twist "linear:
  2. x: 0.7
  3. y: 0.0
  4. z: 0.0
  5. angular:
  6. x: 0.0
  7. y: 0.0
  8. z: 1.0"
  • 使用mouse_teleop进行控制,将 /mouse_vel 重新映射到 /diff_drive_controller/cmd_vel_unstamped
  • ros2 run mouse_teleop mouse_teleop --ros-args -r /mouse_vel:=/diff_drive_controller/cmd_vel_unstamped

从 Ubuntu 资源管理器上下文菜单打开 VSCode

  • 在终端中运行以下内容
  • wget -qO- https://raw.githubusercontent.com/cra0zy/code-nautilus/master/install.sh | bash

配置 ssh

  • ssh-keygen -t rsa以创建 ssh 键(如果尚不存在)~/.ssh
  • cat ~/.ssh/id_rsa.pub从想要访问机器人的计算机获取公钥
  • 将公钥添加到机器人的文件~/.ssh/authorized_keys
  • 在远程计算机上创建包含类似内容的文件~/.ssh/config

     
     
  1. Host rosbot
  2. HostName rosbot
  3. User ubuntu
  • ssh rosbot使用配置和ssh键打开与机器人的ssh连接

创建包

cd ~/dev_ws/src ros2 pkg create --build-type ament_cmake <package_name>ros2 pkg create --build-type ament_cmake --node-name my_node my_package ros2 pkg create --build-type ament_cmake --node-name talker test_chat

开发C++

https://github.com/ros2/rclcpp http://docs.ros2.org/latest/api/rclcpp/ http://wiki.ros.org/std_msgs

开发 nodejs

https://github.com/RobotWebTools/rclnodejs https://github.com/RobotWebTools/rclnodejs-cli JSDoc: Home https://github.com/RobotWebTools/rclnodejs/tree/develop/example npx 生成 ros 消息

文章来源: zhangrelay.blog.csdn.net,作者:zhangrelay,版权归原作者所有,如需转载,请联系作者。

原文链接:zhangrelay.blog.csdn.net/article/details/122219333

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。