起因

简单介绍一下我的目标

获取部分人体关键点的空间坐标 控制双臂机器人进行拥抱

首次尝试

2022.11 开始做识别部分的内容,开始挑选硬件
这是当时小组会的PPT

X3就不用多说了 非常强大

初次接触人体关键点识别

刚开始是拿了一个普通的USB摄像头进行识别,但是摄像头的输出像素格式是YUYV,当时关键点识别还只能用mjpeg的USB摄像头或者MIPI的摄像头,于是乎买了官方的MIPI进行尝试

效果确实不错,但是我不光要关键点的二维坐标,还要三维坐标,这里就需要深度相机了

实验室刚好有一台Intel的深度相机435,折腾了好久,因为并不熟悉这些东西,最后也没折腾出来

仔细想想,机器人头上装俩摄像头就很奇怪,想想就脑壳痛。

当时问群里的开发人员,他们说这个相机暂时不支持,后面可能会支持。其实当时已经有codec模块了,但是好像没有文档,反正是没找到。

所以转去了用笔记本做主控,但是因为一些结构上的原因我又回来了

其实也就花了两天的时间,比我移植ALPHAPOSE快多了

RealSense 人体关键点识别

先讲一下整体思路

Realsense node发布的是rgb格式的图像,使用hobot_codec把rgb转成jpeg jpeg转nv12(rgb8好像不能转nv12 我也不知道为什么 程序说的),最后nv12送给mono2d_body_detection 就可以了

安装realsense2 SDK

设置网络环境

这里因为网络原因需要设置一下GITHUB的代理的host,不然无法访问。

打开https://www.ipaddress.com/ 输入raw.githubusercontent.com 查询IP地址 找不到就一直往下滑,直到找到

把找到的ip按这个格式保存好

1
2
3
4
5
140.82.112.3 github.com
185.199.108.133 raw.githubusercontent.com
185.199.109.133 raw.githubusercontent.com
185.199.110.133 raw.githubusercontent.com
185.199.111.133 raw.githubusercontent.com

编辑hosts文件

1
2
3
4
5
6
sudo vim /etc/hosts
# 重启网络
/etc/init.d/networking restart

# ping一下试试
ping raw.githubusercontent.com

添加ROS apt源

1
2
3
4
5
6
7
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 $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null


sudo apt update

安装Realsense SDK

这一步因为网络原因可能会比较漫长,耐心等待,不如起来活动活动吃个饭。

1
2
3
4
5
6
7
# 显示ROS当前版本,如果显示为空,请source /opt/tros/setup.bash
echo $ROS_DISTRO
# 安装RealSense SDK
sudo apt-get install ros-$ROS_DISTRO-librealsense2* -y
# 安装RealSense ros wrapper
sudo apt-get install ros-$ROS_DISTRO-realsense2-camera -y
sudo apt-get install ros-$ROS_DISTRO-realsense2-description -y

建立软连接

1
2
3
cd /opt/tros
## 使用/opt/tros目录下的create_soft_link.py创建ROS package至tros.b的软连接
sudo python3 create_soft_link.py --foxy /opt/ros/foxy/ --tros /opt/tros/

到这里Realsense2 SDK就安装完成了

运行测试

运行前要先:

source /opt/ros/foxy/setup.bash

然后:

source /opt/tros/setup.bash

运行程序:

ros2 launch realsense2_camera rs_launch.py depth_module.profile:=640x480x15

这里要感谢一下王卓大佬

运行

这里我写了个脚本,保存为.sh文件,然后运行就好了,当然你也可以一步步运行看看哪里出错了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
echo '设置ros2环境变量'
source /opt/ros/foxy/setup.bash
source /opt/tros/setup.bash

sleep 5
echo '启动ros2 realsense 节点'

ros2 launch realsense2_camera rs_launch.py depth_module.profile:=640x480x15 &

sleep 5
echo '启动ros2 rgb8 2 jpeg 节点'
ros2 run hobot_codec hobot_codec_republish --ros-args -p channel:=0 -p in_mode:=ros -p in_format:=rgb8 -p out_mode:=ros -p out_format:=jpeg -p sub_topic:=/camera/color/image_raw -p pub_topic:=/image_jpeg --log-level error &
sleep 5
echo '启动ros2 jpeg 2 nv12 节点'
ros2 run hobot_codec hobot_codec_republish --ros-args -p channel:=1 -p in_mode:=ros -p in_format:=jpeg -p out_mode:=shared_mem -p out_format:=nv12 -p sub_topic:=/image_jpeg -p pub_topic:=/hbmem_img --log-level error &
sleep 5
echo '启动ros2 websocket 节点'
ros2 run websocket websocket --ros-args -p image_topic:=/image_jpeg -p image_type:=mjpeg -p smart_topic:=/hobot_mono2d_body_detection --log-level error &
sleep 5
echo '启动ros2 mono2d_body_detection 节点'
ros2 run mono2d_body_detection mono2d_body_detection --log-level error &
sleep 5
echo '启动ros2 websocket 节点'
ros2 launch websocket hobot_websocket.launch.py &

需要注意的是 rgb8(ros) -> jpeg(ros) -> nv12(shared_mem) -> mono2d_body_detection

参考链接

安装realsense SDK参考:https://c-gitlab.horizon.ai/HHP/box/hobot_slam/orb_slam3

软链接参考:https://developer.horizon.ai/api/v1/fileData/TogetherROS/quick_start/install_use_ros_pkg.html

codec参考:https://c-gitlab.horizon.ai/HHP/box/hobot_codec

如果有哪里有问题,包括我的问题和你运行的问题,欢迎评论指出,我会及时修改

这里还要感谢一下王卓大佬

关于realsense 的文档藏的也太深了。。。

To Do

深度信息获取与计算
表情视频切换播放