熟悉项目过程中

刑天机器人本身

背景知识:

刑天与地平线的关系、旭日派的关系?

地平线是一家公司,刑天机器人是他们家的一款产品,是硬件,旭日派也是他们家的一款产品,用作刑天机器人的大脑。   刑天机器人的源代码能安装到旭日派板子上面,也能安装到树莓派(国外的板子)上面。 刑天现在的很贵的这个板子是什么牌子的?

补充:绿色机器人(幻尔公司)运行在 jetson nano板子上面

tros和ros的关系?

tros貌似是基于ros的开发的,是地平线公司在ros上面的封装,有更多高级的功能

机器人本身是如何移动的?

先找到刑天的源代码,就是能控制刑天硬件的代码GitHub - DDTRobot/diablo_ros2: diablo ros2 packagediablo ros2 package. Contribute to DDTRobot/diablo_ros2 development by creating an account on GitHub.icon-default.png?t=N7T8https://github.com/DDTRobot/diablo_ros2

根据源代码可以找到开发手册,开发手册说让我们刑天源代码ROS2版本

熟悉项目过程中_第1张图片

 熟悉项目过程中_第2张图片

 这里面的前两步是在干嘛?我目前理解的是,可以安装旭日派板子上面,也可以安装在树莓派板子上面,如果不是这两款板子,可以直接 Complie ROS Package

最关键的一条命令:run diablo_ctrl diablo_ctrl_node ,这个是获取到机器人的运动权限

熟悉项目过程中_第3张图片

这是一个大概的,更具体的在文档的第三节,展示了刑天机器人的所有node节点

The robot obtains the SDK control permission — DIABLO-Onboard-SDK v2.1 documentation

熟悉项目过程中_第4张图片

 机器人获取sdk控制权限

 熟悉项目过程中_第5张图片

这是一个基础的node节点,关于控制机器人运动。 你需要运行diablo_ctrl_node节点获取运动权限。 为了达到控制的效果,你应该把命令用自定义消息格式 MotionCtrl 数据 发送给/diablo/MotionCmd  

查看一下,我们是如何发送信息

找到佳伟哥跑的项目所在的位置:/opt/deploy/diablo-robot

项目目录下面有一个src,但是没有interfaces,和之前的不太一样,就是定义msg,srv,action的东西,这个东西在那里呢?

熟悉项目过程中_第6张图片

机器人板子项目地址: /opt/deploy/diablo-robot/src/diablo_run/diablo_run/motion_cmd.py,这个只用来控制机器人起立和机器人通过ctrl + C停止


#!/usr/bin/env python3
import rclpy
import time
from rclpy.node import Node
from motion_msgs.msg import MotionCtrl #导入msg消息格式,msg是什么topic通信的消息体
from geometry_msgs.msg import Twist

def do_stop(teleop_cmd):
    
    ctrlMsgs = generMsgs(mode_mark=True,stand_mode=False,forward=0.0,left=0.0,up=0.0,pitch=0.0)
    teleop_cmd.publish(ctrlMsgs)
    print("停止运行")

def main(args=None):
    rclpy.init(args=args) 
    node = Node("motion_cmd")
    # 初始化机器人姿态@todo 导航地图加载、其他硬件初始化
    teleop_cmd = init_robot(node)
    # 执行指令
    execute_ctrl(node,teleop_cmd)
    # 保持节点运行,检测是否收到退出指令(Ctrl+C)
    try:
        # 保持节点运行,检测是否收到退出指令(Ctrl+C)
        rclpy.spin(node)
    except KeyboardInterrupt:
        node.get_logger().info("Received interrupt, stopping the robot...")
    finally:
        # 停止机器人行为
        do_stop(teleop_cmd)
        # 关闭rclpy
        rclpy.shutdown()

# 初始化机器人信息
def init_robot(node):
    node.get_logger().info("机器人正在初始化......")
    # 此处就是一个发布者,对diablo/MotionCmd
    teleop_cmd = node.create_publisher(MotionCtrl, "diablo/MotionCmd", 10)
    time.sleep(2.0)
    node.get_logger().info("初始化成功......11111")

    return teleop_cmd

