地平线是一家公司,刑天机器人是他们家的一款产品,是硬件,旭日派也是他们家的一款产品,用作刑天机器人的大脑。 刑天机器人的源代码能安装到旭日派板子上面,也能安装到树莓派(国外的板子)上面。 刑天现在的很贵的这个板子是什么牌子的?
补充:绿色机器人(幻尔公司)运行在 jetson nano板子上面
tros貌似是基于ros的开发的,是地平线公司在ros上面的封装,有更多高级的功能
先找到刑天的源代码,就是能控制刑天硬件的代码GitHub - DDTRobot/diablo_ros2: diablo ros2 packagediablo ros2 package. Contribute to DDTRobot/diablo_ros2 development by creating an account on GitHub.https://github.com/DDTRobot/diablo_ros2
根据源代码可以找到开发手册,开发手册说让我们刑天源代码ROS2版本
这里面的前两步是在干嘛?我目前理解的是,可以安装旭日派板子上面,也可以安装在树莓派板子上面,如果不是这两款板子,可以直接 Complie ROS Package
最关键的一条命令:run diablo_ctrl diablo_ctrl_node ,这个是获取到机器人的运动权限
这是一个大概的,更具体的在文档的第三节,展示了刑天机器人的所有node节点
The robot obtains the SDK control permission — DIABLO-Onboard-SDK v2.1 documentation
这是一个基础的node节点,关于控制机器人运动。 你需要运行diablo_ctrl_node节点获取运动权限。 为了达到控制的效果,你应该把命令用自定义消息格式 MotionCtrl 数据 发送给/diablo/MotionCmd
查看一下,我们是如何发送信息
找到佳伟哥跑的项目所在的位置:/opt/deploy/diablo-robot
项目目录下面有一个src,但是没有interfaces,和之前的不太一样,就是定义msg,srv,action的东西,这个东西在那里呢?
机器人板子项目地址: /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下面放的都是源码,有刑天机器人的源码,有激光雷达,深度相机的源码等等
刚才的控制机器人站立的话题消息的结构体
此处是一个盲区,之前都是int,float 这里的结构体一看就是自己定义的,我们需要找到这个结构体,这个结构体在那里呢?
感觉此处,可以直接把一个文件名导入过来
机器人有一个真实的遥控器,现在应该是要用键盘来模拟一下虚拟的遥控器,能控制上下左右前后移动,文档上面说在teleop.py中,这个也是一个node节点需要启动,这个文件在那里呢?
我们如何查看这个node节点叫什么名字呢?
去setup.py中查看一下就知道了
现在看一下,这个命令是否被佳伟哥使用过,如果使用过,那就证明自己的思路是没有问题的
搜索了一下,没有使用,可能是这个已经不需要了,因为有更加先进的控制方式了。
自己看了一下,发现原来佳伟哥的代码也是从这里面模仿的
暂时跳过
现在的雷达是平面扫描,属于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
地图会被保存成一个文件
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