起因
简单介绍一下我的目标
获取部分人体关键点的空间坐标 控制双臂机器人进行拥抱
首次尝试
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按这个格式保存好
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文件
sudo vim /etc/hosts
# 重启网络
/etc/init.d/networking restart
# ping一下试试
ping raw.githubusercontent.com
添加ROS apt源
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
这一步因为网络原因可能会比较漫长,耐心等待,不如起来活动活动吃个饭。
# 显示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
建立软连接
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文件,然后运行就好了,当然你也可以一步步运行看看哪里出错了
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
深度信息获取与计算 表情视频切换播放