# 执行调用机器人指令
def execute_ctrl(node,teleop_cmd):

    node.get_logger().info("机器人开启站立模式")

    try:
        ctrlMsgs = generMsgs(mode_mark=True,stand_mode=True)
        # publisher 发布指令
        teleop_cmd.publish(ctrlMsgs)
        time.sleep(0.2)
        ctrlMsgs = generMsgs(up=1.0,pitch=0.0)  # 上升的指令
        teleop_cmd.publish(ctrlMsgs)
        print("Message published")
    except Exception as e:
        print("Error occurred:", e)



 
    

# 组装msg,用来publish给机器人
def generMsgs(forward=None,left=None,roll=None,up=None,
                pitch=None,mode_mark=False,height_ctrl_mode = None,
                pitch_ctrl_mode = None,roll_ctrl_mode = None,stand_mode = None,
                jump_mode = False,dance_mode = None):
    # global ctrlMsgs

    ctrlMsgs = MotionCtrl()

    ctrlMsgs.mode_mark = mode_mark
    ctrlMsgs.mode.jump_mode = jump_mode

    ....

    return ctrlMsgs

此处保留一个问题是:这个用topic,并不会拿到反馈,机器人是否站立,是否成功执行等等都不知道,不知道是否会影响??

lib下面放的都是源码,有刑天机器人的源码,有激光雷达,深度相机的源码等等

刚才的控制机器人站立的话题消息的结构体

熟悉项目过程中_第7张图片

此处是一个盲区,之前都是int,float 这里的结构体一看就是自己定义的,我们需要找到这个结构体,这个结构体在那里呢? 

熟悉项目过程中_第8张图片

感觉此处,可以直接把一个文件名导入过来

虚拟遥控器

熟悉项目过程中_第9张图片

机器人有一个真实的遥控器,现在应该是要用键盘来模拟一下虚拟的遥控器,能控制上下左右前后移动,文档上面说在teleop.py中,这个也是一个node节点需要启动,这个文件在那里呢?

熟悉项目过程中_第10张图片

我们如何查看这个node节点叫什么名字呢?

去setup.py中查看一下就知道了

熟悉项目过程中_第11张图片

现在看一下,这个命令是否被佳伟哥使用过,如果使用过,那就证明自己的思路是没有问题的

搜索了一下,没有使用,可能是这个已经不需要了,因为有更加先进的控制方式了。

自己看了一下,发现原来佳伟哥的代码也是从这里面模仿的

熟悉项目过程中_第12张图片

什么是机器人的虚拟仿真环境?

暂时跳过

机器人如何驱动雷达?

现在的雷达是平面扫描,属于2D,后面准备搞3D雷达

需要找到启动雷达的命令,然后根据这个命令,就能找到雷达所在的代码,就能找到雷达

 ros2 launch ydlidar_ros2_driver ydlidar_launch.py params_file:=/opt/deploy/diablo-robot/config/params/ydlidar.yaml

在ros2上驱动激光雷达 (驱动过程中激光雷达的源代码sdk,需要安装一下)

https://github.com/YDLIDAR/ydlidar_ros2_driver

下面是

GitHub - YDLIDAR/YDLidar-SDK: Driver for receiving YD LiDAR data and more...

 安装教程:https://github.com/YDLIDAR/YDLidar-SDK/blob/master/doc/howto/how_to_build_and_install.md


 

如何用雷达建图?

如何把机器人放入地图中?如何使用Nav2导航?

地图会被保存成一个文件

launch nav2_bringup bringup_launch.py use_sim_time:=False map:=/opt/deploy/diablo-robot/config/maps/v1/01.yaml params_file:=/opt/deploy/diablo-robot/config/params/nav2_params.yam

如何进行避障?

你可能感兴趣的:(ROS,1024程序员节)